ESPNet系列:自动驾驶领域轻量级分割模型

点击上方,选择星标置顶,不定期资源大放送a9e74cd6de8560cfe9bb682b1849b9cd.png

阅读大概需要5分钟e2f90792461acba6717038811e65b7d9.png

Follow小博主,每天更新前沿干货1c15552e2e69871425762d6eb0a498eb.png

ESPNet: Efficient Spatial Pyramid of Dilated Convolutions for Semantic Segmentation

ESPNet系列:自动驾驶领域轻量级分割模型_第1张图片
  • 论文地址: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。

主要做法:ESPNet系列:自动驾驶领域轻量级分割模型_第2张图片

ESP模块将标准卷积分解成point-wise卷积和空洞卷积金字塔(spatial pyramid of dilated convolutions),point-wise卷积将输入映射到低维特征空间,空洞卷积金字塔使用K组空洞卷积的同时下采样得到低维特征,每个空洞卷积的dilation rate为。这种分解方法能够大量减少ESP模块的参数量和内存,并且保持较大的有效感受域。

网络架构如下:

ESPNet系列:自动驾驶领域轻量级分割模型_第3张图片 ESPNet系列:自动驾驶领域轻量级分割模型_第4张图片

代码实现如下:

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())

ESPNetv2: A Light-weight, Power Efficient, and General Purpose Convolutional Neural Network

ESPNet系列:自动驾驶领域轻量级分割模型_第5张图片
  • 论文地址:https://arxiv.org/abs/1811.11431

  • 论文代码:https://github.com/murufeng/awesome_lightweight_networks/blob/main/light_cnns/ESPNet/espnetv2.py

ESPNetv2主要基于ESPNetv1进行了模型轻量化处理,主要包括:

  1. 基于深度可分离空洞卷积以及分组point-wise卷积改进ESP模块,提出了EESP(Extremely Efficient Spatial Pyramid)模块。相对于ESPNet拥有更好的精度以及更少的参数。

  2. 设计了cyclic learning rate scheduler,比一般的固定学习率的scheduler要好。

ESPNet系列:自动驾驶领域轻量级分割模型_第6张图片

其中下采样版本的EESP模块(Strided EESP with shortcut connection to an input image),主要改进如下:

  1. 修改深度可分离空洞卷积为stride=2的版本。为模块原本的shortcut添加平均池化操作。

  2. 将element-wise相加操作替换为concate操作,这样能增加输出的特征维度。

  3. 为防止随着下采样产生的信息丢失,添加一条连接输入图像的shortcut,该路径使用多个池化操作来使其空间大小与模块输出的特征图一致,然后使用两个卷积来提取特征并调整维度,最后进行element-wise相加。

ESPNet系列:自动驾驶领域轻量级分割模型_第7张图片

网络架构如下:

ESPNet系列:自动驾驶领域轻量级分割模型_第8张图片

代码实现如下:

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

Github地址:https://github.com/murufeng/awesome_lightweight_networks

(欢迎各位轻量级网络科研学者将自己工作的核心代码整理到本项目中,推动科研社区的发展,我们会在readme中注明代码的作者~)

ESPNet系列:自动驾驶领域轻量级分割模型_第9张图片

 长按识别,邀请您进群!

你可能感兴趣的:(深度学习,人工智能,机器学习,python,计算机视觉)