SegNet论文理解

SegNet-Turioal 包括prototxt等

SegNet的caffe源码

 

本文也用了vgg16的结构改造的,和U-Net对比,U-Net没有用到conv5和pool5,但是SegNet用到了所有预训练的卷积层权重。

当时现有的semantic segmentation的问题在于:最大池化和下采样会降低feature map的分辨率。

因而SegNet的新颖之处在于decoder上采样方式:decoder时上采样使用了encoder阶段下采样的最大池化的索引(indices),考虑到上采样是稀疏的,再配合滤波器产生最后的分割图。SegNet的这种方法将低分辨率的feature map映射到高分辨率的方法,从而产生精确边界的分割结果。

网络设计:

1.在encoder和decoder的卷积层后都用了BN层;

2.所有的卷积层都没有偏置;

3.decoder网络没有ReLU。

4.encoder部分使用vgg16的前13层

5.decoder对应encoder的每一层,decoder的上采样使用的是encoder时候下采样的索引

  • 优点1:改善边界描述
  • 减少end2end的训练参数
  • 这种形式可以用于多种encoder-decoder架构

网络结构:

编码网络:由13个卷基层组成,该部分提取输入特征,用于目标分类。丢弃FC层,为了保持更高的分辨率,同时减小参数。

解码网络:每个encoder会对应一个decoder,所以decoder有13层,将低分辨率的feature map映射回和输入一样大小的分类器(mask)

像素分类器:decoder的输出会送到分类层,最终为每个像素独立的产生类别概率。

和原始的vgg的区别是,本文encoder使用的卷积层是Conv+BN+ReLU,而原vgg16使用的为Conv+ReLU。decoder网络没有ReLU,decoder的block由Upsampling+Conv+BN组成。

分类层是decoder加一个卷积层,卷积和的个数为分类的通道数,每个通道代表每一类分割结果。

感受野的计算公式:RF_{n}=((RF_{n-1}-1)*stride)+fsize,RF是感受野,fsize是kernel的size,

Training:

使用固定学习率0.1和动量0.9的随机梯度下降(SGD),使用Caffe实现SegNet-Basic。在每个epoch之前都shuffle一次,然后按顺序构成minibatch(batchsize=12),从而确保每个图像在一个epoch中只被使用一次。使用交叉熵损失。

可以大概看到SegNet的结构:

layer {
  name: "upsample4"
  type: "Upsample"
  bottom: "conv5_1_D"
  top: "pool4_D"
  bottom: "pool4_mask"
  upsample_param {
    scale: 2
  }
}

在upsample层可以看到,其输入是有两个,输出有一个。其中第二个输入,即bottom[1]是用来存储mask信息的,根据存储的mask的idx信息,恢复成top的输出。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值