雪浪制造AI挑战赛—视觉计算辅助良品检测

比赛网址:https://tianchi.aliyun.com/competition/introduction.htm?spm=5176.100150.711.5.2f5f2784nAcZxN&raceId=231666

雪浪制造AI挑战赛—视觉计算辅助良品检测_第1张图片

这个比赛的任务是分类,初赛和复赛规则不同,初赛为二分类,而复赛为十一分类。

观察图像,目标为分类图像中布料上瑕疵的种类,而瑕疵大小不一,有的很长,有的很小,只有十几个像素,而图像大小有2560 × × 1920。并且每个种类的数量非常不平衡,‘正常类’最多,占训练集的大部分。

因此,我认为这是一个图像的细粒度分类任务。

初赛

初赛使用了两种方法,一种为传统分类,另一种为siamese network

传统分类方法:

网络使用vgg19,试过res和inception家族,都不收敛。并且使用fine-tune的方法,只解冻vgg19的最后两层,然后加一层带0.5dropout的全连接层。

训练时对训练数据进行随机裁剪,若图片属于正常类,则随机裁剪出256 × × 256的图片。若图片属于缺陷类,则随机裁剪的同时,裁剪出的图片中需包含缺陷部分。数据增强使用了随机水平,竖直翻转,随机放缩(1.0, 1.2)。

测试时使用滑动窗口,步长为128,对一块窗口预测四次取平均值:正常,水平翻转,竖直翻转,水平竖直翻转。最后取所有窗口的最大值作为预测结果。

训练时取10%作为验证集,再初赛最后几天把验证集也加入训练,初赛A榜得分0.8780

Siamese Network

一开始我尝试使用我上一篇翻译的文章的方法:《[kaggle]Humpback Whale Identification Challenge冠军方案》,但根本不收敛,我觉得原因可能是在生成score matrix的时候,因为正常类数量非常多,导致会有相同类出现在different pair中。
因此,我用了那个比赛中另外一个人的kernel:https://www.kaggle.com/CVxTz/beating-the-baseline-keras-lb-0-38
改动的地方有:

  • 把网络换为vgg19
  • 数据增强(和上面的方法相同)
  • 整张图片直接resize为768 × × 1024进行训练

训练时验证集使用和上面方法相同,最后A榜得分0.8546

ensemble

将上述两种方法的预测结果相加取平均,最后B榜得分0.9197。

复赛

复赛只使用了siamese network,不过在此基础上增加了hard sample mining,具体流程如下:

  1. 先像初赛那样训练。
  2. 训练后对训练集导出特征向量。
  3. 计算两两图片的特征向量的欧式距离
  4. 对于一张图片的相同类和不同类,分别取欧式距离最远的80%和最近的80%,作为下一次训练的数据。

不使用hard sample mining得分0.64左右,使用后最终得分0.6694。

总结

感觉这次比赛的成绩并不是很好,群里也有人说用triple loss这种方法不太好。那就看看决赛大家都是怎么做的吧。

具体代码见 GitHub

你可能感兴趣的:(深度学习,python,天池,keras,图像分类)