Dog breed Identiffication

作者: 素娜93 | 来源:发表于2018-11-30 10:11 被阅读24次
Fine-grained image categorization.png
任务描述

Dog Breed Identification

Data

训练数据为120个品种狗狗的照片,共10222张。共10357张测试样本。

检测

下图为提供的一张训练样本的示例,可以看到不仅有目标物,还有人,可能还会有其他各种各样的物体,因此需要将狗狗从图像中检测出来,考虑到已经有训练好的可以进行狗狗检测的模型,直接调用训练好的模型对狗狗进行检测。
这里使用 tf-faster-rcnn 项目下提供的 voc_2007_trainval+voc_2012_trainval 预训练好的模型进行检测,该模型是在VOC 2007以及2012数据集上训练的模型,pascal_voc 包含20个分类,如bicyle、cow、dog 等等,因此利用该模型直接进行检测。

5a533f3bae76091d6866fa60ba2ec9d4.jpg
分类

检测完成后, 检测结果保存在tf-faster-rcnn/data/VOCdevkit2007/results/VOC2007/Main 目录下,共20个txt文件夹,对应20个种类

检测结果.jpeg 选择其中对应狗的txt对原始图像进行处理,在10072张图片中检测到了狗,置信阈值取0.5,将检测失败的原始图像移入failed 文件夹,共150张,再次对这150张图像进行检测,置信阈值选择0.4,检测出46张狗狗的图像,因此共检出10118张狗狗的图像,根据官方提供的labels.csv文件(提供了与训练样本文件名对应的狗狗的品种)对检测出的图像进行归类,共120个文件夹,每个文件夹以狗的品种命名,包含这种种类别狗狗的所有照片。对文件夹进行统计分析,每类平均80张图像, Classified_datasets.png
对于检测失败的104张图像,可以选择
  • 降低置信阈值,如0.3,再人工筛选并归类;
  • 人工标记并分类
  • 将检测的其他类的结果(主要是动物,如牛,马等等)进行显示,可能会误检测,再人工分类

我比较懒,觉得剩下的样本也不多,就没有进行处理,由于训练样本较少,斯坦福大学提供了Stanford Dogs Dataset 数据集,也是120个品种,20580张图片,并提供了标记文档,这里可以作为训练样本的扩充,但是这次比赛的数据集也是imagenet上提供的(10222+10357=20579),斯坦福的这个数据集也是imagenet提供的,包含图像20580张,我怀疑两个两个数据会不会重合,先下载下来进行后续分析决定是否适用。分析过后大致可以确定这两个数据集是一样的,以Chihuahua为例,kaggle比赛提供的train里边的图片在斯坦福提供的这个chihuahua里边都可以找到,因此调整一下训练策略。首先使用斯坦福提供的这个数据集,因为自己检测的时候有的没有检测到,其次这个数据集更丰富,直接使用会与训练样本有重合,而且相当于测试样本也已经训练了,所以将这些样本根据标记文档进行检测,水平翻转,与训练样本一起进行训练,从而丰富数据集。
3、下载斯坦福的数据集,Annotations和Images,Annotations都是没有后缀的达标文档,为了后续方便,将标记文档重新命名并放在一个文件夹内。遍历文件夹图像进行检测,检测结果归类放置。
4、 stanford数据集水平镜像,合并两个数据集。
5、在做完狗狗的检测后,接下来是分类,目前网络上已经公开了许多训练好的模型,如VGG、ResNet、google的inception系列,都可以用来进行分类,但是由于比赛提供的训练数据比较有限,所以这里可以采用迁移学习的思想进行网络的学习,使用谷歌的inception v4进行训练。
6、进一步进行度量学习,减小类内间距,增大类间间距,如centerloss、triptloss.由于centerloss每次需要得到同类的特征中心,同类的狗由于不同的位姿,会导致特征中心不稳定,效果不好,将数据划分位10分,随机选取9份进行训练,一份测试,训练多个模型进行测试。将不同分类器得到的特征进行融合,拼接在一起训练。

相关文章

网友评论

    本文标题:Dog breed Identiffication

    本文链接:https://www.haomeiwen.com/subject/jfhpgxtx.html