<h1><strong>参考资料:</strong> </h1>
<pre class="blockcode"><code>
YOLO主页 https://pjreddie.com/darknet/yolo/
YOLOv1
论文下载:http://arxiv.org/abs/1506.02640
代码下载:https://github.com/pjreddie/darknet
YOLOv2&YOLO9000
工程代码地址:http://pjreddie.com/darknet/yolo/
代码和预训练模型地址:http://pjreddie.com/yolo9000/
YOLOv3
代码下载:https://github.com/pjreddie/darknet/tree/yolov3
keras:https://github.com/qqwweee/keras-yolo3
tensorflow:https://github.com/wizyoung/YOLOv3_TensorFlow
YOLOv4
论文地址:https://arxiv.org/pdf/2004.10934.pdf
GitHub地址:https://github.com/AlexeyAB/darknet
参考文章:
https://blog.csdn.net/qq_30815237/article/details/91949543
https://blog.csdn.net/guleileo/article/details/80581858</code></pre>
<h1><strong>一、概述</strong></h1>
<p> YOLO(You Only Look Once)是一个基于深度学习技术的深度神经网络模型,对图像中目标位置定位与类别的检测,其核心思想是,利用一整张图像作为深度神经网络的输入,网络直接输出回归框(bounding box)的位置及其所属的类别。</p>
<p style="text-align:center;"><img alt="" height="304" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-e630918fbb4de474af8cfeda7c26b708" width="506"></p>
<p>优点:模型运行速度快;</p>
<p> end-2-end,直接预测位置与类别,不容易在背景上预测出错误的物体信息</p>
<p>对比RCNN、Fast-RCNN、Faster-RCNN:</p>
<p> RCNN开创性的提出了候选区(Region Proposals)的方法,先从图片中搜索出一些可能存在对象的候选区Selective Search,大概2000个左右,然后对每个候选区进行对象识别。大幅提升了对象识别和定位的效率。不过RCNN的速度依然很慢,其处理一张图片大概需要49秒。因此又有了后续的Fast RCNN 和 Faster RCNN,针对RCNN的神经网络结构和候选区的算法不断改进,Faster RCNN已经可以达到一张图片约0.2秒的处理速度。</p>
<p>二、YOLOv1</p>
<ol><li>将一张图片分成SxS个网格(grid cell),如果某个物体的中心落在了某一个网格中,则这个网格就负责预测这个物体;</li><li>每个网格要预测B个bounding box,每个bounding box包括位置信息(x,y,w,h),分别是bounding box的中心点坐标 (x,y),x, y 用对应网格的 offset 归一化到 0-1 之间,bounding box的长宽(w,h),w, h 用图像的 width 和 height 归一化到 0-1 之间,每个bounding box还包括一个confidence值,所以每个bounding box一共5个值;</li><li>confidence值代表预测的box中含有被检测目标的置信度,<img alt="confidence=Pr(Object)\ast {IOU}^{truth}_{pred}" class="mathcode" src="https://private.codecogs.com/gif.latex?confidence%3DPr%28Object%29%5Cast%20%7BIOU%7D%5E%7Btruth%7D_%7Bpred%7D">,若有被检测目标落在grid cell中,则Pr(Object)=1,否则Pr(Object)=0; 第二项代表预测的bounding box与实际的groudtruth之间的IOU值;<span style="color:#f33b45;">(IOU是怎么算出来的?)</span></li><li>每个grid cell还会预测C个类的类别信息,所以SxS个网格,每个网格预测2个bounding box和C个类别,每个bounding box预测5个值,所以最终输出为SxSx(Bx5+C),例如PASCAL VOC中,输入图片为448x448,S=7,B=2,C=20类,所以最终输出是7x7x30的一个Tensor,30维的信息如下图所示; <p style="text-align:center;"><img alt="" height="264" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-0c0d0d6a1b447161e8d7e932a1183d4d.png" width="431"></p> </li><li>网络结构如下,就是单纯的卷积、池化最后加了两层全连接,因为需要预测bounding box的位置(数值型),而不仅仅是对象的概率,所以最后输出层用线性函数做激活函数。网络输入是448x448x3的图片,所以图片会被resize; <p style="text-align:center;"><img alt="" height="240" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-0ccc374fbf38f50d8f7dd30f614843d2" width="592"></p> </li><li>一些细节点的解释:</li></ol>
<ul><li>虽然有时说"预测"的bounding box,但这个IOU是在训练阶段计算的。等到了<strong>测试阶段(Inference),这时并不知道真实对象在哪里,只能完全依赖于网络的输出,这时已经不需要(也无法)计算IOU了;</strong></li><li>我们需要<strong>事先</strong>根据样本给出一个正确的bounding box作为回归的目标。<strong>YOLO的2个bounding box事先并不知道会在什么位置,只有经过前向计算,网络会输出2个bounding box</strong>,这两个bounding box与样本中对象实际的bounding box计算IOU。这时才能确定,<strong>IOU值大的那个bounding box,作为负责预测该对象的bounding box;</strong></li><li>训练开始阶 |
|