您的位置:首页 > 其它

小嘿嘿之目标检测YOLO算法

2020-07-20 14:22 260 查看

YOLO算法

名称由来

其全称是You Only Look Once: Unified, Real-Time Object Detection,基本上把Yolo算法的特点概括全了:You Only Look Once说的是只需要一次CNN运算,Unified指的是这是一个统一的框架,提供end-to-end的预测,而Real-Time体现是Yolo算法速度快。

目标检测算法的发展与对比

比较流行的目标检测算法可以分为两类:

  • 一类是基于Region Proposal的R-CNN系算法(R-CNN,Fast R-CNN, Faster R-CNN),它们是two-stage的,需要先使用启发式方法(selective search)或者CNN网络(RPN)产生Region Proposal,然后再在Region Proposal上做分类与回归。
  • 另一类是Yolo,SSD这类one-stage算法,其仅仅使用一个CNN网络直接预测不同目标的类别与位置。第一类方法是准确度高一些,但是速度慢,但是第二类算法是速度快,但是准确性要低一些。

算法理念

1- 首先将输入图片resize到448x448,然后送入CNN网络,最后处理网络预测结果得到检测的目标。相比R-CNN算法,其是一个统一的框架,其速度更快,而且Yolo的训练过程也是end-to-end的。

2- Yolo的CNN网络将输入的图片分割成S×S网格,然后每个单元格负责去检测那些中心点落在该格子内的目标,可以看到狗这个目标的中心落在左下角一个单元格内,那么该单元格负责预测这个狗。每个单元格会预测B个边界框(bounding box)以及边界框的置信度(confidence score)。所谓置信度其实包含两个方面:
$\begin{cases}
一是这个边界框含有目标的可能性大小,记为Pr(object),当该边界框是背景时(即不包含目标),此时Pr(object)=0;而当该边界框包含目标时,Pr(object)=1。\
二是这个边界框的准确度。可以用预测框与实际框的IOU(intersection over union,交并比)来表征,记为IOU^{truth}_{pred} \end{cases}。

边界框的大小与位置可以用4个值来表征:(x,y,w,h),其中(x,y)是边界框的中心坐标,而w和h是边界框的宽与高。还有一点要注意,中心坐标的预测值(x,y)是相对于每个单元格左上角坐标点的偏移值,并且单位是相对于单元格大小的,而边界框的w和h预测值是相对于整个图片的宽与高的比例,这样理论上4个元素的大小应该在[0,1]范围。这样,每个边界框的预测值实际上包含5个元素:(x,y,w,h,c),其中前4个表征边界框的大小与位置,而最后一个值是置信度。

3-
对于每一个单元格其还要给出预测出C个类别概率值,其表征的是由该单元格负责预测的边界框其目标属于各个类别的概率。但是这些概率值其实是在各个边界框置信度下的条件概率,即Pr(classi∣object)Pr(class_i|object)Pr(classi​∣object)。


例:
,每个单元格需要预测(B∗5+C)个值。如果将输入图片划分为S×S网格,那么最终预测值为S×S×(B∗5+C)大小的张量。整个模型的预测值结构如下图所示。对于PASCAL VOC数据,其共有20个类别C=20,如果使用S=7,B=2,那么最终的预测结果就是7×7×30大小的张量。在下面的网络结构中我们会详细讲述每个单元格的预测值的分布位置。

类别概率计算图示

Pr(classi∣object)∗IOUpredtruth=Pr(classi∗IOUpredtruth)Pr(class_i|object)*IOU^{truth}_{pred}=Pr(class_i*IOU^{truth}_{pred})Pr(classi​∣object)∗IOUpredtruth​=Pr(classi​∗IOUpredtruth​)

对于每一个bounding box来说,用它的confidence来乘上当前grid cell里每个类别的概率。对于文中来说,每一个gird取2个bounding box,那么就会有20*(772)=20*98的一个矩阵,矩阵的行数代表类别数,列数带别bounding box的数量,如下图:


在每一行中,将得分少于阈值(0.2)的置零。然后再按照得分从高到低排序然后使用NMS算法去掉重复率交大的bounding box(NMS: 针对某一个类别,选择得分最大的bounding box,然后计算它与其他bounding box的IOU值,如果IOU大于0.5,则说明重复率交大,将该得分设置为0,否则不做处理,重复完之后,然后从未处理的bounding box中选取一个得分最高的,重复上述步骤)。下面这个图很好的说明了YOLO中NMS是如何做的:

网络结构


简化为:

损失函数


YOLO9000算法

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: