接上期的《基于YOLO算法的装维质检目标检测(二)》
这一期主要为大家讲解YOLO算法的的流程和实际建模过程
【YOLO 算法】
YOLO introduction
YOLO
是RBG继RCNN,fast-RCNN,faster-RCNN以后,又一力作。针对目标检测中,无法实现实时性检测的问题,独辟蹊径,开创了目标检测的新思路,直接将目标检测转化到回归上,直接用一张图片得到bounding box和所属类别。在针对质检选择One-stage中的算法考虑到速度以及YOLO算法的快速发展,目前以及发展到YOLOv3版本,识别Object已超过9000种,准确性也有了很大提升。图1展示经典目标检测在准确性和速度上的表现
设计理念
YOLO算法采用一个单独的CNN模型实现段对端的目标检测。就是从利用整张图像作为网络的输入,直接在输出层回归boundingbox的位置和bounding box所属的类别,把ObjectDetection的问题直接转化为一个回归问题
算法特点
①速度快,能够达到实时的要求。在Titan X的GPU上能够达到45帧每秒
②使用全图作为Context信息,背景错误(把背景错认为物体)比较少
③泛化能力强
算法流程
YOLO直接从一张图像中提取特征,来预测每个bounding box,最小化和的误差。由于YOLO是一个端对端的训练,并且没有中间的生成,所以在速度上有了很大的提升。大致流程为:
①YOLO的CNN网络将输入的图片分割得到S*S网格(cell)。某个物体落入S*S中某个网格中,该网格就负责预测这个物体,并且每个网络只预测一种Object
②每个单元格会预测B个边界框,每个除了要回归自身的位置以外,还要预测边界框的置信度。所谓置信度其实包含两个方面,一是这个边界框含有目标的可能性大小,记为:;当该边界框是背景时(即不包含目标),此时。而当该边界框包含目标时。二是这个边界框的准确度,边界框的准确度可以用预测框与实际框的交并比)来表征,记为,因此置信度可以定义为:*。边界框的大小和位置是通过4个值来表征:,其中是边界框的中心位置,是相对于每个单元格左上角坐标点的偏移值,并且单位是相对于单元格大小的。和是边界框的宽和高,边界框的和预测值是相对于整个图片的宽和高的比例
③每个网格还要预测C个(条件类别概率):,记为C类。则S*S个网格中,每个网格要预测B个,还要预测C个类别,输出就是S*S(5*B+C)
④测试时,对于每个网格预测的class信息和预测的confidence信息得到每个的以后,设置阈值,过滤掉得分低的boxes,对保留的boxes进行非最大抑制(NMS)处理,就得到最终的检测:
检测结果
网络结构
YOLO 网络架构通过该修改GoogleNet,网络总共24层,前22层卷积层,用来提取特征,最后2层全连接层用来预测概率和坐标。网络的结构如下图所示:
网络结构图
网络输出7*7*30的三维特征。
结果测试
YOLO算法网络最终不仅要预测类别,还要预测坐标。YOLO全部使用了均值和误差作为loss函数,由三部分组成:坐标误差、IOU误差和分类误差
在坐标预测中,使用平方损失函数的话,大的boxes比小的boxes权重要大,为了消除这个缺陷,对高度和宽度进行求根。损失函数:
上公式中代表有物体出现在中;代表中的第j个预测是否合理。上述的如果物体在cell中,只会惩罚错误的分类。如果预测的合理,对坐标的差异对进行惩罚。最小化上述,就可以得到最优的预测结果
建模过程分析
Modeling process analysis
输入
读取图片
图像预处理
适配算法的代码
训练样本集
(1) 原图(4908张)
(2) xml文档,是对原图通过标注工具(ImageLabel)生成的xml文档
(3) txt文档,对xml文档进行解析,生成存放类别及对应边框信息txt文档,以及存放每张图像具体地址的txt文档。见下图展示:
参数设置:
Batch=256; Subdivisions=64; learning_rate=0.001; max_batches=20000
测试:
#结果生成txt文档,包括类别、置信度等。
END