(ML) SqueezeNet
Fire Module 由 squeeze與 expand 所組成,以下為 SqueezeNet 中所提出的 Fire module 架構
s1x1 = 3, e1x1 = 4, e3x3 = 4
論文中給出的建議是 s1x1 < e1x1 + e3x3
SqueezeNet 使用了三個策略
- 使用 1x1 filters 替換成 3x3 filters
- 減少 3x3 filters 的數量,也就是降低 channel 數量
- 在網絡後期進行 downsampling (下採樣),使卷積層具有較大的 activation map (激活圖)
Fire Module 的步驟如下
- input tensor 透過 1x1 conv 降維
- 再來各別使用 1x1 conv 和 3x3 conv 進行特徵提取
- 最後再將通過 1x1 conv 與 3x3 conv 後的 output 做 concatenate
class Fire(nn.Module):
def __init__(self, inplanes: int, squeeze_planes: int, expand1x1_planes: int, expand3x3_planes: int) -> None:
super().__init__()
self.inplanes = inplanes
self.squeeze = nn.Conv2d(inplanes, squeeze_planes, kernel_size=1)
self.squeeze_activation = nn.ReLU(inplace=True)
self.expand1x1 = nn.Conv2d(squeeze_planes, expand1x1_planes, kernel_size=1)
self.expand1x1_activation = nn.ReLU(inplace=True)
self.expand3x3 = nn.Conv2d(squeeze_planes, expand3x3_planes, kernel_size=3, padding=1)
self.expand3x3_activation = nn.ReLU(inplace=True)
def forward(self, x: torch.Tensor) -> torch.Tensor:
x = self.squeeze_activation(self.squeeze(x))
return torch.cat(
[self.expand1x1_activation(self.expand1x1(x)), self.expand3x3_activation(self.expand3x3(x))], 1
)
Activation function : ReLU
Macroarchitectural view of our SqueezeNet architecture
左圖:沒有加入 short-cut 的 SqueezeNet
中間:加入 short-cut 的 SqueezeNet + simple bypass
右圖:加入 short-cut 的 SqueezeNet + complex bypass,由於跨接 channel 數不同,必須使用 1x1 conv 完成升維,使 channel 數一致
SqueezeNet architectural dimensions
Comparing SqueezeNet to model compression approaches
與 AlexNet 相比,SqueezeNet 模型的大小已經小於整整 50 倍,同時接近或超過於 AlexNet 的性能,透過 8 bit 與 6 bit 量化的深度壓縮技巧,能夠讓 SqueezeNet 得到了比 32 bit AlexNet 小 363 及 510 倍的模型,而精度與 AlexNet 相當
Hyperparameters
Squeeze Ratio
將 SR (Squeeze Ratio) 增加到 0.125 以上可以進一步將 ImageNet top-5 精度從 4.8MB 模型的 80.3%(即 AlexNet 級別)提高到 86.0% 19MB 型號。 精度穩定在 86.0%,SR=0.75(一個 19MB 模型),設置 SR=1.0 進一步增加了模型大小,但精度沒有提高。
Percentage of 3x3 filters
使用 50% 的 3x3 過濾器時,top-5 準確率穩定在 85.6%,進一步增加 3x3 過濾器的百分比會導致更大的模型尺寸,但在 ImageNet 上沒有提高準確率。
SqueezeNet accuracy and model size using different macroarchitecture configurations
比較三個提出的 SqueezeNet 可以發現,採用 short-cut 架構的網路,能夠得到更好的性能提升,但是加上了更加複雜的 short-cut 架構,也許會多少降低一些性能表現
Conclusion
本文介紹了一種新的卷積神經網絡架構 SqueezeNet,其參數比 AlexNet 少 50 倍,但在 ImageNet 上保持了與 AlexNet 相當的準確性。此外,作者還將 SqueezeNet 壓縮到小於 0.5MB,比未壓縮的 AlexNet 小 510 倍,同時保持了基線精度。作者提出了一種稱為密集-稀疏-密集 (DSD) 的新方法,將模型壓縮作為正則化器,以進一步提高精度。總的來說,這篇論文提出了一種新的卷積神經網絡架構,可以在保持精度的同時極大地減小模型的大小,並提供了一種新的模型壓縮方法,可以進一步提高模型精度