无人驾驶汽车系统入门(十二)——卷积神经网络入门,基于深度学习的车辆实时检测
上篇文章我们讲到能否尽可能利用上图像的二维特征来设计神经网络,以此来进一步提高识别的精度。在这篇博客中,我们学习一类专门用来处理具有网格结构的数据的神经网络——卷积网络(Convolutional Network)。此外,我们使用keras来实现一种深层卷积网络——YOLO,使用YOLO对车辆进行实时检测。
创作不易,转载请注明出处:http://blog.youkuaiyun.com/adamshan/article/details/79193775
什么是卷积,卷积的动机
卷积运算
卷积是一种特殊的线性运算,是对两个实值函数的一种数学运算,卷积运算通常用符号 ∗ * ∗ 来表示,我们以Kalman滤波中的例子为例,来讨论一个一维离散形式的卷积:
假设我们的可回收飞船正在着陆,其传感器不断测量自身的高度信息,我们用 h ( i ) h(i) h(i) 来表示 i i i 时刻的高度测量,这个测量是以一定的频率发生的(即每隔一个时间间隔测量一次,所以测量 h ( i ) 是 离 散 的 h(i) 是离散的 h(i)是离散的),受限于传感器,我们知道测量是不准确的,所以我们采用一种加权平均的方法来简单处理,具体来说,我们可以认为:越接近于时刻 i i i 的测量,越符合时刻 i i i 时的真实高度,即我们给测量 s ( i ) = w i h ( i ) + w i − 1 h ( i − 1 ) + w i − 2 h ( i − 2 ) . . . s(i) = w_ih(i) + w_{i-1}h(i-1) + w_{i-2}h(i-2)... s(i)=wih(i)+wi−1h(i−1)+wi−2h(i−2)... 其中的权重 w i > w i − 1 > w i − 2 . . . w_i > w_{i-1} >w_{i-2} ... wi>wi−1>wi−2... 。这就是一个一维离散形式的卷积,由于这个例子中我们不可能得到“未来的测量”,所以只包含了一维离散卷积的一半,下面是一维离散卷积的完整公式:
s ( i ) = ( h ∗ w ) ( i ) = ∑ j = − ∞ ∞ h ( j ) w ( i − j ) s(i) = (h*w)(i) = \sum_{j=-\infty}^{\infty}h(j)w(i-j) s(i)=(h∗w)(i)=j=−∞∑∞h(j)w(i−j)
其中 i i i 表示我们计算的状态(时刻,位置), j j j 表示到状态 i i i 的距离(可以是时间差,空间距离等等),这里的 h h h 和 w w w 就分别表示两个实值函数。在卷积神经网络的术语中,第一个函数 h h h 被称为输入,第二个函数 w w w 被称为 核函数(kernal function) , 输出 s s s 被称为 特征映射(feature map),很显然,在实际的例子中, j j j (即我们考量的区间)一般不会是负无穷大到正无穷大,它通常是个很小的范围。在深度学习的应用中,输入通常是高维度的数组(比如说图像),而核函数也是由算法(如随机梯度下降)产生的高维参数数组。如果输入二维图像 I I I ,那么相应的我们也需要使用二维的核 K K K,则这个二维卷积可以写为:
S ( m . n ) = ( I ∗ K ) ( m , n ) = ∑ i ∑ j I ( i , j ) K ( m − i , n − j ) S(m. n) = (I * K)(m, n) = \sum_i\sum_jI(i, j)K(m-i, n-j) S(m.n)=(I∗K)(m,n)=i