这几天断断续续看了PulkitSharma的三篇文章,第三篇是解读YOLO视觉网络的,研读的过程做了个简单的阅读笔记,对YOLO框架有了个大体的了解,这篇笔记整理的逻辑并不够好,很多细节也没有具体记录,因为原文写的蛮好了,我只是记录一下重点.如果感兴趣欢迎阅读. 欢迎点赞
为什么YOLO起作用
- YOLO (You Only Look Once) 用的是R-CNN网络,网络不会查看整个图像,而只会查看图像中包含对象可能性更高的部分。
- 自称每秒处理45帧,并了解广义检查对象。
- 提到一门课程Convolutional Neural Networks | Coursera
YOLO框架是什么
- 了解一下YOLO怎么运作的,分为3步
- 首先输入图像
- 然后将图像划分为网格
- 图像分类定位应用于每个网格,
- 然后预测对象边界框并分类
- 假设图像划分为3x3大小,共分为3类情况下,每个标签是8维向量
怎么编码盒子
- x,y 的四个坐标是用于分割图边框比例来确定的
联合与非最大抑制的交集
- 通过画监测区域与标注区域的交叉面积(交叉点面积/并集面积–IoU),若此数据大于0.5,则可以说预测足够好。0.5是我们在此处采用的任意阈值,但可以根据您的特定问题进行更改。直观地,您增加阈值越多,预测就越好。
- 最大非抑制:如图,多次被识别的汽车通过此技术可以清除,通过IoU对比,IoU比率大,但对对象检测概率最大的被保留
- 总结一下:
丢弃所有概率小于或等于预定阈值(例如0.5)的框
对于其余的框:
1.选择概率最高的框,并将其作为输出预测
2.将IoU大于阈值的其他框与上述步骤中的输出框一起丢弃
3.重复步骤2,直到所有框都被用作输出预测或被丢弃
锚盒子
每个网格中有多个对象怎么办?
- 对于每个网格,我们可以根据锚点的数量检测两个或多个对象。,两个对象则是3x3x16的输出
把上述联合思考
考虑以下场景:我们使用3 X 3网格,每个网格有两个锚点,并且存在3个不同的对象类。因此,对应的y标签将具有3 X 3 X 16的形状。现在,假设我们在每个网格中使用5个锚定框,并且类别数已增加到5。因此目标将是3 X 3 X 5 X 5 = 3 X 3 X25。这就是训练过程的完成方式-拍摄特殊形状的图像,然后将其映射到3 X 3 X 16的目标(这可能会根据网格大小,锚点盒数和类数)。
拍摄形状为(608、608、3)的输入图像将此图像传递到卷积神经网络(CNN),然后返回(19、19、5、85)维输出上述输出的最后两个维度被平坦化以获得的输出音量(19,19,425):一。在这里,一个19 X 19网格的每个像元返回425个数字425 = 5 * 85,其中5是每个网格的锚点盒数
c。85 = 5 + 80,其中5是(pc,bx,by,bh,bw),而80是我们要检测的类数
最后,我们进行IoU和非最大抑制,以避免选择重叠的框
在Python中实现YOLO
GitHub - enggen/Deep-Learning-Coursera: Deep Learning Specialization by Andrew Ng, deeplearning.ai.
- 可以用IDE搞起来,也可以用JupyterNotebook屡一遍代码.
- 原文链接