And*_*w J 31 python classification machine-learning computer-vision feature-detection
作为一个自我发展练习,我想开发一个简单的分类算法,给定Dilbert卡通片的特定单元格,能够识别出动画片中存在哪些角色(Dilbert,PHB,Ratbert等).
我认为最好的方法是(1)将一些算法应用于图像,将其转换为一组特征,以及(2)使用训练集和许多可能的机器学习算法之一来关联存在/没有特定特征存在于细胞中的某些特征.
所以我的问题是 - (a)这是正确的方法,(b)因为有许多分类算法和ML算法要测试,找到合适的算法的好方法是什么,以及(c)你会开始哪种算法因为我们基本上是在对卡通进行分类练习.
dou*_*oug 25
因此,我认为你在第一步的正确轨道上(对图像应用一些算法,将其转换为一组特征).
这个项目比大多数ML问题更具挑战性,因为在这里你实际上必须从原始数据(包含漫画的各个框架)创建你的训练数据集.例如,抓住一个框架,识别该框架中的两个角色,Dilbert和带角的角色(我相信Dilbert的老板,不知道他的名字),从那个框架中提取这两个字符并附加到每个相应的类别标签上(例如,Dlibert为"1".
步骤1
为了从包括Dilbert卡通的每个帧中提取单个字符,我建议每个帧的频谱分解.如果你不熟悉这种技术,那么它只是一个特征向量分解.
如果您喜欢python(或R,假设您可以使用像RPy这样的python-to-R绑定)那么我强烈建议您查看sklearn.特别是,这种优良的库(这是最初的下开发SciPy的scikits项目伞,和因此使用NumPy的+ SciPy的用于矩阵运算)具有的图像分割,其中之一是基于几个算法谱聚类.对于Project中的这一步,您很可能希望查看这两个scikits.learn模块
sklearn.feature_extraction(尤其是图像子模块)
sklearn.cluster.spectral_clustering
附带这两个模块是两个很好的例子脚本,一个分段的数字照片和其他分割由三个部分超级强加的圆的最小对比度W/R/T彼此和W/R/t时的background--的图像两者,我怀疑你需要执行的分解是更困难的问题.换句话说,sklearn在源代码分发中包含两个完整的,记录完备的示例脚本,这两个脚本都处理与您类似的数据.这一步中的任何一个或两个都是一个很好的模板.
第2步
这是第一步; 这里是第二个:排序全部分解图像的部件分成组,一组为每个人物呆伯特.接下来,为每个组分配一个类标签,例如,如果您的分解步骤中有四个字符,那么类标签的合适选择是"0","1","2"和"3".将这些类标签附加到组件矩阵(步骤1中的分解产物),以便将每个字符矩阵映射到其对应的类(Dilbert字符).
第3步
选择合适的ML技术.你有很多选择这个步骤; 唯一的标准是,该技术是在监督类别(因为已经指定类别标签到你的数据),并且它的功能作为一个分类器(即,其返回一类的标签,对其输出的数值一回归).鉴于这是一个个人项目,我会选择一个对你来说最有趣的项目.满足我刚刚提到的标准的一些是:多层感知器(神经网络),支持向量机(SVM)和k近邻(kNN).
第4步
训练,验证和测试您的分类器
替代技术:模板匹配
一旦完成第1步(每个图像被分解为一组对象,其中一些无疑将代表字符),您可以手动筛选这些分解产品并收集动画中每个角色的样本.这是模板.
接下来,将从图像分割的对象与这组唯一模板进行比较.在scikit-image中,另一个scipy scikit,你可以使用你传递模板图像和候选图像的方法match_template,这个方法返回一个2D数组,显示逐个像素的相关性(介于-1和1之间) ).
| 归档时间: |
|
| 查看次数: |
7993 次 |
| 最近记录: |