MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

it2024-10-28  8

【常规convolutions】

定义输入feature map尺寸为 D F × D F × M D_F\times D_F\times M DF×DF×M,输出feature map尺寸为 D F × D F × N D_F\times D_F\times N DF×DF×N,假设卷积前后空间维度不变,通道数由 M M M变为 N N N

定义卷积核为 N N N D K × D K × M D_K\times D_K\times M DK×DK×M

常规卷积的计算量为 N ⏟ N 个 ⋅ D K ⋅ D K ⋅ M ⏟ 一个位置上卷积 ⋅ D F ⋅ D F ⏟ 遍历所有位置 \underbrace{N}_{N个}\cdot\underbrace{D_K\cdot D_K\cdot M}_{\text{一个位置上卷积}}\cdot\underbrace{D_F\cdot D_F}_{\text{遍历所有位置}} N N一个位置上卷积 DKDKM遍历所有位置 DFDF

【depthwise separable convolutions】

depthwise separable convolutions的思想是首先孤立 M M M个channel,各个channel自己做卷积,然后使用conv1x1联系 M M M个channel,输出 N N N个channel

第一步,depthwise convolution 因为把每个channel独立开来,所以看作 M M M D F × D F × 1 D_F\times D_F\times 1 DF×DF×1,那么卷积核的尺寸一定是 M M M D K × D K × 1 D_K\times D_K\times 1 DK×DK×1,这一步的结果为 D F × D F × M D_F\times D_F\times M DF×DF×M 这一步的计算量为 M ⏟ M 个 ⋅ D K ⋅ D K ⋅ 1 ⏟ 一个位置上卷积 ⋅ D F ⋅ D F ⏟ 遍历所有位置 \underbrace{M}_{M个}\cdot\underbrace{D_K\cdot D_K\cdot 1}_{\text{一个位置上卷积}}\cdot\underbrace{D_F\cdot D_F}_{\text{遍历所有位置}} M M一个位置上卷积 DKDK1遍历所有位置 DFDF

第二步,pointwise convolution 利用conv1x1改变通道数,那么卷积核的尺寸为 N N N 1 × 1 × M 1\times1\times M 1×1×M 这一步的计算量为 N ⏟ N 个 ⋅ 1 ⋅ 1 ⋅ M ⏟ 一个位置上卷积 ⋅ D F ⋅ D F ⏟ 遍历所有位置 \underbrace{N}_{N个}\cdot\underbrace{1\cdot1\cdot M}_{\text{一个位置上卷积}}\cdot\underbrace{D_F\cdot D_F}_{\text{遍历所有位置}} N N一个位置上卷积 11M遍历所有位置 DFDF

故整个的计算量为 D K ⋅ D K ⋅ M ⋅ D F ⋅ D F + M ⋅ N ⋅ D F ⋅ D F ( 5 ) = D F ⋅ D F ⋅ M ⋅ ( D K ⋅ D K + N ) \begin{aligned} &D_K\cdot D_K\cdot M\cdot D_F\cdot D_F + M\cdot N \cdot D_F\cdot D_F \qquad(5) \\ &=D_F\cdot D_F\cdot M\cdot(D_K\cdot D_K + N) \end{aligned} DKDKMDFDF+MNDFDF(5)=DFDFM(DKDK+N)

【MobileNet Architecture】

常规的网络有Conv3x3-BN-ReLU模块,在MobileNet中修改如下

(N, C, H, W) 【Depthwise Conv3x3】 【BN + ReLU】 (N, C, H, W) 【Conv1x1 C→C】 【BN + ReLU】 (N, C, H, W)

若要实现空间维度减半,channel翻倍,则为

(N, C, H, W) 【Depthwise Conv3x3, s=2, p=1】 【BN + ReLU】 (N, C, H/2, W/2) 【Conv1x1 C→2C】 【BN + ReLU】 (N, 2C, H/2, W/2)

MobileNet结构

(N, 3, 224, 224) 【Conv3x3 332 s=2 p=1】 【BN + ReLU】 (N, 32, 112, 112) 【Conv3x3 dw s=1 p=0】(第1组,通道3264) 【BN + ReLU】 (N, 32, 112, 112) 【Conv1x1 3264 s=1 p=0】 【BN + ReLU】 (N, 64, 112, 112) 【Conv3x3 dw s=2 p=1】(第2组,通道加倍,空间减半) 【BN + ReLU】 (N, 64, 56, 56) 【Conv1x1 64128 s=1 p=0】 【BN + ReLU】 (N, 128, 56, 56) 【Conv3x3 dw s=1 p=0】(第3组,残差) 【BN + ReLU】 (N, 128, 56, 56) 【Conv1x1 128128 s=1 p=0】 【BN + ReLU】 (N, 128, 56, 56) 【Conv3x3 dw s=2 p=1】(第4组,通道加倍,空间减半) 【BN + ReLU】 (N, 128, 28, 28) 【Conv1x1 128256 s=1 p=0】 【BN + ReLU】 (N, 256, 28, 28) Conv3x3 dw s=1 p=0】(第5组,残差) 【BN + ReLU】 (N, 256, 28, 28) 【Conv1x1 256256 s=1 p=0】 【BN + ReLU】 (N, 256, 28, 28) 【Conv3x3 dw s=2 p=1】(第6组,通道加倍,空间减半) 【BN + ReLU】 (N, 256, 14, 14) 【Conv1x1 256512 s=1 p=0】 【BN + ReLU】 (N, 512, 14, 14) Conv3x3 dw s=1 p=0】(第7组,残差,重复5次) 【BN + ReLU】 (N, 512, 14, 14) 【Conv1x1 512512 s=1 p=0】 【BN + ReLU】 (N, 512, 14, 14) 【Conv3x3 dw s=2 p=1】(第8组,通道加倍,空间减半) 【BN + ReLU】 (N, 512, 7, 7) 【Conv1x1 5121024 s=1 p=0】 【BN + ReLU】 (N, 1024, 7, 7) 【Global AvgPool】 (N, 1024, 1, 1)(N, 1024) 【Linear 10241000】 【Softmax】 (N, 1000)

缩放参数

设置width multiplier α \alpha α表示对通道数进行缩减 当 α = 1 \alpha=1 α=1时,通道数3→32→64→128→256→512→1024 当 α = 0.75 \alpha=0.75 α=0.75时,通道数3→24→48→96→192→384→768 当 α = 0.5 \alpha=0.5 α=0.5时,通道数3→16→32→64→128→256→512 当 α = 0.25 \alpha=0.25 α=0.25时,通道数3→8→16→32→64→128→256

设置resolution multiplier ρ \rho ρ ρ = 1 \rho=1 ρ=1时,空间尺寸224→112→56→28→14→7 当 ρ = 6 / 7 \rho=6/7 ρ=6/7时,空间尺寸192→96→48→24→12→6 当 ρ = 5 / 7 \rho=5/7 ρ=5/7时,空间尺寸160→80→40→20→10→5 当 ρ = 4 / 7 \rho=4/7 ρ=4/7时,空间尺寸128→64→32→16→8→4

Table 6和7给出了不同 α \alpha α ρ \rho ρ的实验结果

最新回复(0)