小白也能弄懂的目标检测YOLO系列之YOLOV1 - 第二期

上期给大家展示了用VisDrone数据集训练pytorch版YOLOV3模型的效果,介绍了什么是目标检测、目标检测目前比较流行的检测算法和效果比较以及YOLO的进化史,这期我们来讲解YOLO最原始V1版本的算法原理以及其实现,话不多说马上开始。

YOLO检测系统

小白也能弄懂的目标检测YOLO系列之YOLOV1 - 第二期_第1张图片

如图所示:当我们送一张图片给YOLO进行检测时,首先要将图片的大小调整位448*448,然后再在图像上运行单个卷积神经网络CNN,最后利用非最大值抑制算法对网络检测结果进行相关处理,设置阈值处理网络预测结果得到检测的目标,这个图像只经过一个单独的CNN模型就可以直接得到检测结果的过程又称为end-to-end(端到端)的目标检测

YOLO具体实现

小白也能弄懂的目标检测YOLO系列之YOLOV1 - 第二期_第2张图片

首先YOLO检测系统会将输入图像划分为S×S网格,也就是S×S个单元格,如果对象边界框的中心,也就是红色边界框的中心落入该网格单元,则该网格单元负责检测该对象,如图中红色的点就是对象狗的中心,就由这个点所处的绿色网格负责预测狗这一个目标,并得到这个狗目标的边界框以及种类。

怎么样用参数去表示上述的过程呢?为什么就可以知道这个中心点所对应的目标就是狗呢?

目标定位

每个网格会预测  个边界框(bounding box)以及这些边界框的置信度(confidence score),置信度包含两个方面,一是这个边界框含有目标的可能性大小,二是这个边界框的准确度,用预测框与实际框(ground truth)的IOU(interp over union,交并比)来表征,记为 。

即边界框的置信度:

              (1)

当边界框含有目标时=1,当其不含目标时,=0。也就是说只有当边界框含有目标时,置信度为,否则得到的置信度为0,没有意义,那么这个单元格预测的B个边界框也没有意义。

每个边界框又包含5个预测:x,y,w,h和置信度confidence , (x,y)坐标表示该边界框框相对于其所在网格单元位置的偏移量,单位是相对于单元格大小的,(w,h)则是该边界框相对于整个图像预测宽度和高度,c代表我们预测的这个边界框和任何真实框之间的IOU,即上述所所说的。最后的该边界框的置信度表示预测框与任何真实框之间的交并比IOU,每个边界框的预测值实际上包含5个元素: 

上面对目标进行定位,那么如何进行目标分类呢?

目标分类

对于每一个网格其还要给出预测出  个目标类别概率值,要想有这C个类别的概率有值的前提是有目标的中心点落在该网格,即网格中包含对象,也就是说该网格格中有某个边界框可以框住该对象,即=1,反之,没有目标,则个目标类别概率值都为0,数学表示就是条件概率:

                             Pr(Classi|Object)             (2)

在YOLO中根据训练数据集不同,可以预测类别的种类不同,即C不同。

在真正进行测试时,我们还会进一步进行目标的条件类别概率公式(2)与各个边界框的置信度预测 公式(1)相乘得到公式(3):

(3)

这样我们就可以得到该网格所有的边界框类别置信度class-specific confidence scores,具体含义就是说公式(3)即指明了该单元格的这个边界框所框住对象的类别和还指明了该对象的边界框的位置以及大小。

总结:

小白也能弄懂的目标检测YOLO系列之YOLOV1 - 第二期_第3张图片

上述所讲解的所有过程如上图:也就是说我们的输入图片首先被分成S*S个网格,每个网格会预测B个边界框,这B个边界框来定位目标,预测的(x,y)实际上是由B个边界框中框住目标的那个边界框的中心,再判断该边界框的中心属于那一个网格,当网格定位好之后,再由该网格这个区域对目标进行分类。

注意:这个过程中单个网格的B个边界框只会保留得分最高的那个边界框,即值最高的边界框进行保留,保留的这个就是我们最终预测的边界框,该网格的其它多余的B-1个边界框都会被删除掉。

YOLO模型架构

小白也能弄懂的目标检测YOLO系列之YOLOV1 - 第二期_第4张图片

在YOLOv1模型中,经过卷积和池化操作之后,输入的一张图片最终被分成7*7个网格,每个网格预测2个边界框和20个标记的类,而每个边界框,即S=7,B=2,C=20,即每个单元格需要预测 =30个值,那么一张输入的图片则需要预测:个张量,即7*7*30,也就是上图中的YOLO网络模型最后的输出output

那么如何对这个模型最后的输出7*7*30的output进行解析,来获取我们想要的检测信息呢,即这张图片上有多少个目标,以及每个目标所对应的目标框的大小和位置信息呢?

以下面图中模型输出的7*7个网格中的其中一个网格,也就是用红色和绿色长条形进行标注的网格,大小为1*1*30为例进行讲解,其对应于输入图片中的红色网格:

小白也能弄懂的目标检测YOLO系列之YOLOV1 - 第二期_第5张图片

我们可以看到这个这个长条形的,也就是1*1*30,前20个元素是类别概率值即C,然后2个元素是每个网格的两个边界框置信度,即,最后8个元素是两个边界框的 2*,为什么将该网格采用这种这种长条形的分离排布,因为采用切片,那么 [:,20] 就是该网格的类别概率部分,而 [:,20:22] 是该网格的置信度部分,最后剩余部分[ :,22:]  是该网格的边界框的预测结果。所以这种长条形的分离排布,让我们可以方便地提取每一个网格对应的信息值,方便我们进行最后输出值的可视化,毕竟这种长条形数据化形式的数据,对于一般人是无法理解的,我们所要做的就是对这种解析后的数据,也就是获取目标所属的类别以及它的置信度和位置大小参数信息,利用工具在原图中进行更加直观的绘制表示,也就是下图这个样子:

最后:附上YOLOv1的原论文地址:https://arxiv.org/pdf/1506.02640.pdf,下载速度过慢的同学,后天回复关键字:YOLO,即可获取。

YOLO官网:https://pjreddie.com/darknet/yolo/

参考:https://zhuanlan.zhihu.com/p/32525231

这期给大家讲解了YOLOv1网络模型的架构,以及如何实现目标分类和定位,下期会给大家讲解YOLO模型是如何进行进行网络训练的,觉得还不错的话,请点赞、收藏、在看哦,你们的支持是我继续的动力,坚决不做白嫖党!

你可能感兴趣的:(小白也能弄懂的目标检测YOLO系列之YOLOV1 - 第二期)