文章目录
一、网络模型设计目的
1、为了节省设备存储空间,让神经网络在更小计算力的设备上运行。同样价格的PC和移动设备下,PC机的计算力要比移动设备强大很多,所以如何让神经网络网络在移动设备上也能够运行,就涉及到了网络模型的设计。
2、为了提升网络的训练效率。网络模型经过设计后,不仅能够降低模型对硬件设备算力和储存容量的依赖,还能够大大的提升在训练中模型收敛的速度。
3、为了提升模型输出的精度。经过精心设计的模型,不仅节省储存空间,加快模型收敛速度,还能够有效的提升模型最终输出的精度。当然有时候对算力、速度和精度这三者之间是需要有一定的相互取舍的。
二、网络模型设计的重点
网络设计的重点在于精度、容量(参数)、效率。
总结:层次要深,信息要充分融合,计算量要足够小。
三:网络模型设计的形式
3.1 33和11的卷积(应用模型:ResNet)
卷积核分为像素融合和通道融合。像素层面为稀疏连接。通道层面输入通道和输出通道为稠密连接,其中通道可以分组,但会导致融合不充分,后面可以采用通道混洗操作。
卷积核为1x1,像素块也为1x1大小,为了保证信息不丢失,在卷积的过程中步长一定为1。这种卷积过程称为逐点卷积。
在卷积完以后,图像大小和原图一样。像素层面之间没有任何连接。通道层面为全连接。因此1x1的卷积比3x3的卷积计算量要小很多。
考虑到像素之间没有融合,后面需要做一些像素融合之间的操作。1x1的卷积核和3x3的卷积核一般是放在一起使用的。
过程:1x1的卷积将通道变少以后,然后再用3x3的卷积做像素级别的融合,然后用1x1的卷积还原通道。
一个具有瓶颈结构的残差单元由conv1x1、conv3x3和conv1x1组成。第一个conv1x1减少输入通道的维度,这降低了后续conv3x3相对高昂的计算成本。最后的con1x1恢复输出通道的维度。
图像刚输入网络的时候,冗余的信息是比较多的,通过快速的下采样让信息减少,然后后面可以加残差模块。(重复的加残差模块,图片的输入输出大小是不变的,这样做的目的可以更充分提取图像的特征,计算量也会减少)
3.2 分组卷积(ResNeXt)
ResNet模型1*1的卷积核减少通道数不能太多,容易导致容量不够,参数量少。但如果通道数过大,计算量又太大了。因此采用了一种改进ResNetxt,通过通道分组使计算量变小,但精度还能维持在一个较高的水平上。速度相对前者只慢了一点点。
ResNeXt这种模型通过将瓶颈结构和分组卷积结合在一起.
3.3 可分离卷积(MobileNet-v1、v2)
(MobielNet v1)
普通卷积中像素层面为稀疏连接,通道层面为全连接。而这个深度可分离卷积通道之间彼此是分开的,这也就是为什么叫深度可分离卷积。
深度可分离卷积在通道层面既不是全连接也不是通道分组进行连接的。通道之间彼此分开,也就是说输入通道和输出通道是一样的。假设有32个通道,那么我们就分成32个组,那么每个组就只有一个通道。conv1*1做逐点卷积,进行通道的融合,像素不融合。分组数却为1. conv3x3只做像素层面的融合,通道彼此分开。
缺点:容量太小,参数量小,精度不高。
(该图是MobileNet v2所用到的结构)
右边先将通道放大,但并不会导致参数量的增大,因为3*3的卷积核通道之间是彼此分开的。后面再用1x1的卷积进行压缩通道,这么做使得通道之间信息融合的更好。
改进:将深度可分离卷积提到前面。
MobileNet-v2改进版本精度和ResNet差不多,速度比它快很多。因为它将ResNet的优点集成过来了。
3.4 通道混洗(ShuffelNet)
通道分组之后,信息融合不够好,因此我们可以采用通道混洗操作。通道混洗就是把通道给打乱。
GN’ (=N)代表输入通道数,输入通道的维度首先被整形为(G, N’),然后将(G, N’)转置为(N’, G),最后将它拉平到与输入相同的形状。
右边先将通道分组,然后再打乱,做可分离卷积,最后面做可分离卷积。
3.5 像素混洗
将一张图通过普通卷积,将通道扩充到指定通道数,比如3个通道到9个通道,然后将每个通道上的第一个值合成一个长度为9的向量,resize成3x3的一个小特征图,依次类推,将第二个值的集合组成第二个小特征图,最后将这些小特征图组成一张大的特征图,再将每个3*3的小特征图汇总成一个特征,变成和原输入图一样的大小,就完成了像素级别的混合。