图像分类与mmcls
参数量与运算量
参数量
卷积层的参数量包括:卷积核+偏置值。
以下图为例,其计算公式为:
其中,c为输出通道数,k为卷积核尺寸,co为原始通道数。
运算量
卷积后的尺寸公式,其中h为原图像大小,k为卷积核尺寸,p为padding,s为步长。
以上图为例,大小为6×6×3的原始图像,输出通道为2,即有2个卷积核进行卷积,卷积核尺寸为3×3。卷积是一个通道的所有卷积核分别与原图像对应通道的原图进行卷积计算,以黄色卷积核为例,原图中最终得到的一个像素,是由红色中的3×3个像素与卷积核共进行了3×3个运算后,再与绿色、蓝色相同的运算结果相加,再加一个偏置项b,最终获得。期间其乘加次数为3×3×3。又由于输出通道尺寸为4×4,总输出为2通道,所以总乘加次数为4×4×2×(3×3×3),公式如下:
其中,HW输出图像尺寸,C为输出通道数,C0为原通道数,k为卷积核尺寸。
小总结
对比运算量与乘法量公式,可得其二者均正比于通道数的平方于卷积核尺寸的平方,在考虑缩小模型的尺寸与运算量时,可着重优先考虑其二者。
应用
1.GoogleNet:并不是所有的特征都需要同样大的感受野,在同一层中混合使用不同尺寸的特征可以减少参数量。相比于传统的统一尺寸的卷积核大大减小了运算量与参数量。
2.ResNet:将空间维度与特征通道的维度进行分解,将原先运算参数量大的操作分多个次数来运算。
3.可分离卷积
将常规的卷积分解为逐层卷积和逐点卷积,降低参数量和计算量。
在上图示例中,使用3个单通道的3×3卷积核,分别与原图的三个通道进行卷积,此时相比于常规卷积,缺少不同通道之间的信息。再用32个1×1×3的卷积核对这三个进行卷积,弥补了通道之间的信息。大大减少了参数量与计算量。
其公式参数:Dk为卷积核尺寸,Dg为输出图像尺寸,N为输出通道数,M为原始通道数。
基于可分离卷积主要有MobileNet等模型。
Transformer
最早在nlp中发家,卷积主要的计算是用一个参数,对前一个特征进行加权求和,得到后一层的特征,具体表现为对应位置相乘权重再相加。对应位置的权重越大(卷积核对应数越大)则说明对应位置的特征越重要。特征对于输入是无关的,无论输入什么图片,都是用同样的卷积核进行卷积。并且也只能看到局部的特征(卷积核尺寸为3×3,则一次卷积只能观察3×3的视野)
注意力机制里面,特征是一个输入的函数,不同图像输入进来,特征如何去组合与输入的是什么相关。且不限于领域,整个图片谁有用就拿过来用。如下图所示:
对于不同的输入图片,所提取的图像特征是不同的,不再统一化。
实践方式
通过query方式,如下图所示。
首先生成一个query,体现在对于不同输入关注在哪个部位,编码到一个向量里;key表示为每个位置都要计算,表示输入的都有什么;进而将query与key进行一个相关计算,相关部位对应的权重会更大一些。key和value是同一个特征产生的,query是另外获取的。
模型学习
梯度下降整体学习流程: 1首先通过初始化策略将可学习参数设置一个初始值。2.对图像数据集进行无放回采样,并对其进行一些图像增强处理,使之成为一个四维的数组(bs,b,w,c)。3.前馈计算损失。4.反向传播计算损失对于网络参数的梯度。5.运行优化器和学习率等策略,运用梯度下降方式更新参数。
内层循环称之为一个iteration,所有batch循环完称为一个epoch。
数据增强
使用混迹图像或遮盖填充操作,使label不再为单一种类,而是多种类混合,从而获得更好的训练效果。