python - 开发Dilbert卡通图像分类算法的一般方法

标签 python machine-learning computer-vision classification feature-detection

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

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

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

最佳答案

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

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

步骤1

为了从组成Dilbert卡通的每个帧中提取单个字符,我建议每个帧的频谱分解。如果您不熟悉此技术,则其本质只是一个本征向量反压缩。

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

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

  • 这两个模块中包含两个很好的示例脚本,一个segmenting a digital photographother分割了一个图像,该图像由三个部分重叠的圆组成,彼此之间的对比度最小,彼此之间的对比度是w/r/t,w/r/t最小。怀疑是您需要执行分解的更困难的问题。换句话说, sklearn 在源代码发行版中包含两个完整的,文档齐全的示例脚本,这两个脚本都处理与您相似的数据。这一步中的一个或两个都是很好的模板。

    步骤2

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

    步骤3

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

    步骤4

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

    替代技术:模板匹配

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

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

    关于python - 开发Dilbert卡通图像分类算法的一般方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8108550/

    相关文章:

    matlab - 如何将图像转换为字符段?

    python - 我可以使用 Psycopg2 lib 连接到 mysql

    python - 如何在发送 HTTP 204 之前刷新 Flask 中的 header ?

    machine-learning - 用于文本分类的词性 (POS) 标签特征选择

    python - 如何向当前词袋分类添加另一个特征(文本长度)? Scikit学习

    c++ - 低对比度分割深度图像

    python - 按数据类型对python字典进行排序

    python - 类型错误 : 'module' object is not callable API

    python - Wine 质量数据集的训练准确率无法超过 55%

    computer-vision - 你如何计算图像的亲和性矩阵?