系列文章:
死磕YOLO系列,YOLOv2的自我修养
YOLO 是我非常喜欢的目标检测算法,堪称工业级的目标检测,能够达到实时的要求,它帮我解决了许多实际问题。
这就是 YOLO 的目标检测效果。它定位了图像中物体的位置,当然,也能预测物体的类别。
之前我有写博文介绍过它,但是每次重新读它的论文,我都有新的收获,为此我准备写一个系列的文章来详尽分析它。这是第一篇,从它的起始 YOLOv1 讲起。
YOLOv1 的论文地址:https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Redmon_You_Only_Look_CVPR_2016_paper.pdf
建议没有看过原论文的都应该好好看看。
YOLO 预测时,很简单。
1.缩放输入的图片
2.将图片送入到卷积神经网络中进行预测
3.通过预测的结果进行置信度的阈值处理,得到最终的结果。
本文围绕:
- YOLO 为什么能检测目标?
- YOLO 长什么样子?
- YOLO 如何训练?
三大问题来详细展开,为此我类比为 YOLO 的大脑、躯干和手脚。
1. 大脑,为什么能检测目标?
YOLO 是 One-Stage (单阶段) 检测算法,它只需要看图片一次,就可以预测图片中所有的物体边框。
我个人有一个形象的比喻,那就是撒渔网。
一个渔网撒下去,所有的鱼儿都要捕获。
而实际上,YOLO 真的有类似渔网的操作。
YOLO 把一张图片划分成了 SxS 个格子。
这里的 S 不固定,可以根据实际情况由开发者自主决定。
论文中,S 取值为 7,所以整张图片被分割成 7*7=49 个格子(Cell)。
这些格子像不像渔网的网眼呢?
那么,这些 Cell 是干什么用的呢?为什么要设置这么多的 Cell ?
这些 Cell 每个 Cell 都会预测 B 个 bbox。在论文中 B 取值为 2。
所以,一张图片经 YOLO 跑一遍,就会产生 98 个 bbox。
有同学可能会思考:
这么多 bbox,比目标的个数还要多,怎么选择呢?
以上面的图片为例:
图片中有狗、自行车、汽车 3 个目标,但是预测到的 bbox 有 98 个之多,最终肯定只能从 98 个 bbox 中选择 3 个。
那么,怎么操作呢?
分 2 步走。
第一步,有选择的响应 cell。
总共有 49 个 cell,但是并不是每一个 cell 的预测都有意义,我们需要找出有意义的 cell。
那么哪些 cell 算是有意义呢?
先来看看一个叫做 Confidence 可信度的概念。
每个 Cell 预测 B 个 bbox,还有每个 bbox 对应的 Confidence。
Confidence 公式定义如下:
C o n f i d e n c e = P r ( O b j ) ∗ I O U p r e d t r u t h Confidence = Pr(Obj)*IOU_{pred}^{truth} Con