机器学习|目标检测网络-yolo

目标检测网络-yolo 本文将根据论文“基于深度学习的户外施工人员违规行为检测”需要掌握的知识进行讲解。
常见3大数据集 ImgNet、COCO 、VOC
目标检测框相关的专业术语 ground truth box(以下简称GT box):又称为GT box,是指人工标注的正确的目标检测框
bounding box(以下简称B box):预测目标边界框,也就是最终产生预测结果的边界框
anchor box/prior box(以下简称A box):预选框/先验框/网格,用以保存特定grid cell(网格)中bounding box应该取宽高比W:H为多少(B box只会相对宽高比进行放缩,不会改变宽高比)信息的网格。从训练集的所有ground truth box中统计(使用k-means)出来的在训练集中最经常出现的几个box形状和尺寸,即宽高比W:H。以前面提到的训练数据集中的ground truth box最常出现的三个形状为例,当模型在训练的时候我们可以告诉它,你要在grid cell 1附近找出的对象的形状要么是扁长的、要么是瘦高的、要么是长高比例差不多的正方形,你就不要再瞎试其他的形状了。anchor box其实就是对预测的对象范围进行约束,控制了B box宽高比,并加入了尺寸先验经验,从而实现多尺度学习的目的。但是虽然B box是由A box经过一系列复杂的变换得到的,但是在计算损失时B box的4个维度参数xywh却是根据grid cell来计算的。
yolo网络在coco数据集中,只有9种A Box,其中yolo会输出3中不同尺寸大小的feature map特征图,分别用以预测大,中,小目标,每一个feature map得到这9个A box中的3个。
使用k-means聚类算法得到anchor box中信息 使用k-means聚类算法得到每个anchor box对应的bounding box常用宽高比。
k-means聚类算法就是:

  1. 把所有的目标边界框gt box取出,然后选中其中的若干个框作为anchor box;
  2. 计算所有gt box和anchor box的交并比,将所有的gt box分配给与其IoU最小的anchor box;
  3. 对于每个anchor box,算出其所有被分配的gt box的平均值,并将该平均值赋值给anchor box;
  4. 再计算anchor box和gt box的IoU,重复2-4步骤,直至anchor box不变化。
  5. 于是最终得到的anchor box用以存储预测目标检测框bounding box在该grid附近应该出现的宽高比WH,在yolo v3中每个grid cell共计9个。
最终GT box的中心落在哪个grid cell则用这个grid cell来预测这个形状的GT box。给该grid cell配置一个A box,这个A box为与该GT box IoU最大的A box。
目标检测中常见指标:FPS,IoU,confidence,mAP,TOP
  • FPS
    FPS:frames per second,每秒钟检测的帧数
  • IoU
    IoU:Intersection over Union,交并比,B box边界框的准确度可以使用IoU表示,IoU等于两个边界框的相交的部分比上相并的部分,一般规定在检测中B box和GT box的IoU>0.5即为B box成功预测物体,即获得TP
  • confidence
    confidence反映了B box预测的准不准的信息,confidence的计算公式是confidence = P(object)*IoU(truth->pred)
    其中如果有object落在一个grid cell里,第一项取1,否则取0。第二项是预测的bounding box和实际的groundtruth box之间的IoU值。
    B box是否成功检测到了GT box可以通过confidence反应,若 c o n f i d e n c e < 阈 值 = > confidence<阈值=> confidence<阈值=>获得FN
  • mAP
    mAP:mean Average Precision,即各类别AP平均值。常用于判断coco,voc数据集下目标检测网络的B box准确率。言下之意:并不判断class正确率,即不判断是否将B box中的图像分类正确与否。
    为了更加深刻的理解mAP,我们需要引入以下几个概念。
    TP:true positive,此处IoU指GT box和bounding box的IoU I o U > x ( 一 般 x = 0.5 ) IoU>x(一般x=0.5) IoU>x(一般x=0.5)的bounding box个数
    FP:false positive,指 I o U < x ( 一 般 x = 0.5 ) IoU FN:false negtive,没有检测到的GT box的数量
    precision:查准率,所有B box中正确的B box比率, T P / ( T P + F P ) TP/(TP+FP) TP/(TP+FP)
    recall:查全率,所有GT box中被查中GT box的比率, T P / ( T P + F N ) TP/(TP+FN) TP/(TP+FN)
    P-R曲线:precision-recall坐标曲线
    AP:P-R曲线下面积
    将confidence的阈值从高到底降低形成rank1-7,从而改变FN等值,形成表格。绘制曲线,根据曲线计算AP值。将所有类别的AP值全部计算后取平均得到mAP
    机器学习|目标检测网络-yolo
    文章图片

    机器学习|目标检测网络-yolo
    文章图片

    机器学习|目标检测网络-yolo
    文章图片

  • top
    top:用于在imageNet数据集中目标检测网络评价指标。Top-5错误率,即对一个图片,如果概率前五中包含正确答案,即认为正确。Top-1错误率,即对一个图片,如果概率最大的是正确答案,才认为正确。
FP算法 BP算法 BP算法包括两个步骤,一个是使用forward propagation计算误差,一个是使用back propagation来调整权值。
yolo v3网络结构 1)主干网络darknet-53
53个卷积层所以命名darknet-53
机器学习|目标检测网络-yolo
文章图片

2)残差结构Residual
残差结构的存在是为了实现更加深层次的网络。
神经网络在每一层都会提取不同层次的特征信息,有低层,中层,高层,而网络越深的时候提取到的不同层次的信息就越多。而网络一深后,带来的不好的问题主要有梯度爆炸和梯度消失,传统的方法包括normlized initialization初始化和batch normlization归一化,这样解决梯度问题但是会增加错误率。
而残差结构就是一个很好的减少错误率,又能缓解梯度爆炸的问题。
3)yolov3网络结构
需要注意的是每一个convolutional其实包含:Conv+BN+RELU
每一个残差架构Residual包括:Conv+Conv+Residual
即它们的结构其实如下图所示:
机器学习|目标检测网络-yolo
文章图片

yolov3整体的网络结构如下图所示:
机器学习|目标检测网络-yolo
文章图片

预测特征图 目标边界框的预测 Cost Function 网络结构 最终那层的误差计算 误差的计算分为两种,一种是二分类问题,使用sigmoid产生的输出,使用二级交叉熵损失,计算得到的食物即可以是A也可以是B。另外一种误差的计算是多分类问题,使用softmax产生的输出,使用交叉熵损失,所有的输出概率之和为1,即一个事物是A的话就不可能是B。
使用的cost function含有3个的损失计算,confidence(这个最佳的预测目标边界框可不可信),class,目标边界框(选择哪个预测目标边界框个最佳)。
使用梯度下降算法得到权值 使用梯度下降算法得到适合的parameters。其中预测目标边界框的宽和高都是人为实现指定好的,根据k-means聚类方法得到。
使用BN层 BN层,全称Batch Normalization。在yolov2的时候加入了BN层,以替代了用以减小过拟合的正则化处理,同时也去掉了用以减小过拟合的dropout层。
BN层的作用,增加在卷积层的后面,在正向传播时候用到,目的在于减轻过拟合和加快收敛。
BN层本质:用来标准化每一层的特征分布,使得输入特征不相关且满足正态分布 N(0,1)。
机器学习|目标检测网络-yolo
文章图片

常见解决过拟合问题方法 包括但不限于dropout(减少features),regularization/L1正则化(增加权重parameters的平方),L2正则化(增加权重parameters的绝对值),BN层(归一化,使得映射的范围都趋近于0到1),残差结构(增加深度的同时一定程度上缓解了梯度爆炸和梯度消失问题)
yolov3 SPP网络增加了 机器学习|目标检测网络-yolo
文章图片

yolov3 的损失计算包括 cofidence损失1维,先验框预测位置损失(因为有9个先验框,xywh,通过预测位置损失选择一个框),c个类别分数(看是哪个类别)。
机器学习|目标检测网络-yolo
文章图片

yolov3 的正则化在每一次convolutonal中都有体现,因为每一个convolutional中都有BN层。 机器学习|目标检测网络-yolo
文章图片

其他常用的正则化方式有L1正则化(加上权重值的平方)和L2正则化(加上权重值的绝对值),dropout层(丢掉一些features)。
python基本数据类型 机器学习|目标检测网络-yolo
文章图片

脚本语言,解释语言和编译语言区别 编译语言和解释语言,编译需要一次性编译成机器码可执行文件exe,解释语言是运行一句转换一句。解释语言比较慢,编译语言编译要时间。常见解释语言java,编译语言c。
脚本语言,不注意类型,弱类型语言。更加注重的是逻辑,而让程序员屏蔽逻辑之外的事务,加快了开发效率,但是弱类型语言更容易出bug。
【机器学习|目标检测网络-yolo】写这篇文章时候参考了很多大佬的文章和教程,但是忘记链接了,非常感谢各位大佬的指点。

    推荐阅读