[深度学习从入门到女装]PSPNet

论文地址:Pyramid Scene Parsing Network

网络结果如上图所示,主体网络由ResNet101构成,使用了残差网络、空洞卷积和降维卷积的方法(先使用1*1降低维度,然后使用3*3卷积,再用1*1恢复维度)。网络中一共出现三次特征图缩小,一次使用maxpool,两次使用conv,每次减少二分之一大小,最终得到的特征图是原尺寸的1/8,最后使用双线性插值恢复原尺寸。具体网络结构见下文源码分析

文章为了解决深层网络训练梯度传递难的问题,还提到了使用auxiliary loss,也就是训练的时候一共有两个loss,一个在res4b22层之后,一个在最后输出的地方,两个loss有不同的权重提供给反向传播进行训练

 

 

http://ethereon.github.io/netscope/#/editor 可以进行prototxt文件的在线可视化,推荐使用

PSPNet源码阅读 pspnet101_cityscapes_713.prototxt

输入数据为3*713*713(三通道图像尺寸为713*713)

conv1_1_3x3_s2:num_output: 64 pad: 1 kernel_size: 3 stride: 2 输出为64*357*357

conv1_2_3x3:num_output: 64 pad: 1 kernel_size: 3 stride: 1 输出为64*357*357

conv1_3_3x3:num_output: 128 pad: 1 kernel_size: 3 stride: 1 输出为128*357*357

pool1_3x3_s2:pool: MAX kernel_size: 3 stride: 2 pad: 1 输出为128*179*179

conv2_1:(conv2_1_1x1_reduce、conv2_1_3x3、conv2_1_1x1_increase) 输出为256*179*179

conv2_2:(同上都是使用1*1减小维度再用3*3卷积再用1*1恢复维度) 输出为256*179*179

conv2_3:(同上都是使用1*1减小维度再用3*3卷积再用1*1恢复维度) 输出为256*179*179

conv3_1:(同上都是使用1*1减小维度再用3*3卷积再用1*1恢复维度)pad: 1 kernel_size: 3 stride: 2 输出为512*90*90

conv3_2、conv3_3、conv3_4:(同上都是使用1*1减小维度再用3*3卷积再用1*1恢复维度) 输出为512*90*90

conv4_1(dila):(同上都是使用1*1减小维度再用3*3卷积再用1*1恢复维度)pad: 2 dilation: 2 kernel_size: 3 stride: 1 输出为1024*90*90

conv4_2....23(dila):(同上都是使用1*1减小维度再用3*3卷积再用1*1恢复维度)pad: 2 dilation: 2 kernel_size: 3 stride: 1 输出为1024*90*90

conv5_1(dila):(同上都是使用1*1减小维度再用3*3卷积再用1*1恢复维度)pad: 4 dilation: 4 kernel_size: 3 stride: 1 输出为2048*90*90

conv5_2(dila)、conv5_3(dila):(同上都是使用1*1减小维度再用3*3卷积再用1*1恢复维度)pad: 4 dilation: 4 kernel_size: 3 stride: 1 输出为2048*90*90

--------------------------------------------------

#特征图缩小90倍为1*1

输入为conv5_3(2048*90*90)

conv5_3_pool1:pool: AVE kernel_size: 90 stride: 90 输出为2048*1*1

conv5_3_pool1_conv:num_output: 512 kernel_size: 1 stride: 1 输出为512*1*1

conv5_3_pool1_interp(使用双线性插值恢复分辨率):height: 90 width: 90 输出为512*90*90

--------------------------------------------------

 

--------------------------------------------------

#特征图缩小45倍为2*2

输入为conv5_3(2048*90*90)

conv5_3_pool2:pool: AVE kernel_size: 45 stride: 45 输出为2048*2*2

conv5_3_pool2_conv:num_output: 512 kernel_size: 1 stride: 1 输出为512*2*2

conv5_3_pool2_interp(使用双线性插值恢复分辨率):height: 90 width: 90 输出为512*90*90

--------------------------------------------------

 

--------------------------------------------------

#特征图缩小30倍为3*3

输入为conv5_3(2048*90*90)

conv5_3_pool3:pool: AVE kernel_size: 30 stride: 30 输出为2048*3*3

conv5_3_pool3_conv:num_output: 512 kernel_size: 1 stride: 1 输出为512*3*3

conv5_3_pool3_interp(使用双线性插值恢复分辨率):height: 90 width: 90 输出为512*90*90

--------------------------------------------------

 

--------------------------------------------------

#特征图缩小15倍为6*6

输入为conv5_3(2048*90*90)

conv5_3_pool6:pool: AVE kernel_size: 15 stride: 15 输出为2048*6*6

conv5_3_pool6_conv:num_output: 512 kernel_size: 1 stride: 1 输出为512*6*6

conv5_3_pool6_interp(使用双线性插值恢复分辨率):height: 90 width: 90 输出为512*90*90

--------------------------------------------------

 

conv5_3_concat:conv5_3、conv5_3_pool6_interp、conv5_3_pool3_interp、conv5_3_pool2_interp、conv5_3_pool1_interp

将这五个特征图拼接在一起 输出为4096*90*90

conv5_4:num_output: 512 kernel_size: 3 stride: 1 pad: 1 输出为512*90*90

conv6:num_output: 19 kernel_size: 1 stride: 1 输出为19*90*90

conv6_interp(使用双线性差值恢复特征图分辨率):zoom_factor: 8 输出为19*720*720

-------------------------------------------------------------------------------------------------------

 

也就是说将conv5_3(2048*90*90)的特征图分别使用ave pooling压缩为1*1、2*2、3*3、6*6的特征图,随后对这些特征图再使用双线性插值恢复到90*90,然后再将这五个特征图(conv5_3、1*1、2*2、3*3、6*6的特征图)concat到一起,随后再进行类别输出,最后再恢复到原图像的分辨率

 

  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值