1.文章原文地址
SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation
2.文章摘要
语义分割具有非常广泛的应用,从场景理解、目标相互关系推断到自动驾驶。早期依赖于低水平视觉线索的方法已经快速的被流行的机器学习算法所取代。特别是最近的深度学习在手写数字识别、语音、图像中的分类和目标检测上取得巨大成功。如今有一个活跃的领域是语义分割(对每个像素进行归类)。然而,最近有一些方法直接采用了为图像分类而设计的网络结构来进行语义分割任务。虽然结果十分鼓舞人心,但还是比较粗糙。这首要的原因是最大池化和下采样减小了特征图的分辨率。我们设计SegNet的动机来自于分割任务需要将低分辨率的特征图映射到输入的分辨率并进行像素级分类,这个映射必须产生对准确边界定位有用的特征。
3.网络结构
4.Pytorch实现
1 import torch.nn as nn 2 import torch 3 4 class conv2DBatchNormRelu(nn.Module): 5 def __init__(self,in_channels,out_channels,kernel_size,stride,padding, 6 bias=True,dilation=1,is_batchnorm=True): 7 super(conv2DBatchNormRelu,self).__init__() 8 if is_batchnorm: 9 self.cbr_unit=nn.Sequential( 10 nn.Conv2d(in_channels,out_channels,kernel_size=kernel_size,stride=stride,padding=padding, 11 bias=bias,dilation=dilation), 12 nn.BatchNorm2d(out_channels), 13 nn.ReLU(inplace=True), 14 ) 15 else: 16 self.cbr_unit=nn.Sequential( 17 nn.Conv2d(in_channels, out_channels, kernel_size=kernel_size, stride=stride, padding=padding, 18 bias=bias, dilation=dilation), 19 nn.ReLU(inplace=