暑校


3、MobileNet -1

<p>MobileNet V1是一种轻量级的卷积神经网络,能够在保持较高准确率的情况下具有较少的参数量和计算时间。它是由Google的研究人员在2017年提出的,并成为当时最流行的轻量级模型之一。 MobileNet V1的核心思想是<strong>通过深度分离卷积来减少模型的参数量和计算时间</strong>。与标准卷积不同,深度分离卷积将空间卷积和通道卷积分为两个独立的卷积层,这使得网络更加高效。具体来说,在深度分离卷积中,首先使用一个空间卷积,然后使用一个通道卷积来提取特征。这与标准卷积相比可以减少参数数量并加速运算。</p> <h2>网络结构</h2> <h3>深度可分离卷积与标准卷积的对比</h3> <p>深度可分离卷积结合BN和ReLU,与标准卷积模型的对比如下: <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=58a097686f9069da6498c38c1299f45f&amp;amp;file=file.png" alt="" /> 图片的左边展示了一个<strong>标准卷积层</strong>,它包括常规的卷积操作,后面紧跟着批量归一化(BatchNorm)和ReLU激活函数。这种结构在卷积层中执行过滤和特征组合的操作。 图片的右侧展示了一个使用<strong>深度可分离卷积的层</strong>,它由两部分组成:深度卷积(Depthwise Convolution):对每个输入通道分别应用一个卷积核进行过滤操作。然后还进行了点卷积(Pointwise Convolution,1x1的卷积),用于将深度卷积的输出进行线性组合,生成新的特征表示。</p> <h3>整体网络结构</h3> <p>整个MobileNetV1网络除了平均池化层和softmax输出层外,<strong>共28层</strong>。 第1层为标准卷积(在mobilenet中只有第一层是标准卷积),接下来26层为核心层结构(分别是深度卷积层DW(Depthwise Convolution)和逐点卷积层(Pointwise Convolution),这两个都作为单独的层计算在内),最后一层是平均池化层,全连接层加softmax层输出。 在整体网络架构中标Conv的表示普通卷积,Conv dw代表深度卷积(DW),s表示滑动窗口的步距。 全连接层不使用激活函数,而使用softmax进行分类之外,其他所有层都使用BN和ReLU(包括深度卷积和点卷积) <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=581d9712d05ae7b6e132c87eb2e91354&amp;amp;file=file.jpg" alt="" /></p> <h5>为什么点卷积在moblienet网络中也是conv呢?</h5> <p>在某种意义上,点卷积其实和普通卷积是一样,只不过<strong>点卷积的卷积核尺寸被固定为1x1</strong>。</p> <h2>标准卷积</h2> <h3>方法</h3> <p> 1.使用卷积核对图中的特征进行提取。  2.对提取的特征进行融合。</p> <h3>特点</h3> <p>1.卷积核channel=输入特征矩阵channel 2.输出特征矩阵channel=卷积核个数</p> <h3>参数量</h3> <p> Dk × Dk × M × N (其中Df为输出特征图尺寸,Dk为卷积核尺寸,M为输入通道数,N为输出通道数)</p> <h3>计算量</h3> <p>Dk × Dk × M x N × Df × Df <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=117eb55ccea17e0ad4895e3d86de7805&amp;amp;file=file.png" alt="" /> 以上图为例子,现在有一个大小为32 x 32像素、1通道彩色图片。经过一个包含一共有1个Filter的卷积层后,最终输出3个Feature Map,输出尺寸为28 x 28。 那么在这个例子中,卷积层共1个Filter,每个Filter包含了3个Kernel,每个Kernel的尺寸为5 x 5。输入通道数为1,输出通道数为3。因此卷积层的参数数量和计算量可以用如下公式来计算: 参数量 = Dk × Dk × M × N = 5 x 5 x 1 x 3 = 75 计算量 = Dk × Dk × M x N × Df × Df = 5 x 5 x 1 x 3 x 28 x 28 = 58800</p> <h2>深度可分离卷积</h2> <p>深度可分离卷积由两部分组成:<strong>深度卷积、点卷积</strong>。具体形式如下图所示: <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=478e2a2047ab07223562c137157f1381&amp;amp;file=file.png" alt="" /></p> <h3>深度卷积</h3> <h4>方法</h4> <p>深度分离卷积把输入特征图的所有通道进行分离,每个通道对应的一个卷积核对该通道的特征图进行单独的卷积操作。也就是说,第m个深度卷积核作用在输入的第m个通道上,得到输出结果的第m个通道。在深度分离卷积中,每个卷积核的深度固定为1。</p> <h4>特点</h4> <p>1.卷积核channel = 1 2.<strong>输入特征矩阵channel = 卷积核个数 = 输出特征矩阵channel</strong></p> <h4>参数量</h4> <p> Dk ×Dk × M (其中Df为特征图尺寸,Dk为卷积核尺寸,M为输入通道数,<strong>N为输出通道数在深度卷积里固定为1</strong>)</p> <h4>计算量</h4> <p>Dk × Dk × M × Df × Df <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=172bd70f0198f5a969602b12af8bcfc6&amp;amp;file=file.png" alt="" /> 这里可以举一个例子与上面的标准卷积进行对比。比如一个大小为64×64像素、3通道彩色图片首先经过卷积运算。与标准卷积不同的是深度卷积的卷积核数量与输入的通道数的的深度相同,也就是说第一个深度卷积核只会作用在第一个通道上面。在这个例子里输入的是一个3通道的图像,所以只会有3个卷积核。所以一个3通道的图像经过运算后生成了3个特征图。 那么在这个例子中,卷积层共3个Filter,每个Filter包含了1个Kernel,每个Kernel的尺寸为3 x 3。输入通道数为3,输出通道数在深度卷积里固定为1。因此卷积层的参数数量和计算量可以用如下公式来计算: 参数量 = Dk × Dk × M × N = 3 x 3 x 3 x 1 = 27 计算量 = Dk × Dk × M x N × Df × Df = 3 x 3 x 3 x 1 x 64 x 64 = 110592</p> <h3>点卷积</h3> <h4>方法</h4> <p>点卷积的运算与标准卷积运算非常相似,<strong>只不过它的卷积核的尺寸为1×1×M</strong>,( M为深度卷积结束后输出特征图的通道数)。所以这里的卷积运算会将上一步的map在深度方向上进行加权组合,生成新的特征图。</p> <h3>特点</h3> <p>1.卷积核尺寸 = 1×1×M 2.输出特征矩阵channel=卷积核个数</p> <h4>参数量</h4> <p>1 x 1 x M x N (点卷积中的卷积核尺寸都是1×1,Df为特征图尺寸,M为输入通道数,N为输出通道数)</p> <h4>计算量</h4> <p>1x 1 x M x N x Df x Df <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=d93528b34769f00bf27fafa512a85d46&amp;amp;file=file.png" alt="" /> 还是以上面大小为64×64像素、3通道彩色图片为例,可以看到在经过深度卷积之后生成了3个特征图。 那么在点卷积中可以看到卷积层共4个Filter,每个Filter包含了3个Kernel。但是点卷积的的卷积核尺寸都为1 x 1。输入通道数为3,输出通道数与卷积核的个数相等为4。因此卷积层的参数数量和计算量可以用如下公式来计算: 参数量 = Dk × Dk × M × N = 1 x 1 x 3 x 4 = 12 计算量 = Dk × Dk × M x N × Df × Df = 1 x 1 x 3 x 4 x 64 x 64 = 49152</p> <h3>参数量的减少</h3> <p>计算一次深度可分离卷积的总体计算量如下图所示: <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=5e4022e810828bc509429f0d847d69ac&amp;amp;file=file.png" alt="" /> 这样我们就可以计算在输出同样结果的情况下,深度可分离卷积比传统卷积减少的计算量。深度可分离卷积减少计算量的比例如下图所示: <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=63d056415769d735d9fc32720ef150bd&amp;amp;file=file.png" alt="" /> 在平时使用过程中,我们一般都会使用3x3的卷积核(Dk是卷积核的尺寸),所以<strong>理论上传统卷积的计算量是深度可分离卷积的8~9倍</strong>。</p> <h2>超参数的设置</h2> <h3>宽度超参数α</h3> <p>尽管基本的MobileNet体系结构已经很小而且延迟很低,但是很多时候一个特定的用例或应用程序可能需要模型更小和更快。为了构造这些更小、计算成本更低的模型,引入了一个非常简单的参数α,称为<strong>宽度乘数</strong>。宽度乘数是作用于每一层的通道数目(<strong>在mobilenet网络中是除了第一层普通卷积外</strong>),可以取0到1的任意值。当宽度乘数为1时,模型与原始模型一致,而当宽度乘数小于1时,模型会变得更轻巧。这里需要注意的是宽度乘数不是一个决策变量,而是一个可以根据自己需求设置数值的变量。</p> <h4>方法</h4> <p>比如针对某一层网络,乘以这个宽度乘数后,输入通道从M变成αM ,输出通道从N变成αN,该层计算量变成了: <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=7973296a06ce3fa62e4880828c34923f&amp;amp;file=file.png" alt="" /> 那么经过宽度乘数后的一层卷积的计算量相较于普通卷积的计算量的比例会变成如图所示,相较于原始模型计算量又变小了: <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=e51f39e3fcdafce061db7c9cd3da5492&amp;amp;file=file.png" alt="" /></p> <h4>效果</h4> <p>在mobilenet论文原文中也是给出了在不同α值的情况下,模型在ImageNet数据集上的准确率、参数量以及计算量。可以看到当α=0.75的时候,网络变薄了,虽然准确性相比原始的mobilenet模型降低了两个百分点,但是所需的参数量和计算量比原始模型下降了1.5倍左右。 <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=26e92e78f7c62eee21398c16b8c9b125&amp;amp;file=file.png" alt="" /></p> <h3>分辨率超参数ρ</h3> <p><strong>分辨率超参数</strong>ρ用来减少每一层输出的特征图大小的,通过减小特征图的分辨率来降低模型所需要的计算量。</p> <h4>方法</h4> <p>ρ负责控制输入图像的尺寸,间接控制中间层feature map的大小。输入的尺寸大,中间层的feature map就大,feature map大卷积的次数就会变多,次数变多运算量变大。所以控制尺寸,就能减少计算量。可以看到添加了宽度乘数和分辨率超参数之后的计算量公式更新为: <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=3de40e835c3caec6c1985ce71f2a10dd&amp;amp;file=file.png" alt="" /> 那么经过宽度乘数以及分辨率超参数后的一层卷积的计算量相较于普通卷积的计算量的比例会变成如图所示,相较于原始模型计算量又变小了: <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=3025f5a4c91e4aa8fc0c486af78b6c30&amp;amp;file=file.png" alt="" /></p> <h4>效果</h4> <p>在论文中给出了标准卷积、深度可分离卷积以及添加了两种超参数深度可分离卷积的参数量对比的例子,在这个例子中输入的feature map尺寸为14x14x512,卷积核大小为3x3x512x512,参数量和计算量如下图: <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=8e3ff97d76841f01da52c19decaa6321&amp;amp;file=file.jpg" alt="" /> <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=b0a4e034b8de22eea525556d6f9d46fa&amp;amp;file=file.jpg" alt="" /> 根据上面的计算,可以看出在加上两个超参数后的深度可分离卷积的参数量和计算量都<strong>大大降低</strong>。</p> <h2>参考文献</h2> <p>1、论文原文:<a href="https://arxiv.org/abs/1704.04861">https://arxiv.org/abs/1704.04861</a> 2、项目地址:<a href="https://github.com/Zehaos/MobileNet">https://github.com/Zehaos/MobileNet</a> 3、哔哩哔哩视频:<a href="https://www.bilibili.com/video/BV1yE411p7L7/?spm_id_from=333.880.my_history.page.click">https://www.bilibili.com/video/BV1yE411p7L7/?spm_id_from=333.880.my_history.page.click</a></p>

页面列表

ITEM_HTML