YOLO V3的原理学习笔记
通过笔记的方式记录自己学习YOLO V3的模型原理.
YOLO 是目标检测算法中常用的一种模型,目前最新的YOLO V3版本不论速度和精度上都有了很大进步,yolo算法在实际应用中能很好平衡精度和速度,
所以我们在实际应用中使用的还是比较多的.
0. What is Yolo?
YOLO即“You Only Look Once”, 是目标检测算法的一种,是采用一步算法实现目标检测的算法,比较两部算法的速度上较快.YOLO一直以速度快而见长. 识别精度比目前优秀的mask rcnn相比还有差距,但是如果在消费级的GPU上实现实时的目标检测,mask RCNN还是不能实现实时的效果,采用YOLO,尤其是YOLO3,在不牺牲太多精度的情景下,非常轻松实现实时的检测效果.
1. YOLO v3的结构
YOLOv3的paper中描述的是基于Darknet-53的网络,我们将Darknet-53转换成keras下的代码.
网络模型的输入为:( 416, 416, 3)就是一个416*416的彩色图片.
输出为:包含box和类型的列表,表示图片中识别到的目标. (,,,ℎ,,).
[图片上传失败...(image-145b-1570409442271)]
2. YOLO的原理
原始思路:
如果采用最原始的思路,我们会采用窗口滑动的方法,逐个检测目标,通过image classifytion识别目标.
采用滑动窗口的目标检测算法思路非常简单,它将检测问题转化为了图像分类问题。其基本原理就是采用不同大小和比例(宽高比)的窗口在整张图片上以一定的步长进行滑动,然后对这些窗口对应的区域做图像分类,这样就可以实现对整张图片的检测了。但是这个方法有致命的缺点,就是你并不知道要检测的目标大小是什么规模,所以你要设置不同大小和比例的窗口去滑动,而且还要选取合适的步长。但是这样会产生很多的子区域,
如上图,如果步长或窗口不合适,就会错过目标,如果过于精细,无疑会产生巨大的计算量和复杂的分类计算. 这个是窗口滑动的算法不足之处.
- YOLO的思路:
Yolo算法很好的解决了这个问题,它不再是窗口滑动了,而是直接将原始图片分割成互不重合的小方块,然后通过卷积最后生产这样大小的特征图,
基于上面的分析,可以认为特征图的每个元素也是对应原始图片的一个小方块,然后用每个元素来可以预测那些中心点在该小方格内的目标,
这就是Yolo算法的朴素思想。
Yolo将输入的图片分割成 m*m 网格,然后每个单元格负责去检测那些中心点落在该格子内的目标.
可视化理解
找到锚点
非极大值抑制算法(non maximum suppression, NMS),去掉重复的box.