【语义分割】Deeplabv3源码解读


最近在做的一个比赛,用到了Deeplabv3,顺便看了一下源码,记录一下。

预备知识

本文提到的output_stride来源于deeplabv3论文,指的是(输入图像的分辨率/特征图的分辨率),可以看出,output_stride越大,说明特征图越小,越高层。

ResNet50

ResNet50包括一个Init Block和四个stage,以及最后的Avgpool和fc。下采样了32倍。(一般的分类网络都是下采样32倍)

1. Init Block

由1个7×7的卷积层+一个maxpooling层组成,其中卷积层的stride为2,max pooling的stride=2,因此经过Init block后的输出尺寸降了4倍。 Init Block输出为64通道。

2. stage1-4

stage1-4的残差块个数依次为[3,4,6,4]

  • stage1
    stage1由三个unit(残差单元)构成,都是1×1或3×3的小卷积,且stride都为1,因此经过stage1后的输出尺寸相对于原图还是降了4倍(与Init block的输出尺寸相同),stage1输出为256通道。
  • stage2
    stage2由四个unit组成,其中unit1的3×3卷积核stride为2,因此,经过stage2后的输出尺寸相对于原图降了8倍,stage2输出为512通道。
  • stage3
    stage3由六个unit组成,其中unit1的3×3卷积核stride为
根据提供的引用内容,DeepLabv3是一个基于PyTorch框架的语义分割网络,它是在resnet101基础网络的基础上进行复现的。DeepLabv3源码包括以下几个部分: 1. ASPP模块:ASPP模块是DeepLabv3中的一个重要组成部分,它用于捕捉不同尺度的上下文信息。ASPP模块包括多个并行的空洞卷积层,每个卷积层具有不同的空洞率,以捕捉不同尺度的上下文信息。 2. Final_block:Final_block是DeepLabv3中的最后一个模块,它接收ASPP模块的输出作为输入,并生成num_class张分割掩码结果图。Final_block包含两个卷积层和一个上采样操作。第一个卷积层是一个3×3卷积,用于进行特征图的拼接操作。第二个卷积层是一个1×1卷积,用于改变输出通道数为num_class。最后,使用双线性插值的方式将num_class张特征图插值到输入图片的尺寸,实现输出结果的上采样。 3. 插值法:在DeepLabv3中,使用双线性插值的方式将特征图插值到输入图片的尺寸。双线性插值是一种常用的图像插值方法,它通过对周围像素的加权平均来计算新像素的值,从而实现图像的缩放或上采样。 4. aux_block分支:aux_block是DeepLabv3中的一个辅助分支,用于提供额外的监督信号。它通常在训练过程中使用,可以帮助网络更好地学习特征表示。关于aux_block分支的具体实现细节在提供的引用中没有给出。 由于没有提供具体的源码,无法给出完整的DeepLabv3源码。但是,根据提供的信息,你可以根据DeepLabv3的论文或其他开源实现来查找完整的源码
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值