文章目录
-
- 1. 目标定位
- 2. 特征点检测
- 3. 目标检测
- 4. 滑动窗口的卷积实现
- 5. Bounding Box预测(YOLO)
- 6. 交并比
- 7. 非极大值抑制
- 8. Anchor Boxes
- 9. YOLO 算法
- 10. 候选区域
- 作业
参考:
吴恩达视频课
深度学习笔记
1. 目标定位
定位分类问题:
不仅要判断图片中是不是一辆汽车,还要标记出它的位置,用框圈起来
2. 特征点检测
Landmark 检测
3. 目标检测
基于滑动窗口的目标检测
- 将目标剪切出来,训练卷积网络
- 以一定大小的窗口扫描图片,将窗口内的图片输入卷积网络预测
- 更改窗口大小,重复上面步骤
滑动窗口目标检测算法缺点:
- 计算成本,剪切出太多块,卷积网络要一个个地处理
- 用的步幅很大,窗口个数少,可能会影响性能
- 用小粒度或小步幅,窗口会特别多,这意味着超高的计算成本
4. 滑动窗口的卷积实现
对整张图片进行卷积操作,一次得到所有预测值,如果足够幸运,神经网络便可以识别出目标的位置
在卷积层上应用滑动窗口算法,提高了整个算法的效率
不过这种算法仍然存在一个缺点,就是边界框的位置可能不够准确
5. Bounding Box预测(YOLO)
滑动窗口法中,离散的边界框可能没有一个能完美匹配汽车位置
一个能得到更精准边界框的算法是YOLO算法,YOLO(You only look once)意思是你只看一次,这是由Joseph Redmon,Santosh Divvala,Ross Girshick和Ali Farhadi提出的算法
YOLO算法有一个好处,它是一个卷积实现,运行速度非常快,可以达到实时识别
边界框定义还有其他更有效的方法,可能效果要更好一点
6. 交并比
7. 非极大值抑制
算法可能对同一个对象做出多次检测。非极大值抑制确保算法对每个对象只检测一次。
非极大值抑制,非最大值意味着你只输出概率最大的分类结果,抑制很接近,但不是最大的其他预测结果
如果你尝试同时检测三个对象,比如说行人、汽车、摩托,那么输出向量就会有三个额外的分量。
事实证明,正确的做法是独立进行三次非极大值抑制,对每个输出类别都做一次
8. Anchor Boxes
你想让一个格子检测出多个对象,就是使用 anchor box 这个概念
算法处理不好的情况:
- 如果你有两个anchor box,但同一格子有三个对象
- 两个对象都分配到一个格子中,且它们的anchor box形状也一样 出现的概率比较小,对性能的影响应该不会很大
怎么选择 anchor box呢?
- 一般手工指定anchor box形状,选择5到10个anchor box形状,覆盖多种不同的形状
- k - 平均算法,可以将两类对象形状聚类,选择最具有代表性的一组 anchor box,这是自动选择anchor box的高级方法
9. YOLO 算法
- 训练:
- 预测:
- 非极大值抑制: 如果使用两个anchor box,那么9个格子中任何一个都会有两个预测的边界框,其中一个的概率很低。 接下来你抛弃概率很低的预测。
如果你希望检测(3种目标)行人,汽车和摩托车,那么你要做的是,对于每个类别单独运行
非极大值抑制,运行三次来得到最终的预测结果。
10. 候选区域
候选区域是一个有趣的想法,但这个方法需要两步:
- 首先得到候选区域
- 然后再分类
相比之下,类似于YOLO(You only look once)这个算法,能够一步做完,老师觉得长远而言更有希望
YOLO 网址:https://pjreddie.com/darknet/yolo/
作业
作业:自动驾驶 - 汽车检测