天天看点

CV《物体识别与检测1 - 单目标识别 && 特征点检测》

本文是根据Andrew Ng的深度学习视频学习,自己总结的。这一系列先只学习关键技术和设计,具体的实例等下一期进行。

一:单object的识别与检测

先来一个简单的,每一图片内都是只有一个需要检测是物体,拿交通相关的数据来说明吧,假如我们要区分出是图片中是汽车,自行车,平衡车,摩托车,行人等等一堆的类别,每个图片中仅仅只包含了一个需要检测的物体,不仅能够分类,还需要给出图中这些物体的位置信息,画出它的大小边框信息。

CV《物体识别与检测1 - 单目标识别 && 特征点检测》
CV《物体识别与检测1 - 单目标识别 && 特征点检测》
CV《物体识别与检测1 - 单目标识别 && 特征点检测》
CV《物体识别与检测1 - 单目标识别 && 特征点检测》

1:我们先来定义网络和输出信息Y的定义,Y是1 X 1 X (1 + 4 + N)维度的。

CV《物体识别与检测1 - 单目标识别 && 特征点检测》

直接将整个图像输入进一个卷积神经网络,输出一个1 X 1 X (1 + 4 + N)维度的张量,这里1 X 1就表示这里仅仅只检测一个物体,在后面的多物体检测中,会重新提到整个概念,先留个印象,这里的Channel 是 (1 + 4 + N)维度的,也就是我们的每个Image对应的标签,如下:

Y = [Pc,Bx,By,Bh,Bw,C1,C2,…,CN]

注意:这个标签的设计就是为了一个物体(位置,大小,类别)设计的。

Pc:代表物体检测置信度,表示该一幅图片中是否存在物体,范围是0~1,值越大,越肯定图像中存在需要检测的土体类别。如果该值为0,其他维度的都可以不用关心,直接忽略,

如果该值大于某个阈值drop_threshold,比如0.5/0.6,说明该图像存在物体。因为训练数据还存在一些空白物体的样本。

Bx,By,Bh,Bw:表示该物体的中心点位置坐标x,y,以及图像高度和宽度值,这里需要说明下,为了方便运算,我们一般将图像坐标进行了归一化处理,左上角的坐标是(0,0),右下角的坐标是(1,1),图像高度和宽度都是进行了归一化的。因此,在单物体检测中,整个图像就是一个区域,如果在这个区域中找到物体的位置信息值是[Bx,By,Bh,Bw],实际还要再做一次运算反推到真实物体的位置和大小。

C1,C2,…,CN:是需要检测的物体的类别,假设我们需要检测N种物体或者场景,因此它的的维度就是N,这里就是一个onehot向量,这N个分量维度还需要做softmax操作的,才能输出分类的概率各是多少,所以在计算损失函数额时候,这N个分量维度值都需要先经过softmax计算先。

至此,我们知道了网络的输出值形式,这个形式也是数据集标签的形式,也就是我们需要人工地大量地手动得到这样的数据,每一个图片都是需要人工去采集这样的标签信息,用来做ConvNet的输入。

2:损失函数的定义

数据的输入的标签y有了,前向计算后,输出的y_head也有了,我们来定义损失函数,

这里使用的时候均方差误差。

CV《物体识别与检测1 - 单目标识别 && 特征点检测》

必须强调的是,当标签的Pc值为0的时候,其他维度均可以舍弃忽略掉。

然后就是利用大量的数据进行训练该模型,梯度下降。

训练数据都是人工打标签得到的哈。

因此该问题被转换为了监督学习。

二:特征点识别(Landmarks detesction)

比如我们有时候需要得到图像中的一些关键信息点,人脸识别中,我们想得到无关的位置,脸型轮廓的位置,在AR/VR中,我们还要得到人体的姿势动作是什么(比如手臂的位置,蹲着的,站着的啥啥啥的)。

比如下图所示。

CV《物体识别与检测1 - 单目标识别 && 特征点检测》
CV《物体识别与检测1 - 单目标识别 && 特征点检测》

如上图所示我们有时候需要一些关键点来表述图片的信息,我们按照第一小节的思路,我们先定义图像的标签数据Y,Y是(1 + 2N)维度的向量。

标签形式如下:

Y = [Pc,LX_1,LY_1,LX_2,LY_2,…,LX_N,LY_N]

Pc:仍然是指示图像中是否有需要检测的object存在,代表物体检测置信度,表示该一幅图片中是否存在物体,范围是0~1,值越大,越肯定图像中存在需要检测的土体类别。如果该值为0,其他维度的都可以不用关心,直接忽略,

如果该值大于某个阈值drop_threshold,比如0.5/0.6,说明该图像存在物体。因为训练数据还存在一些空白物体的样本。

LX_m,LY_m:成对存在,表示一个坐标,也是归一化处理了之后的坐标,介于0~1之间的值,如果我们需要得到N个Landmarks点,这个向量的维度就是(1 + 2N)维。

网络形式如下:

CV《物体识别与检测1 - 单目标识别 && 特征点检测》

这个也好理解,就不多说了。

至于训练数据,依然是大量的人工打标签得来的。

这依然将问题转换为了一个监督学习的问题。

损失函数可以直接是均方差误差,对输出每一维度进行均方差计算。

继续阅读