开发Dilbert卡通图像分类算法的一般方法
classification
computer-vision
feature-detection
machine-learning
13
0

作为一项自我发展的练习,我想开发一种简单的分类算法,在给定Dilbert卡通的特定单元格的情况下,能够识别出卡通中存在哪些字符(Dilbert,PHB,Ratbert等)。

我认为最好的方法是(1)对图像应用某种算法,将其转换为一组特征;(2)使用训练集和许多可能的机器学习算法中的一种来关联存在性/在单元格中没有某些具有特定特征的特征。

因此,我的问题是-(a)这是正确的方法吗,(b)由于要测试许多分类算法和ML算法,找到正确方法的最佳方法是什么,以及(c)您将开始使用哪种算法考虑到我们实际上是对卡通进行分类练习。

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

因此,我认为您的第一步是正确的( 将某种算法应用于图像,将其转换为一组功能)

这个项目比大多数机器学习问题更具挑战性,因为在这里您实际上必须从原始数据(构成卡通的各个帧)创建训练数据集。例如,抓取一个框架,在该框架中标识两个字符Dilbert和带角的字符(我相信Dilbert的老板,不知道他的名字),从该框架中提取这两个字符并附加到每个适当的类标签上(例如,Dlibert为“ 1”)。

步骤1

为了从构成Dilbert卡通的每个帧中提取单个字符,我建议对每个帧进行频谱分解 。如果您不熟悉这项技术,那么它的本质就是本征向量分解。

如果您喜欢python(或R,因为您可以使用像RPy这样的python-to-R绑定),那么我强烈建议您看看sklearn 。特别是,这个出色的库(最初是在SciPy scikits项目的框架下开发的,因此使用NumPy + SciPy进行矩阵计算)具有几种图像分割算法,其中一种是基于光谱聚类的 。对于项目的这一步,您很可能希望查看这两个scikits.learn模块。

  • sklearn.feature_extraction (尤其是图像子模块)

  • sklearn.cluster.spectral_clustering

附带这两个模块是两个很好的例子脚本,一个分段的数字照片其他分割由三个部分超级强加的圆的最小对比度W / R / T彼此和W / R / t时的background--的图像两者,我怀疑是您将需要执行的分解过程中比较困难的问题。换句话说, sklearn在源代码发行版中包含两个完整的,文档齐全的示例脚本,这两个脚本都处理与您相似的数据。这一步中的一个或两个都是很好的模板。

第2步

所以这是第一步;这里是第二个: 排序全部分解图像的部件分成组, 一组为每个人物呆伯特 。接下来,为每个组分配一个类别标签,例如,如果分解步骤中有四个字符,则类别标签的合适选择是“ 0”,“ 1”,“ 2”和“ 3”。将这些类标签附加到组成矩阵(步骤1中的分解产物),以便将每个字符矩阵映射到其相应的类(Dilbert字符)。

第三步

选择合适的机器学习技术。您在此步骤中有很多选择。唯一的标准是该技术属于受监管的类别(因为您已为数据分配了类别标签)并且该技术可作为分类器 (即,它返回类别标签,而输出输出数值的回归器)。鉴于这是一个个人项目,我会选择一个您觉得最有趣的项目。满足我刚才提到的条件的一些设备是: 多层感知器 (神经网络), 支持向量机 (SVM)和k最近邻居 (kNN)。

第四步

训练,验证和测试您的分类器

替代技术模板匹配

一旦完成步骤1(每个图像分解为一组对象,其中一些对象无疑将代表角色),您就可以手动筛选这些分解产物,并为卡通中的每个角色收集示例。是模板

接下来,您将从图像分割的对象与这组唯一模板进行比较。在另一个scipy scikit scikit-image中 ,可以使用match_template方法,将模板图像和候选图像传递给该方法,此方法将返回一个二维数组,该数组显示逐像素相关性(介于-1和1之间)。 )。

收藏
评论

我认为,通常来说,这是正确的方法,您可以查看两种技术。

  • Eigenfaces ,所有使用特征向量进行面部识别的算法的名称。
  • 词袋法或视觉词法。
收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题