(ML) SqueezeNet

YEN HUNG CHENG
6 min readApr 2, 2023

--

Fire Module 由 squeeze與 expand 所組成,以下為 SqueezeNet 中所提出的 Fire module 架構

source

s1x1 = 3, e1x1 = 4, e3x3 = 4

論文中給出的建議是 s1x1 < e1x1 + e3x3

SqueezeNet 使用了三個策略

  1. 使用 1x1 filters 替換成 3x3 filters
  2. 減少 3x3 filters 的數量,也就是降低 channel 數量
  3. 在網絡後期進行 downsampling (下採樣),使卷積層具有較大的 activation map (激活圖)

Fire Module 的步驟如下

  1. input tensor 透過 1x1 conv 降維
  2. 再來各別使用 1x1 conv 和 3x3 conv 進行特徵提取
  3. 最後再將通過 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

source

左圖:沒有加入 short-cut 的 SqueezeNet

中間:加入 short-cut 的 SqueezeNet + simple bypass

右圖:加入 short-cut 的 SqueezeNet + complex bypass,由於跨接 channel 數不同,必須使用 1x1 conv 完成升維,使 channel 數一致

SqueezeNet architectural dimensions

source

Comparing SqueezeNet to model compression approaches

source

與 AlexNet 相比,SqueezeNet 模型的大小已經小於整整 50 倍,同時接近或超過於 AlexNet 的性能,透過 8 bit 與 6 bit 量化的深度壓縮技巧,能夠讓 SqueezeNet 得到了比 32 bit AlexNet 小 363 及 510 倍的模型,而精度與 AlexNet 相當

Hyperparameters

source

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

source

比較三個提出的 SqueezeNet 可以發現,採用 short-cut 架構的網路,能夠得到更好的性能提升,但是加上了更加複雜的 short-cut 架構,也許會多少降低一些性能表現

Conclusion

本文介紹了一種新的卷積神經網絡架構 SqueezeNet,其參數比 AlexNet 少 50 倍,但在 ImageNet 上保持了與 AlexNet 相當的準確性。此外,作者還將 SqueezeNet 壓縮到小於 0.5MB,比未壓縮的 AlexNet 小 510 倍,同時保持了基線精度。作者提出了一種稱為密集-稀疏-密集 (DSD) 的新方法,將模型壓縮作為正則化器,以進一步提高精度。總的來說,這篇論文提出了一種新的卷積神經網絡架構,可以在保持精度的同時極大地減小模型的大小,並提供了一種新的模型壓縮方法,可以進一步提高模型精度

GitHub

--

--