内容时间:9月18日

实验结果

使用Kaggle猫狗分类的代码,即使用三个深度学习网络ResNet50, InceptionV3, Xception提取图片特征,然后使用神经网络DNN分类,验证集显示过拟合。本地精度0.93~0.95,​​在线精度0.8845​​。

天池:铝型材表面瑕疵识别笔记_子类

         precision    recall  f1-score   support
0 1.00 0.83 0.91 6
1 0.72 0.84 0.78 25
2 0.88 1.00 0.93 7
3 0.74 0.77 0.75 26
4 0.92 0.92 0.92 13
5 1.00 1.00 1.00 8
6 0.99 0.99 0.99 205
7 1.00 1.00 1.00 5
8 0.98 1.00 0.99 65
9 1.00 0.68 0.81 19
10 0.92 0.95 0.93 37
11 1.00 1.00 1.00 12
avg / total 0.95 0.95 0.95 428

分析与设计

样本是不平衡的,(其他类所有的140张图片)

天池:铝型材表面瑕疵识别笔记_数据_02

其中,其他文件夹所含类别数目如下:

天池:铝型材表面瑕疵识别笔记_数据_03

本basemodel 关于不平衡使用的是调整损失函数的权重(class_weight)。关于kears flow如何处理文件夹.子文件夹.图片,调试可得:

天池:铝型材表面瑕疵识别笔记_数据_04

整理后的sample文件夹如下,除train_gen外的子文件夹下均是相应图片:

天池:铝型材表面瑕疵识别笔记_子类_05

后续操作

不一定可行

  • 生成样本,数据扩充,并使其平衡;
  • 其他类子类和11基本类一起处理,然后合并其他类子类;
  • 选择合适阈值,低于均判为其他类;
  • 特征选择或降维
  • 使用单模型,fine-tune

​代码位置​

内容时间:9月19日

对于其他文件夹,划伤、打白点、气泡、碰凹、纹粗、铝屑大于等于10个样本,将其移出参与分类(位于代码tools中),

天池:铝型材表面瑕疵识别笔记_过拟合_06


包括正常类,一共17类。数量分布如下。

天池:铝型材表面瑕疵识别笔记_过拟合_07


数据增强(如何合理的增强)到每类100。

天池:铝型材表面瑕疵识别笔记_子类_08

分类结果在训练集上过拟合,阈值设置的为0.4(似乎太大),本地验证集上不稳定在0.88,线上精度较差,0.7867。使用lightgbm本地精度0.80。(下图验证比0.2)

天池:铝型材表面瑕疵识别笔记_子类_09

​实验2代码位置​

总结

好像没啥要说的,实验是在个人笔记本上跑的,之所以没用微调等是因为曾经对一个实验用Inception V3微调,跑到一般显存(应该是)不足崩了?,所有没有良好的实验设备不建议做数据驱动的DL,现实还是很重要的。实验2是有问题的,因为我是先增强后分成训练集和验证集的;应该改为先分成训练集和验证集再增强,代码位于上述链接tools.py中,近来LOL上分,不再修正。对于实验2,建议读者运行时全部核查重构。好好学习,天天向上?