论文地址:https://arxiv.org/abs/1803.06815v2
论文代码:https://github.com/murufeng/awesome_lightweight_networks/blob/main/light_cnns/ESPNet/espnetv1.py
ESPNet是用于语义分割的轻量级网络,主要思想基于传统卷积模块设计,提出一种高效空间金字塔卷积模块(ESP Module),该模块包含point-wise卷积和空洞卷积金字塔,有助于减小模型运算量和内存、功率消耗,以提高在终端设备上的适用性。综合比较,ESPNet能在GPU/笔记本/终端设备上达到112FPS/21FPS/9FPS。
ESP模块将标准卷积分解成point-wise卷积和空洞卷积金字塔(spatial pyramid of dilated convolutions),point-wise卷积将输入映射到低维特征空间,空洞卷积金字塔使用K组空洞卷积的同时下采样得到低维特征,每个空洞卷积的dilation rate为。这种分解方法能够大量减少ESP模块的参数量和内存,并且保持较大的有效感受域。
网络架构如下:
代码实现如下:
import torch
from light_cnns import espnetv1
model = espnetv1()
model.eval()
print(model)
input = torch.randn(1, 3, 224, 224)
y = model(input)
print(y.size())
论文地址:https://arxiv.org/abs/1811.11431
论文代码:https://github.com/murufeng/awesome_lightweight_networks/blob/main/light_cnns/ESPNet/espnetv2.py
ESPNetv2主要基于ESPNetv1进行了模型轻量化处理,主要包括:
基于深度可分离空洞卷积以及分组point-wise卷积改进ESP模块,提出了EESP(Extremely Efficient Spatial Pyramid)模块。相对于ESPNet拥有更好的精度以及更少的参数。
设计了cyclic learning rate scheduler,比一般的固定学习率的scheduler要好。
其中下采样版本的EESP模块(Strided EESP with shortcut connection to an input image),主要改进如下:
修改深度可分离空洞卷积为stride=2的版本。为模块原本的shortcut添加平均池化操作。
将element-wise相加操作替换为concate操作,这样能增加输出的特征维度。
为防止随着下采样产生的信息丢失,添加一条连接输入图像的shortcut,该路径使用多个池化操作来使其空间大小与模块输出的特征图一致,然后使用两个卷积来提取特征并调整维度,最后进行element-wise相加。
网络架构如下:
代码实现如下:
import torch
from light_cnns import espnetv2
model = espnetv2()
model.eval()
print(model)
input = torch.randn(1, 3, 224, 224)
y = model(input)
print(y.size())
后续将持续更新模型轻量化处理的一系列方法,包括:剪枝,量化,知识蒸馏等等,欢迎大家Star和Follow
(欢迎各位轻量级网络科研学者将自己工作的核心代码整理到本项目中,推动科研社区的发展,我们会在readme中注明代码的作者~)
长按识别,邀请您进群!