项目目的:针对有缺陷电池图片,确定缺陷的位置和类别,进行电池质量检测。
缺陷类别:划痕、凹点、褶皱
图片大小:3800(高)*2800(宽) 30M左右每张
数据集大小:1400张左右的图片 每一类缺陷的数量?
数据指标:
(1)map
首先介绍ap的概念:PR曲线下的面积,是一个综合计算了精确度和召回率的指标。map是所有类别的ap平均。注意,这里要与roc指标作区分,roc指标以真正例(召回率)作为纵轴,以贾正例作为横轴,pr曲线以precision作为纵轴,recall作为横轴。
(2)自己定义的指标
次品检测率:92.96% 准确识别出存在缺陷的图片的比例
第一版本的模型:
采用faster rcnn模型进行缺陷检测,得到
map=39.93%
precision=42.01%
recall=39.93%
第二版本的模型:
由于模型效果呈现出在凹点缺陷出现了多个框的特征,且凹点这种小特征的识别效果不好,因此
对faster rcnn进行调参,针对凹点缺陷较小的特征,修改了NMS阈值,修改了图片输入resize的比例(修改为了多少?)(原本是将短边缩短到600像素,如果缩短后长边依然大于1000像素,则按将长边缩短至1000像素的比例进行放缩),修改了anchor的比例和个数(修改为了多少)
效果:一个缺陷多个框的现象减少了,小目标的检测召回率有所提升,但依然漏检率较高
第三版的模型:
小目标检测在深度学习卷积神经网络模型中一直是一个难题。早期的目标检测框架(R-CNN、YOLO系列)对于小目标检测的效果都不甚良好。
阅读大量小目标检测文献:
小目标检测调研:
- 图像金字塔:较早提出对训练图片上采样出多尺度的图像金字塔。通过上采样能够加强小目标的细粒度特征,在理论上能够优化小目标检测的定位和识别效果。但基于图像金字塔训练卷积神经网络模型对计算机算力和内存都有非常高的要求。计算机硬件发展至今也难有胜任。故该方法在实际应用中极少
- 特征金字塔:参考多尺度特征图的特征信息,同时兼顾了较强的语义特征和位置特征。该方法的优势在于,多尺度特征图是卷积神经网络中固有的过渡模块,堆叠多尺度特征图对于算法复杂度的增加微乎其微。
总结下来思路基本上就是提取多个特征图的特征进行综合预测,这个的好处在于
(1)将浅层信息和深层信息结合起来,深层信息提供了语义信息,也就是类别信息,浅层信息提供了较为精确的位置信息
(2)由于在cnn训练过程中,每一层都会产生特征图,因此增加的工作量很小
然后我们选择了使用FPN进行模型的改进。
FPN的主要思想如下:
(1)将得到的卷积特征图进行自上而下的融合,融合方法:将上层特征图下采样、下层特征图通过1*1的卷积更改维度、将维度和大小都相同的两个特征图相加、再对相加后的特征图进行3*3卷积以消除上采样的混淆效应。如此我们可以得到很多个混合后的特征图。
(2)在faster rcnn网络中可以分为两个部分,分别是rpn'和fast rcnn,这两个部分的修改都采用了fpn的思想。
在rpn中,需要根据vgg得到的特征图确定anchor,进而对anchor进行分类和位置调整,从而得到预测的proposal。加入fpn的思想,首先这里将vgg改成了resnet,其次是在每一层特征图上都确定anchor,在较浅层的特征图上的anchor面积较小,是32^2,在高层特征图上的anchor较大,是512^2,比例依然是三种。这样的话,在卷积神经网络中,我们可以确定15个anchor。相比于根据vgg确定的9个anchor,这里不仅i利用了更加精确的特征信息(主要是浅层位置信息),而且针对不同的特征图,我们采用不同的anchor大小,可以更精准的识别小目标物体。
在fast rcnn中,原始模型是根据vgg提供的特征信息,以及rpn提供的位置信息和类别信息,进行分类和位置修偏。但是加入fpn之后,我们就得到了不止一张特征图,如何对这些特征图都进行利用呢?我们已经获得了不同的proposal以及五张不同层次的特征图,在进行roi pooling时,可以针对不同大小的proposal,采用不同的特征图进行roi pooling,从而利用到不同的信息。
以上就是faster rcnn是如何将fpn结合进去的。
采用detectron平台的faster_rcnn_R-50-FPN模型进行训练。
模型效果:??
rcnn系列三个模型对比
rcnn:selective search+cnn+svm+线性回归
selective search 将图像划分为小区域-->将小区域根据相似度进行合并-->得到一些可能的区域
将区域resize-->cnn对这些区域分别进行特征提取(存在冗余)
利用svm进行分类、利用线性回归进行位置预测(对每一类训练一个回归模型进行ss的位置修正)
fast:(1)将原图输入cnn而不是每个区域输入cnn(2)引入roi pooling层,将ss提取的位置的相应特征进行resize(3)位置确定还是使用的selective search(4)将分类和位置回归放入网络中
faster:引入rpn网络代替ss,大规模提升速度