ENet

Table of Contents

1. ENet

https://arxiv.org/pdf/1606.02147.pdf 2016/06

https://github.com/TimoSaemann/ENet

ENet 是一个注重推理速度的 semantic segmentation 模型

ENet 做为一个 semantic segmentation 模型, 基本就是一个标准的 encoder-decoder 结构, 并且参考了 ResNetInception 的设计

1.1. Network

enet.png

假设网络的输入为 512x512.

1.1.1. initial

enet_initial.png

输入数据为 (3, 512, 512), 通过 initial 层后变为 (16, 256, 256), 这里没有直接做 pooling 而是参考了 inception 的 Efficient Grid Size Reduction

1.1.2. bottleneck

bottleneck 类似于 resnet 的 bottleneck 结构, 做了一点修改:

bottleneck 可以有不同的 type:

  1. downsampling

    bottleneck 第一个 1x1 conv2 变成 2x2, stride=2, 且左边分支加上一个 maxpooling, 用来做一个 2x 的 downsample, 这种结构和 initial 的并行 pooling 结构类似

  2. dilated

    bottleneck 中间的 conv 变成 Dilated Conv2D

  3. asymmetric

    bottleneck 中间的 conv 变成 Asymmetric Conv, 例如 5x5 kernel 变 5x1 和 1x5 两个kernel, 在保持 receptive field 大小不变的基础上降低了计算量. 参考了 inception

  4. upsampling

    和 downsampling 相反: bottleneck 中间的 conv 变成 Deconv2D, 同时左边分支加一个 max_unpooling

1.2. Upsample

upsamle 主要有四种方法:

  1. interpolation
  2. deconv
  3. unpooling

    unpooling 是对原值重复或补零,以填充出更多数据, 例如 keras 的 UpSampling2D 就是通过重复来做 upsample

  4. max unpooling

    如果前面是通过 max pooling 做的 downsample, 则后面可以用 max unpooling 做 upsample, 它与普通 unpooling 的区别是它会利用之前做 max pooling 时的索引

    max_unpooling.png

Backlinks

Deconv2D (CNN > Deconv2D): Deconv2D 是一种 Upsample 的手段, 被用在大部分 Semantic Segmentation 模型中

ICNet (ICNet > Network > train): 1. 第一层 1/4 scale 的图片输出为 1/32, 在 CFF 层经过 2x upsample 与 1/16 的 label 计算 loss

PSPNet (PSPNet > Network > pyramid pooling module): 3. 把每个 1x1 conv 的输出做 upsample 变成和 backbone 相同的输出尺寸, 然后和 backbone concat

Backlinks

ICNet (ICNet): icenet 是一个 semantic segmentation 模型, 和 ENet 一样注重推理速度.

Semantic Segmentation (Semantic Segmentation > ENet): ENet

Author: [email protected]
Date: 2022-01-19 Wed 00:00
Last updated: 2024-09-02 Mon 10:39

知识共享许可协议