内容纲要

欢迎转载,作者:Ling,注明出处:深度学习:原理简明教程14-深度学习:CNN对象定位以及对象检测

 

本文主要介绍图像识别的对象检测问题。

主要内容参考Andrew NG。

 

图像分类:识别一个图像是什么类别,比如是车

dl_14_001

图像分类和定位:识别一个图像是什么类别,并且定位

dl_14_002

图像检测:识别多个对象,并且定位

dl_14_003

如何定位且且进行分类?

图示

dl_14_004

假设类别有4个:新人,车,摩托,背景

设定:左上是(0,0),右下角是(1,1)

输入:图片

输出:类别和bx,by是识别对象的中心,bh和bw是图像的长和宽

我们通过一个CNN提取特征,然后通过softmax进行类别学习,bx,by,bh,bw通过平方差设置cost函数

 

形式化定义如下

dl_14_005

Pc取值0表示不包含对象,1表示包含对象,c1-c3表示3个类别

dl_14_006

左边包含对象,所以要看b的各个值以及c的值,右边不包含对象,所以只用考虑第一个值,所以损失函数为:

dl_14_007

解释:

如果y1,也就是Pc为1的话,那么y的所有分量都要看,和标准做差求平方和,如果越小,损失越小

如果y1为0,那么后面的都不用看,只看第一个分量

输入一个x,通过CNN预测一个y^,各个分量和标准的y做差,求平方和。

 

另外一种叫landmark detection,也可以识别对象并且定位:

该方法主要要识别对象的骨架:

我们可以约定学习骨架要学习多少个坐标点,比如32个,这样y=32*2 + 1 个分量,其中最后一个1表示是否真是对象骨架:

dl_14_008

dl_14_009

 

对象检测:Object Detection

实例:

目的:识别图片中的汽车及其位置,可以有多个。

最简单方法:

首先训练一个图像分类器:

dl_14_010

该分类器可以通过CNN识别一个小图片是否是汽车。

然后用不同的框,将图片分成不同的小块,对每个小块进行分类,看看是否是汽车,通过这种办法进行识别对象类别和位置:

dl_14_011

问题:效率及其低。

解决:[Sermanet et al., 2014, OverFeat: Integrated recognition, localization and detection using convolutional networks]

通过将Fully Connection层转成Convolution层,实现一个框,一遍,可以对整个图像进行对象类别识别:

dl_14_012

解释:

第一行的图,实际上将一个小图,通过CNN,进行分类,最后得到的y是一个one-hot表示的向量。

第二行的图,将FC用Convolution替代,先通过5*5 400个filter的Convolution替代第一个FC,再通过1*1 400个filter的Convolution替代第二个FC,最后生成一个1*1*4的one-hot表示的向量

上下两图效果完全一样。

 

继续:

dl_14_013

解释:

第一行的图,对一个14*14*3的图片用上面方法进行对象类别识别

第二行的图,对一个16*16*3的图片,用上面方法,最后输出2*2*4的结果,这个结果什么含义?

实际上就是对16*16*3的图的四个14*14*3的子图,每个进行对象类别识别的结果。也就是14*14方框对输入的图,可以一次通过CNN进行不同位置的类别识别!!!这样就加快了效率。

第三行的图,和第二行的图效果一样。

 

总结:

一种大小的方框,对输入图片,可以运行一次,就识别出每个方法对象的类别。

dl_14_014

但是还是没法准确定位图形位置。

 

为了不仅识别对象,而且识别位置,我们采用YOLO算法:[Redmon et al., 2015, You Only Look Once: Unified real-time object detection]

dl_14_015

首先:

y不再是1*1*4

而是1*1*8,其中这8个值含义前面介绍过。

其次:

指定方框大小后,会一次性学习一个图片中各个小方块情况,学习出这8个值,通过这8个值,我们就可以精确定位每个对象的中心位置,长宽,类别等信息。

注意:bx和by中心只能是0-1之间的值,每个方框左上角为(0,0)右下角为(1,1),但是bh和bw可以超过1

问题:

1)如何评估结果好坏?

dl_14_016

看结果和确定的值,和标准值两个方框的intersection over union值。可以设定一个最小值。

2)如果设定的检查方框太小,可能不同方框都检测出了同一个对象,怎么办?

解决:Non-max suppression算法

例如:

dl_14_017

我们选取的方框,几个绿色和黄色都识别出来了对象,并且定出了位置:

dl_14_018

Non-max suppression算法

由于得到的y第一个分量是一个概率值,所以我们可以根据他,首先将概率小于阈值的全去掉,留下图中的五个位置结果。

然后我们

选概率最大的,比如0.9的这个

选择之后把和0.9这个重合IoU大于一定阈值的全部去掉,这样就只留下了左边的两个框和0.9这个

        再选择概率最大的0.8的,然后去掉重合的,最后就剩下了两个定位框

标准算法:

dl_14_019

再复杂一点:

目标:对象有重合

dl_14_020

改进:

其实主要改变y的分量,从8个变成8*2 16个

该方法同时也可以识别一个对象:即pc1为1,而pc2为0,

总结YOLO算法:

训练:

dl_14_021

识别:

dl_14_022