提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

1. 对象定位(Object Detection)1.1 图片分类(Image classification)1.2 定位分类(Classification with localization)1.3 (Detection)1.4 定位分类1.5 损失函数(loss function)

总结

1. 对象定位(Object Detection)

1.1 图片分类(Image classification)

了解目标定位之前先熟悉一下图片分类任务:

就是算法遍历图片,判断图片中的对象是不是汽车

1.2 定位分类(Classification with localization)

在这之后,我们需要学习构建神经网络中的另一个问题:定位分类问题

也就是说,我们不仅要用算法判断图片中的对象是不是一辆汽车,还要在图片中标记处它的位置——用红色的边框将汽车圈起来

这就是定位分类问题,“定位”的意思就是判断汽车在图片中的具体位置

1.3 (Detection)

后面我们会遇到,当图片中有多个对象时,应该如何检测它们,并确定出位置

例如,你正在做一个自动驾驶程序,你不仅需要检测其他车辆,也需要检测其他对象比如行人,草木,摩托车等等

1.4 定位分类

这一节我们只需要研究定位分类问题,通常只有一个比较大的对象位于图片的中间位置,我们要对它进行识别和定位

在图片分类问题中,你需要输入一张图片到多层卷积神经网络,它会输出一个特征向量,并反馈给softmax单元来预测图片类型

假设你在正在构建汽车自动驾驶系统,那么对象可能包括一下几类:

pedestrian(行人) car(汽车) motorcycle(摩托车) background(背景)——即图片中不含有行人、汽车、摩托车

这四种分类就是softmax函数可能输出的结果

这整个过程就是标准的分类流程(standard classification pipeline)

如果你还想定位图片中的汽车,该怎么做呢?

我们可以让神经网络多输出几个单元——多输出一个边界框

具体来说就是让神经网络再多输出4个数字,标记为bx,by,bh,bw

这四个数字是被检测对象边界框(bounding box)的参数化表示

我们先约定,图片左上角标记为(0,0),右下角标记为(1,1)

想要确定边界框(bounding box)的具体位置,需要指定红色方框的中心点

这个中心点的坐标表示为(bx,by),边界框的高度为bh,宽度为bw

因此,训练集不仅包含神经网络要预测的对象分类标签,还要包含表示边界框的这四个数字

接着采用监督学习算法,输出一个分类标签,还有这四个参数,从而给出被检测对象的边界框位置

在此例中,bx的理想值是0.5,因此他表示汽车位于图片水平方向的中间位置

by大约是0.7,表示汽车位于距离图片底部

1

3

\frac{1}{3}

31​的位置

bh大约为0.3,因为红色方框的高度是图片高度的0.3倍

bw大约为0.4,红色方框的宽度是图片宽度的0.4倍

下面,我们将具体讲一下如何为监督学习任务定义目标标签Y

请注意,目前有四个分类

最后,神经网络输出的是这四个数字(bx,by,bh,bw)和一个分类标签(label(1-4))或者是分类标签出现的概率

目标标签Y的定义如下,它是一个向量:

y

=

[

P

c

b

x

b

y

b

h

b

w

C

1

C

2

C

3

]

y = \begin{bmatrix} P_c \\ b_x \\ b_y \\ b_h \\ b_w \\ C_1 \\ C_2 \\ C_3 \end{bmatrix}

y=

​Pc​bx​by​bh​bw​C1​C2​C3​​

第一个组建Pc表示是否含有对象 ,如果对象属于前三类,则Pc=1;如果对象是第四类background,则表示图片中没有要检测的对象,则Pc=0;

我们可以这样理解Pc,它表示被检测对象属于某一类分类的概率。当然,background分类除外。

如果检测到对象,就输出被检测对象的边界参数bx,by,bh,bw 并且同时输出C1,C2,C3,表示该对象属于Class1-3中的哪一类,是行人、汽车、还是摩托车

鉴于我们要处理的问题,我们假设图片中只含有一个对象,所以针对这个定位分类问题,图片最多只会出现其中一个对象

下面,我们再来看几个样本

假如这是一张训练集图片,标记为x

y中第一个元素Pc=1,因为图中有一辆车,bx,by,bh,bw会指明边界框的位置,所以训练集需要标签的边界框

图片中是一辆车,所以结果属于分类2,因此C1=0,C2=1,C3=0;C1,C2,C3中最多只有一个等于1

y

=

[

1

b

x

b

y

b

h

b

w

0

1

0

]

y = \begin{bmatrix} 1 \\ b_x \\ b_y \\ b_h \\ b_w \\ 0 \\ 1 \\ 0 \end{bmatrix}

y=

​1bx​by​bh​bw​010​

这是图片中只有一个检测对象的情况,如果图片中没有检测对象呢?

如果训练样本是这样一张图片呢:

在这种情况中,Pc=0,y的其他参数变的毫无意义,这里我全部写成 “?”——表示毫无意义的参数

y

=

[

0

]

y = \begin{bmatrix} 0 \\ ? \\ ? \\ ? \\ ? \\ ? \\ ? \\ ? \end{bmatrix}

y=

​0???????​

​ 因为图片中不存在检测对象,所以不用考虑网络输出中边界框的大小,也不需要考虑图片中对象属于C1,C2,C3中的哪一类

针对给定的被标记的训练样本,不论图片中是否含有定位对象,构建输入图片x和分类标签y的具体过程都是如此

这些数据(x,y)最终定义了训练集

1.5 损失函数(loss function)

PS:损失函数又叫误差函数,用于定义单个训练样本预测值与真实值之间的误差

最后,我们介绍一下训练神经网络的损失函数,其参数为(,y),损失函数可表示为L(,y)

如果使用平方差策略,损失函数的计算公式为

L

(

y

^

,

y

)

=

(

y

1

^

y

1

)

2

+

(

y

2

^

y

2

)

2

+

.

.

.

+

(

y

8

^

y

8

)

2

L(\hat{y},y) = (\hat{y_1}-y_1)^2+(\hat{y_2}-y_2)^2+...+(\hat{y_8}-y_8)^2

L(y^​,y)=(y1​^​−y1​)2+(y2​^​−y2​)2+...+(y8​^​−y8​)2 因为,y含有8个元素(Pc、bx、by、bh、bw、C1、C2、C3),所以损失值等于每个元素相应差值的平方和

如果图片中存在定位对象,也就是y1(Pc)=1,损失值就是不同元素的平方和

如果图片中不存在定位对象,也就是y1(Pc)=0,这时y2-y8的值没有意义,只需要关注神经网络输出y1(Pc)值的准确度,所以损失值就是

为了了解对象定位的细节,这里用平方差简化了描述过程

实际应用中,你可以不对C1,C2,C3应用损失函数,而只输出其中一个元素值

通常的做法是对边界框坐标应用平方差或类似方法,对Pc应用逻辑回归函数或平方差

以上就是利用神经网络解决对象分类和定位问题的详细过程。结果证明,利用神经网络输出批量实数来识别图片中的对象,是非常有效的算法

总结

以上就是利用神经网络解决对象分类和定位问题的详细过程。结果证明,利用神经网络输出批量实数来识别图片中的对象,是非常有效的算法

相关阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: