以往传统机器视觉算法需要根据目标任务和先验知识选择合适的特征,即图像的颜色、形状、纹理等,并且用来提取这些特征的特征提取器需要人为构建,不仅构造过程较为繁琐和困难,而且设计出的提取器通常缺乏泛化能力。
近年来机器学习技术的迅速发展,使得机器视觉技术在图像识别工作中收获广泛的应用成果,其中卷积神经网络方法可以根据数据及其类别自行调整网络参数以构建合适的特征提取器,相对高效便捷构建的特征提取器的泛化能力更为优异,有效克服了传统方法的缺陷,刷新了图像相关的任务评测指标。
一张RGB图片的存储格式对于卷积网络而言,无非是一个张量数据。如一张RGB(三通道)的像素为26x26的图片,其数据格式为一个3x26x26的张量;
卷积网络的工作重点之一便是把3x26x26的张量转换为一个特定长度的一维向量,如长为256的一维向量;
不仅如此,卷积网络输出的一维向量需要较为完美地表征这张图片,即该一维向量需要蕴含图像的颜色、形状、纹理等特征;
对于得到的一维向量,后续再接入分类模型,基于图片的一维特征表示进行分类操作;
卷积神经网络一般由由输入层、卷积层、激活函数、池化层以及全连接层组成,其中卷积层和池化层在特征提取中具有重要作用。
对于网络中卷积层的输入输出数据的规格,可由下式约束:
N=(W-F+2P)/S+1
N:输出数据的大小
W:输入数据的大小
F:卷积核的大小
P:填充值的大小
S:步长的大小
需要注意的是,通道的概念也十分重要。在卷积网络中,除了初始输入的图片通道数固定(如RGB图片通道数为3),其余卷积层的前后通道数可以灵活设定。如一个卷积层的输入数据为16x27x27(16通道),可以在该卷积层设定输出的通道为32(具体数值自行确定,类似于超参数)。
例如:
输入为3x227x227的RGB图片,令其通过如下卷积层:
torch.nn.Conv2d(in_channels=3,out_channels=96,kernel_size=11,stride=4,padding=0)
则输出数据大小计算:N=(227-11+2x0)/4+1=55,由于通道数设为96,因而该层最终输出数据大小为96x55x55
类似地,池化层的输入输出关系与上式一样,对于上面通过卷积层得到的96x55x55的数据,令其通过如下池化层:
torch.nn.MaxPool2d(kernel_size=3, stride=2)
则输出数据大小计算:N=(55-3+2x0)/2+1=27,由于池化层不改变通道数,因而该层最终输出数据大小为96x27x27
如上所述,一张3x227x227的RGB图片数据,经过上面的卷积层与池化层处理后,得到了96x27x27的数据。
一般地,在卷积网络中多次对图片数据进行卷积与池化,最终可以得到一个一维的长向量。