目录
1.目标定位(object localization)
(1)分类定位
(2)分类定位的符号定义
(3)分类定位标签 y 定义
2.特征点检测
(1)是什么
(2)例子
3.滑动窗口目标检测
(1)理解
(2)例子
(3)缺点
4.滑动窗口的卷积实现
(1)全连接层转换为卷积层
(2)理解
(3)优缺点
5.精准边界预测-YOLO算法
(1)YOLO算法(You Only Look Once)
(2)例子
1.目标定位(object localization)
(1)分类定位
- 图片分类(image classification)就是算法遍历图片,判断其中的对象是哪类。
- 分类定位(classification with localization):判断物体是哪类并标出位置。以上图为例,我们不仅要用算法判断图片中是不是一辆汽车,还要在图片中标记出它的位置,用边框或红色方框把汽车圈起来。
(2)分类定位的符号定义
- 对于分类定位问题,可以让神经网络多输出几个单元,来表示一个边界框。具体就是让神经网络再多输出4个数字,标记为b_x,b_y,b_h,b_w。
- 约定图片左上角的坐标为(0,0),右下角标记为(1,1)。要确定边界框的具体位置,需要指定红色方框的中心点(midpoint),这个点表示为(b_x,b_y),边界框的高度为b_h,宽度为b_w。
- 在我们这个汽车例子中,b_x大约是0.5;b_y大约是0.7;b_h约为0.3;b_w约为0.4
(3)分类定位标签 y 定义
- 第一个p_c表示是否含有对象,在这里如果对象属于前三类(行人(pedestrian)、汽车(car)、摩托车(motorcycle)),则p_c=1,如果是背景(background),则p_c=0。
- 如果检测到对象,输出被检测对象的边界框参数b_x, b_y, b_h和b_w,同时输出c_1、c_2和c_3,表示该对象属于1-3类中的哪一类。(在这里假设图片中最多只会出现其中一个对象)
2.特征点检测
(1)是什么
- 特征点检测就是取图片上一些有意义的点,在输出时输出这些点的坐标,从而实现对目标特征的检测。
(2)例子
上图的第三张图,人体姿态检测,可以定义一些关键特征点,如胸部的中点,左肩,左肘,腰等,从胸部中心点(l_1x,l_1y)一直向下,一直到(l_32x,l_32y)。然后通过神经网络标注人物姿态的关键特征点,再输出这些标注过的特征点,就相当于输出了人物的姿态动作。
注意:要明确一点,特征点的特性(identity)在所有图片中必须保持一致,比如:特征点1始终是胸部中点,特征点2始终是左肩等
3.滑动窗口目标检测
(1)理解
- 以固定步幅滑动一个窗口遍历整张图片,对每个划出的窗口区域进行0或1分类,这就是滑动窗口目标检测。
(2)例子
构建一个汽车检测算法,用裁剪后的汽车图片做样本,构建训练集,训练一个普通的汽车分类器(卷积神经网络),然后使用滑动窗口目标检测。
上图是一张测试图片,操作步骤如下:选定一个特定大小的窗口,将这个红色小方块的图像输入卷积神经网络,卷积网络开始进行预测,即判断红色方框内有没有汽车。然后窗口滑动到第二个红色方块内的图像,并输入给卷积网络,再次运行卷积网络。然后依次重复操作,直到这个窗口滑过图像的每一个角落。
如果检测不到目标,可能会换更大的窗口进行遍历
(3)缺点
- 步幅与窗口大小影响性能与成本:如果你选用的步幅很大,显然会减少输入卷积网络的窗口个数,但是粗糙间隔尺寸可能会影响性能。反之,如果采用小粒度或小步幅,传递给卷积网络的小窗口会特别多,这意味着超高的计算成本。
4.滑动窗口的卷积实现
(1)全连接层转换为卷积层
- 滑动窗口的卷积实现,要把卷积神经网络的全连接层转化成卷积层
- 如上图第二行,它的卷积层和之前一样,而对于全连接层,我们400个用5×5的过滤器来实现,输入图像大小为5×5×16,用5×5的过滤器对它进行卷积操作,输出结果为1×1×400,我们不再把它看作一个含有400个节点的集合,而是一个1×1×400的输出层。
- 从数学角度看,它和全连接层是一样的,因为这400个节点中每个节点都对应一个不同5×5×16维度的过滤器,所以可以看做每个值都是上一层经过某个任意线性函数的输出结果。
(2)理解
- 使用转化后的卷积网络来检测图像,我们不用像之前一样把图像剪成一个个小图像以此输入卷积网络进行检测,而是直接输入整个图像。
- 上图,第一行为训练卷积网络,第二行为测试,我们训练使用14×14的图像,所以测试时窗口大小就是14×14,最大池化的参数为2,测试时对于滑动步幅就是2
- 对于测试的理解:不用管中间步骤和通道数,只看输入和输出,可以看做在16×16测试图像上使用14×14的滑动窗口,步幅为2,最终的输出可看做4个位置的检测结果
- 而对28×28的图像进行测试,也是使用14×14的滑动窗口,先在左上角应用,其结果对应输出层的左上角部分。接着以大小为2的步幅不断地向右移动窗口,直到第8个单元格,得到输出层的第一行。然后向图片下方移动,最终输出这个8×8×4的结果。
(3)优缺点
- 在卷积层上应用滑动窗口算法,它提高了整个算法的效率。不过这种算法仍然存在一个缺点(weakness),就是边界框的位置可能不够准确
5.精准边界预测-YOLO算法
(1)YOLO算法(You Only Look Once)
- 把图像分为n×n的网格,训练一个卷积网络,输出为n×n×8,对应每个网格的检测结果。(8对应第一节y的8个维度)
(2)例子
- 如上图,输入图像是100×100的,在图像上放一个3×3网格,则输出为3×3×8,对应9个格子的检测结果。如果是19×19的网格,输出就是19×19×8。
- 这是一个卷积实现,你并没有在3×3网格上跑9次算法。你使用了一个卷积网络,有很多共享计算步骤,在处理这3×3计算中很多计算步骤是共享的,所以这个算法效率很高,可以达到实时(real-time)识别。