3.特征点检测:需要改进神经网络的最后一层,让其多输出特征数据,输出单元可以进行改变。对于想要输出单元变多的情况,在制造数据集的时候,特征点需要人为提前进行标注,作为目标标签输入。
4.对象检测算法(基于滑动窗口的目标检测算法)
step1:创建一个标签训练集。可以适当剪切一些图片,让汽车占据整张图片的中心位置。
step2:训练卷积神经网络。输入这些剪切过的图像,卷积网络输出结果Y。
step3:滑动窗口目标检测。对于一张大的照片,使用一个较小的方框在图片中截取小图片作为输入,使用上面训练好的卷积网络进行预测。通过步幅和方框的大小来确定图片分割的数量。思路是以固定步幅滑动窗口,便利图像的每个区域,把这些剪切后的小图像输入卷积网络,对每个位置按0(没有车)或1(有车)分类
step4:选取不同的窗口重复实验。总会有一个窗口可以检测到车。
算法的缺点计算成本过高,卷积网络需要一个一个计算输出结果。如果步幅过大,虽然会减少输入卷积网络的窗口个数,但是会导致检测不到目标的存在;如果步幅过小,会有较高的成本。
除非使用超细粒度或极小步幅,否则无法定位图片中的对象
5.滑动窗口的卷积应用
step1:把神经网络的全连接层转化成卷积层
原本是14*14*3
的输入通过16个5*5
的卷积核,变成了10*10*16
的特征,再经过2*2
的最大池化层,变成了5*5*16
的特征,经过两次全连接层,再通过softmax输出4个类别的概率。
通过变化之后,把全连接层变成使用400个5*5
的卷积核得到1*1*400
的特征,再通过400个1*1
的卷积核得到1*1*400
的特征,和原本经历过两次全连接层的结果相对应,再通过4个1*1
的卷积核,即可得到结果
step2:通过卷积实现滑动窗口对象检测算法
假设用于训练的是14*14*3
的图片,经过上面改进过的网络,最后可以得到1*1*4
的输出结果。如果用于测试的是16*16*3
的图片,使用传统的滑动窗口算法,则将14*14*3
的窗口以步幅为2(最大池化层是2*2
)的方式在原图片中截取,依次输入到卷积神经网络中,获得4个结果。但是通过只用改进后的卷积神经网络,可以将测试图片直接输入,得到的2*2*4
的结果,就对应了滑动窗口想得到的4个输出。对于28*28*3
的图片也是如此。
step3: 对于一张图片,进行上述算法后,有几率可以在某一方框内识别到目标。
卷积的计算:原始图片大小-卷积核大小+1(28-5+1=24)
算法的优点:提高了整个算法的效率
算法的缺点:边界框的位置可能不够准确