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

内容时间:9月18日

实验结果

使用Kaggle猫狗分类的代码,即使用三个深度学习网络ResNet50, InceptionV3, Xception提取图片特征,然后使用神经网络DNN分类,验证集显示过拟合。本地精度0.93~0.95,在线精度0.8845
天池:铝型材表面瑕疵识别笔记_第1张图片

         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张图片)
天池:铝型材表面瑕疵识别笔记_第2张图片

其中,其他文件夹所含类别数目如下:
天池:铝型材表面瑕疵识别笔记_第3张图片

本basemodel 关于不平衡使用的是调整损失函数的权重(class_weight)。关于kears flow如何处理文件夹.子文件夹.图片,调试可得:
天池:铝型材表面瑕疵识别笔记_第4张图片

整理后的sample文件夹如下,除train_gen外的子文件夹下均是相应图片:
天池:铝型材表面瑕疵识别笔记_第5张图片

后续操作

不一定可行

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

代码位置

内容时间:9月19日

对于其他文件夹,划伤、打白点、气泡、碰凹、纹粗、铝屑大于等于10个样本,将其移出参与分类(位于代码tools中),
天池:铝型材表面瑕疵识别笔记_第6张图片
包括正常类,一共17类。数量分布如下。
天池:铝型材表面瑕疵识别笔记_第7张图片
数据增强(如何合理的增强)到每类100。
天池:铝型材表面瑕疵识别笔记_第8张图片

分类结果在训练集上过拟合,阈值设置的为0.4(似乎太大),本地验证集上不稳定在0.88,线上精度较差,0.7867。使用lightgbm本地精度0.80。(下图验证比0.2)
天池:铝型材表面瑕疵识别笔记_第9张图片

实验2代码位置

总结

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

你可能感兴趣的:(python与人工睿智,机器学习入门与放弃)