吴恩达深度学习之卷积神经网络(三)目标检测

1、目标定位

吴恩达深度学习之卷积神经网络(三)目标检测

我们要做的任务:

1、检测出图片中的物品。(检测)

2、检测出图片中的物品,并且用框框标出。(定位检测)

3、检测出图片中所以需要检测的目标,并且标注。(所有目标定位检测)

(1)检测,如下,把softmax分为四类(行人,汽车,摩托车,背景图)

吴恩达深度学习之卷积神经网络(三)目标检测

(2)定位

吴恩达深度学习之卷积神经网络(三)目标检测

怎么去输出红色框,这就需要含有检测目标的数据集不但标注出检测目标,并且对应检测目标还要有一组值bx,by,bh,bw。其中(bx,by)为数据集中目标的中心点,bh为目标的高度,bw为目标的宽度。如上图,该图片不但被分为car类别,并且有四组数值bx,by,bh,bw。softmax输出结果不但分行人,小车,摩托车,背景图四个类别,并且含有一组边界数值boundingbox。

关于怎么检测细节如下:

吴恩达深度学习之卷积神经网络(三)目标检测

说明:

每一个输入的图片标签为y,y有8个数值pc,bx,by,bh,bw,c1,c2,c3。其中,pc用来标注图片中是否有物体,pc=1时说明图片中有行人,车,或者摩托车,pc=0时,图片中没检测目标。当pc=1时,对应会有bx,by,bw,bh四个值来标注目标的位置,并且c1,c2,c3用来标注目标的类型,若目标为行人,则pc=1,c1,c2,c3分别为1,0,0。当pc=0时,图片中没目标,不用考虑其他7个数值。

关于训练过程中损失函数怎么计算:当pc=1时,可以把8个数值都带入,用平方计算;当pc=0时,只需考虑pc的精确度,不用考虑其他7个数值,所以带入pc用平方计算。

事实上,我们亦可以对pc用逻辑回归,c1,c2,c3用softmax,对于bx,by,bh,hw计算损失函数可以用平方误差等类似方法。

2、特征点检测

吴恩达深度学习之卷积神经网络(三)目标检测

目标检测我们可以用1中的方法,我们还可以特征点检测。

如,人脸识别,我们可以用64个点来标注人脸特征。如眼睛用四个点去标注眼角;眉毛也可以标注,如想做的更深入可以通过眉毛位置判断是皱眉还是弯眉;这样的化标签有128+1=129个特征点,其中图片中是否有人脸用face标注,0为无脸,1为有脸。

我们还可以用特征点去判断运动员的姿态等等。

3、目标检测

对象检测算法,该节讲了如何用卷积做对象检测。(采用滑动窗口目标检测算法)

吴恩达深度学习之卷积神经网络(三)目标检测

我们将训练集图片抠出来,并且对其分类,如上所示,然后输入到卷积神经网络进行训练。

吴恩达深度学习之卷积神经网络(三)目标检测

将训练好的网络在需要被检测的图片中进行滑动,如上图所示。效果相当于把需要被检测的图片图片一个一个的依次输入到训练好的卷积网络中,若框框中有目标,则y为1没有则为0。

滑动窗算法的优点是原理简单,且不需要人为选定目标区域(检测出目标的滑动窗即为目标区域)。但是其缺点也很明显,首先滑动窗的大小和步进长度都需要人为直观设定。滑动窗过小或过大,步进长度过大均会降低目标检测正确率。而且,每次滑动窗区域都要进行一次CNN网络计算,如果滑动窗和步进长度较小,整个目标检测的算法运行时间会很长。所以,滑动窗算法虽然简单,但是性能不佳,不够快,不够灵活。

吴恩达深度学习之卷积神经网络(三)目标检测

4、卷积的滑动窗口实现

相关知识:

吴恩达深度学习之卷积神经网络(三)目标检测

以上操作为用卷积代替全连接层和softmax层。这里,卷积层和全连接层效果一致,因为400个节点中每个节点都与前面部分的每个节点相关。第一个用卷积替代全连接中,用了400个5*5*16的卷积核,第二个用了400个1*1*400的卷积核,第三个用了4个1*1*400的卷积核。

吴恩达深度学习之卷积神经网络(三)目标检测

如上所示,若我们训练的卷积为第一个,当我们检测一张16*16*3的图片时,若采用步幅为2的方式卷积,我们不需要把图片划分为四个图去依次检测,我们只需要把该图去做卷积处理,得出的结果依次为检测结果。

之前的滑动窗算法需要反复进行CNN正向计算,例如16 x 16 x 3的图片需进行4次,28 x 28 x3的图片需进行64次。而利用卷积操作代替滑动窗算法,则不管原始图片有多大,只需要进行一次CNN正向计算,因为其*享了很多重复计算部分,这大大节约了运算成本。

5、Bounding Box预测

滑动窗法的卷积实现算法效率更高,但存在问题,不能输出最精确的边界框,本节算法讲如何得到最精确的边界框。