吴恩达 深度学习 deeplearning.ai 学习笔记( 4.2) 目标检测

图片检测问题:

  • 分类问题:判断图中是否为汽车;
  • 目标定位:判断是否为汽车,并确定具体位置;
  • 目标检测:检测不同物体并定位。

吴恩达 深度学习 deeplearning.ai 学习笔记( 4.2) 目标检测

1.目标定位

输出:

  • 存在的对象(c1行人,0 or 1 ;c2 汽车,0 or 1 ; c3摩托车,0 or 1 )
  • 定位框:(bx,by,bh,bw)

2.特征点检测

判断动作姿态,识别人物表情等

输出:

  • 特征点坐标 (x,y)

3.目标检测

目标检测采用的是基于滑动窗口的检测算法。

训练模型:

吴恩达 深度学习 deeplearning.ai 学习笔记( 4.2) 目标检测
 

  • 训练集X:将有汽车的图片进行适当的剪切,剪切成整张几乎都被汽车占据的小图或者没有汽车的小图;
  • 训练集Y:对X中的图片进行标注,有汽车的标注1,没有汽车的标注0。

预测(卷积的滑动窗口实现):

吴恩达 深度学习 deeplearning.ai 学习笔记( 4.2) 目标检测

  • 首先选定一个特定大小的窗口,将窗口内的图片输入到模型中进行预测;
  • 以固定步幅滑动该窗口,遍历图像的每个区域,对窗内的各个小图不断输入模型进行预测;
  • 继续选取一个更大的窗口,再次遍历图像的每个区域,对区域内是否有车进行预测;
  • 遍历整个图像,可以保证在每个位置都能检测到是否有车。

缺点:计算成本巨大,每个窗口的小图都要进行卷积运算且窗口有重叠计算重复(但在神经网络兴起之前,使用的是线性分类器,所以滑动窗口算法的计算成本较低)。

4.Bounding Box 预测

不能输出最准确的边界框

细节:

利用YOLO算法实现目标探测的时候,对于存在目标对象的网格中,定义训练标签Y的时候,边界框的指定参数的不同对其预测精度有很大的影响。这里给出一个较为合理的约定:(其他定值方式可阅读论文)

吴恩达 深度学习 deeplearning.ai 学习笔记( 4.2) 目标检测

  • 对于每个网格,以左上角为(0,0),以右下角为(1,1);
  • 中点表示坐标值,在0~1之间;
  • 宽高表示比例值,存在>1的情况。

 

5. 交并比(Intersection-over-Union)

目的:用来判断对象检测算法是否运作良好

吴恩达 深度学习 deeplearning.ai 学习笔记( 4.2) 目标检测 吴恩达 深度学习 deeplearning.ai 学习笔记( 4.2) 目标检测

计算红色边框(目标)和紫色边框(预测)之间的交集和并集之比

IOU ≥ 0.5 说明检测正确

 

6. 非最大值抑制(non-max suppression,NMS)

目的:确保我们的算法对每个对象只检测一次。

吴恩达 深度学习 deeplearning.ai 学习笔记( 4.2) 目标检测吴恩达 深度学习 deeplearning.ai 学习笔记( 4.2) 目标检测

首先,删除检测有车概率pc≤0.6的边框;

然后,在剩余的边框中循环:

  • 挑出pc最大的作为预测 (高亮显示)
  • 删除和预测的交并比IoU≥0.5的边框

eg:右车,挑出0.9,删除0.6、0.7;左车,挑出0.8,删除0.7。

 

7. Anchor box

目的:处理两个对象出现在一个格子内

更有针对性,适合检测一些很宽很胖的对象。

吴恩达 深度学习 deeplearning.ai 学习笔记( 4.2) 目标检测     

      训练图片的每个对象,根据对象的中点,分配到对应的格子中,同时还分配到一个和对象形状的IoU最高的Anchor box 中。输出大小(例如两个Anchor box,如图,输出3*3*16(pc,网格坐标,c1,c2,c3)):。

Anchor box 的选择:

  • 一般人工指定Anchor box 的形状,选择5~10个以覆盖到多种不同的形状,可以涵盖我们想要检测的对象的形状;
  • 高级方法:K-means 算法:将不同对象形状进行聚类,用聚类后的结果来选择一组最具代表性的Anchor box,以此来代表我们想要检测对象的形状。

 

 

8.YOLO

目的:使得滑动窗口算法寻找到更加精准的边界框。

特点:将整张图片先划分成 n * n 的 格子,综合上述算法的优点

吴恩达 深度学习 deeplearning.ai 学习笔记( 4.2) 目标检测

假设我们要在图片中检测三种目标:行人、汽车和摩托车,同时使用两种不同的Anchor box。

训练:

  • 输入X:同样大小的完整图片;
  • 目标Y:使用网格划分,输出大小,或者对不同格子中的小图,定义目标输出向量Y。

预测:

  • 输入与训练集中相同大小的图片,同时得到每个格子中不同的输出结果。

运行非最大值抑制(NMS):

  • 假设使用了2个Anchor box,那么对于每一个网格,我们都会得到预测输出的2个bounding boxes,其中一个比较高; 

                                                                  吴恩达 深度学习 deeplearning.ai 学习笔记( 4.2) 目标检测

  • 抛弃概率值pc低的预测bounding boxes; 

                                                                 吴恩达 深度学习 deeplearning.ai 学习笔记( 4.2) 目标检测

  • 对每个对象(如行人、汽车、摩托车)分别使用NMS算法得到最终的预测边界框。

                                                                 吴恩达 深度学习 deeplearning.ai 学习笔记( 4.2) 目标检测

 

 

YOLO notation:

  • 将对象分配到一个格子的过程是:观察对象的中点,将该对象分配到其中点所在的格子中,(即使对象横跨多个格子,也只分配到中点所在的格子中,其他格子记为无该对象,即标记为“0”);
  • YOLO显式地输出边界框,使得其可以具有任意宽高比,并且能输出更精确的坐标,不受滑动窗口算法滑动步幅大小的限制;
  • YOLO是一次卷积实现,并不是在网格上进行次运算,而是单次卷积实现,算法实现效率高,运行速度快,可以实现实时识别。

9.候选区域(region proposals)

区域卷积神经网络 R-CNN(Regions with convolutional networks),目的是:在我们的图片中选出一些目标的候选区域,从而避免了传统滑动窗口在大量无对象区域的无用运算。

所以在使用了R-CNN后,我们不会再针对每个滑动窗口运算检测算法,而是只选择一些候选区域的窗口,在少数的窗口上运行卷积网络。

具体实现:运用图像分割算法,将图片分割成许多不同颜色的色块(候选区域),然后在这些色块上放置窗口,将窗口中的内容输入网络,从而减小需要处理的窗口数量。

吴恩达 深度学习 deeplearning.ai 学习笔记( 4.2) 目标检测

更快的算法:

  • R-CNN:给出候选区域,对每个候选区域进行分类识别,输出对象 标签 和 bounding box,从而在确实存在对象的区域得到更精确的边界框,但速度慢;
  • Fast R-CNN:给出候选区域,使用滑动窗口的卷积实现去分类所有的候选区域,但得到候选区的聚类步骤仍然非常慢;
  • Faster R-CNN:使用卷积网络给出候选区域。

转载链接