「深度学习」(目标检测算法
0x00 目标检测算法的发展
从 Two-Stage 到 One-Stage
0x01 YOLO v1: You Only Look Once!
YOLO(You Only Look Once)是一种基于深度神经网络的物体识别和定位算法,其最大的特点是运行速度很快,可以用于实时系统。该算法创造性的将候选区和物体识别这两个阶段合二为一,即看一眼图片(不用看两眼哦)就能知道有哪些对象以及它们的位置。
实际上,YOLO并没有真正去掉候选区,而是采用了预定义的候选区(准确点说应该是预测区,因为并不是Faster RCNN所采用的Anchor)。也就是将图片划分为 7 * 7 = 49 个网格(grid),每个网格允许预测出2个边框(bounding box,包含某个对象的矩形框),总共 49 * 2 = 98 个bounding box。可以理解为98个候选区,它们很粗略的覆盖了图片的整个区域。
RCNN虽然会找到一些候选区,但毕竟只是候选,等真正识别出其中的对象以后,还要对候选区进行微调,使之更接近真实的bounding box。这个过程就是边框回归:将候选区bounding box调整到更接近真实的bounding box。
既然反正最后都是要调整的,干嘛还要先费劲去寻找候选区呢,大致有个区域范围就行了,所以YOLO就这么干了。
不过话说回来,边框回归为啥能起作用,我觉得本质上是因为 分类信息 中已经包含了 位置信息。就像你看到主子的脸和身体,就能推测出耳朵和屁股的位置。
算法步骤
对每张图像打格(cell):S x S [448 x 448 -> 7 x 7]
图像中,物体中心落在哪个格子,哪个格子就负责预测那一个物体。
每个格子预测 B 个 bounding box,同时,给出该预测框的置信度(confidence)
- Bounding Box: x, y, w, h (center)
- Confidence: $P_r(object) \ \cdot \ IoU^{truth}_{pred}$
- Final Output Tensor: $S \times S \times (5*B+C)$
损失函数
0x02 YOLO v2 算法
0x03 YOLO v3 算法
参考文章
DAY1: YOLO 算法
1 检测算法的发展
- NAS:让计算机自己去学习用哪些网络。
2 One-Stage 检测算法的设计思想
没有了 region proposal 的阶段
3 Yolo v1: 一次伟大的尝试
- 核心:只有物体的中心落到了这个格子,那么这个格子只用来预测那一个物体。
- IoU:交并比
- 损失函数
- softmax,求导,嵌入了cross entropy 的softmax的求导
优点
- One stage 确实快
缺点
- 对拥挤物体检测不好
- 对小物体检测不好
- 对 new width-height ratio 物体不好:
- 没有 BN
DAY2: YOLO v2 算法
1 v2 算法的改进
2 Anchor与损失函数
3 核心代码详解
DAY3: YOLO v3 算法
1 v3 算法的改进
2 框架代码详解
3 如仍有时间的小惊喜
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.