目标检测入门_上(吴恩达老师深度学习课程学习笔记)

前言:我已经一年半没有看过吴恩达老师的视频了,最近不容易开完了题,终于可以从科研中抽出点时间学习下自己感兴趣的东西了,嘿嘿~

资料来源:https://www.coursera.org/lecture/convolutional-neural-networks/object-localization-nEeJM

目标检测入门_上(吴恩达老师深度学习课程学习笔记)

目标定位(object localization)

定位:不仅要用算法判断图片是不是汽车,还需要在图片中标记它的位置。

检测:图片中有多个对象,要确定多个对象的位置。

目标检测入门_上(吴恩达老师深度学习课程学习笔记)         目标检测入门_上(吴恩达老师深度学习课程学习笔记)

 

假设图片需要定位3个不同类别, 注定位问题中一张图片只会出现1个类别,则神经网络的输出y意义为:

Pc表示图片中是否有检测的目标,bx,by,bw,bh(边界框的位置),C1, C2, C3表示属于哪一类(如1,0,0)

这个时候如果损失函数采用平方误差策略 ,loss用L表示,因为这里的y有8个元素

目标检测入门_上(吴恩达老师深度学习课程学习笔记) ,其中,如果y1=1,则损失值是每个元素相应差值的平方和,如果y1=0,则不用考虑其他元素,只需要关注pc的准确度

上文只是举例说明,常用方法是只对边界框位置应用平方差方法,对Pc应用逻辑回归函数

特征点检测(landmark detection)

目标检测入门_上(吴恩达老师深度学习课程学习笔记)    目标检测入门_上(吴恩达老师深度学习课程学习笔记)姿态检测其实也是特征点定位问题

假设我想要提取脸部的64个特征点,有些点甚至可以帮助定位眼角位置和下颚轮廓。我们需要选定特征点个数,并生成包含这些特征点的标签训练集(注意特征点1的特征在所有图片中都保持一致),然后利用神经网络输出特征点的位置。

具体做法是,准备一个卷积网络和一些特征集,将人脸图片输入卷积网络,输出1或0,1表示有人脸,0表示没有人脸,然后输出(目标检测入门_上(吴恩达老师深度学习课程学习笔记)目标检测入门_上(吴恩达老师深度学习课程学习笔记) )……直到(目标检测入门_上(吴恩达老师深度学习课程学习笔记)目标检测入门_上(吴恩达老师深度学习课程学习笔记) )。这里我用目标检测入门_上(吴恩达老师深度学习课程学习笔记) 代表一个特征,所以有129个输出单元。

(可以理解为先判断有没有,再输出感兴趣点的位置

目标检测(object detection)

这里介绍如何用基于滑动窗口的卷积神经网络实现目标检测。

目标检测入门_上(吴恩达老师深度学习课程学习笔记)  目标检测入门_上(吴恩达老师深度学习课程学习笔记)

首先用适当剪切的汽车图片样本集(汽车几乎占据整个图片)训练一个卷积神经网络模型,然后再测试图片中,选定一个特定大小的窗口,将这些窗口内的图像分别送入卷积神经网络中进行判断。

滑动窗口目标检测算法的思路:以固定步幅移动窗口,遍历图像的每个区域,把这些剪切后的小图像输入卷积神经网络中,进行分类。

但是这样的计算成本太高,为了提高效率,有人研究出了以下内容:

滑动窗口的卷积实现(Convolutional implementation of sliding windows)

为了构建滑动窗口的卷积应用,首先需要把神经网络的全连接层转化为卷积层,如下图。

目标检测入门_上(吴恩达老师深度学习课程学习笔记)

这个图讲的特别清楚,第一个FC层通过一个5×5卷积核代替,所以输出为1×1,假设这层有400个卷积核,则输出是1×1×400。这样就实现了通过卷积层代替全连接层。

(最后通过1个1×1的卷积核转化为4个值(4个类别))

目标检测入门_上(吴恩达老师深度学习课程学习笔记)

如果是传统的卷积神经网络(如ALexNet,卷积层+全连接层),则在16×16×3的图像中要计算四次大小为14×14×3滑动窗口(步长为2),分别得到四个子集的共4个标签。
如果把卷积神经网络中的全连接层通过卷积层代替,则只需要计算一次,最后得到一个2×2×4的矩阵,2×2则分别代表四个子集的标签

但是这样的问题是:边界的框架可能不够准确。

Bounding Box预测

如果完美的边界框不是正方形,而是长方形呢?通过bounding box方法可以得到更精确的预测框。

著名的YOLO算法是目前最常用的检测算法(运算快,可以达到实时检测,并且精确),YOLO的意思是you only look once,目前已经有YOLO v4,v5了。

简化示意(以图片分为3×3为例),对每个格子分别运用之前的图像定位算法。(到目前为止,介绍的定位算法是要输出边框坐标值,检测算法是只用分别在预设的框内做图片分类)

目标检测入门_上(吴恩达老师深度学习课程学习笔记) 目标检测入门_上(吴恩达老师深度学习课程学习笔记) (这个绿色坐标是绿格子内的红格子坐标,黄色同理)

看中心点位于哪个格子,则算这个格子有没有目标)

所以目标图像的输出是3×3×8,3×3就代表划分的格子,如果一开始是19×19个格子,则最后输出是19×19×8,注意这里统一只需要计算一次卷积神经网络,原因如上滑动窗口的卷积实现。(所以划分的格子数不会影响计算速度)

实际使用是图片会划分的很精细,这样一个格子里一般不会同时出现两个对象。

编码方框的细节

目标检测入门_上(吴恩达老师深度学习课程学习笔记)

规定点的左上角是(0,0),右下角是(1,1)。x,y是中心点的位置,一定小于1,而w,h是框的长宽,有可能大于1。

注-指定边界框的方式有很多。

这里留一个问题:目标检测-bounding box方法分别在小格内运用图像定位算法,可如果目标占了两个小格,那么这目标的框怎么确定呢?