钢材缺陷分类检测及标记
这个是去年的比赛,过了很久了才来记录一下。
附上IEEE-CIS Fraud Detection的总结
赛题理解
kaggle链接
竞赛主要目的是钢材图片进行缺陷检测分类及标记,图像识别的机器学习问题,使用到了google的开源框架,EfficientNet
评估标准:是Dice coefficient戴斯相似性系数 (倾向于保守预计,错判比漏判损失严重)
结果:0.90798,0.91685
数据介绍
train_images, test_images, train.csv(注:现在看到的这个表和原来的表结构不太一样了)
图片大小是(256, 1600),缺陷类别有4种,
Pixels(图像标签)→ 原图片的缺陷是没有标注,要用这个圈出来,表示方法是用一组组起点+长度表示
原来的表结构
现在的表结构
过程思路
一、数据分析和处理,主要是做图片数据增强,使用albu 库的随机水平翻转 RandomHorizonalFlip
二、 模型建立,这里有2步,因为这个赛题是要找出有缺陷的图片并标记出来是哪种缺陷,所以第一步是检测图片有没有缺陷,毕竟,没有缺陷就没有必要往下走了,另外,评估标准是Dice coefficient戴斯相似性系数,也就是如果一个没有缺陷的图片被标记有缺陷,对分数的损失比一个有缺陷的图片没有被找出来更大。所以分类模型更倾向于没有图片没有缺陷
建立分类模型:检测这个图片有没有缺陷,在前面的图片分析种,大部分图片是没有锈斑的,这种就没有没有必要去做一个分割网络,因为没有loss,容易出问题
分别用EfficientNet-b2,EfficientNet-b3,并且将这2个模型进行一个简单的融合,这是一个多分类任务,5种 (包含无锈斑)
- 输入部分:①原图② RandomCrop 获取256*800 一半size的图片
参数:batch size=64,优化器=AdamW ,学习率=0.003
- 输入部分:①原图② RandomCrop 获取256*800 一半size的图片
分割模型(segmentation_models_pytorch):对于被检测出有锈斑的图片,对每个像素点做分类任务
用到FPN: 一种高效的CNN特征提取方法,输入为任意大小的图片,输出为各尺度的 feature map。
其中 bottleneck layer是EfficientNet-b3,ENCODER = ‘efficientnet-b3’