【深度学习】【语义分割】ASPP

【深度学习】【语义分割】ASPPASPP空洞空间卷积池化金字塔(atrousspatialpyramidpooling(ASPP))对所给定的输入以不同采样率的空洞卷积并行采样,相当于以多个比例捕捉图像的上下文。上图为deeplabv2的ASPP模块,deeplabv3中向ASPP中添加了BN层,其中空洞卷积的rate的意思是在普通卷积的基础上,相邻权重之间的间隔为rate-1,普通卷积的rate默认为1,所以…


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

ASPP

空洞空间卷积池化金字塔(atrous spatial pyramid pooling (ASPP))对所给定的输入以不同采样率的空洞卷积并行采样,相当于以多个比例捕捉图像的上下文。
deeplab v2的ASPP

上图为deeplab v2的ASPP模块,deeplabv3中向ASPP中添加了BN层,其中空洞卷积的rate的意思是在普通卷积的基础上,相邻权重之间的间隔为rate-1, 普通卷积的rate默认为1,所以空洞卷积的实际大小为 k + ( k − 1 ) ( r a t e − 1 ) k+(k-1)(rate-1) k+(k−1)(rate−1),其中k为原始卷积核大小。

输出大小如何计算?
在这里插入图片描述

问题:当rate接近feature map大小时, 3 × 3 3\times3 3×3滤波器不是捕获全图像上下文,而是退化为简单的 1 × 1 1\times1 1×1滤波器,只有滤波器中心起作用。

改进:Concat( 1 × 1 1\times 1 1×1卷积 , 3个 3 × 3 3\times 3 3×3空洞卷积 +,pooled image feature)并且每个卷积核都有256个且都有BN层。
在这里插入图片描述

#without bn version
class ASPP(nn.Module):
    def __init__(self, in_channel=512, depth=256):
        super(ASPP,self).__init__()
        self.mean = nn.AdaptiveAvgPool2d((1, 1)) #(1,1)means ouput_dim
        self.conv = nn.Conv2d(in_channel, depth, 1, 1)
        self.atrous_block1 = nn.Conv2d(in_channel, depth, 1, 1)
        self.atrous_block6 = nn.Conv2d(in_channel, depth, 3, 1, padding=6, dilation=6)
        self.atrous_block12 = nn.Conv2d(in_channel, depth, 3, 1, padding=12, dilation=12)
        self.atrous_block18 = nn.Conv2d(in_channel, depth, 3, 1, padding=18, dilation=18)
        self.conv_1x1_output = nn.Conv2d(depth * 5, depth, 1, 1)
 
    def forward(self, x):
        size = x.shape[2:]
 
        image_features = self.mean(x)
        image_features = self.conv(image_features)
        image_features = F.upsample(image_features, size=size, mode='bilinear')
 
        atrous_block1 = self.atrous_block1(x)
        atrous_block6 = self.atrous_block6(x)
        atrous_block12 = self.atrous_block12(x)
        atrous_block18 = self.atrous_block18(x)
 
        net = self.conv_1x1_output(torch.cat([image_features, atrous_block1, atrous_block6,
                                              atrous_block12, atrous_block18], dim=1))
        return net

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/171645.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 常用的英文单词2000

    常用的英文单词2000常用的英文单词,可以ctrl+f来查找需要的单词,查找需要的前缀后缀引导的单词1a[ei,ə]art.一(个);任何一(个);每一(个)2I[ai]pron.我3ability[əbiliti]n.能力,本领;才能,才智4able[eibəl]a.能够…的,得以…的;有才干的5about[əbaut]prep.关于;在…周围ad.大约;在附近6ab…

    2022年6月23日
  • Java Serialized 序列化 作用

    今天在看设计模式时,看到迪米特法则时,有一点,谨慎使用Serialized:一个项目中使用远程方法调用方式传递一个VO(值对象),这个对象就必须实现Serialized接口,也就是把需要网络传输的对象进行序列化,否则会出现NotSerialiableException异常。若VO修改了一个属性的权限,由private改为public访问权限变大了,如果服务器上没有做出相应的变更,就会报…

    2022年4月4日
  • 关于easy的短语(facemock框架)

    作为一个月薪3000的屌丝民工,今天也开始写自己的微博了,打发一下dota之外的时光。写了一年的flex,虽然很是熟练,但是有啥用呢。新版flash的普及上不去,旧版的渲染太慢。还是改行好了。最近开始研究有啥好的东西,之前看了一下unity3d,但是发现自己得先去学3dmax,可是看了3dmax发现高手实在太多了。要学好也不知道要多久,况且自己的美术功底实在太差。专研一下后台吧,发现自己编码解码不

    2022年4月12日
  • 基础工具之消息队列、线程池、缓冲区抽象、事件循环和日志实现

    正所谓“工欲善其事,必先利其器”,我们在实现通信设计任务的过程中需要一些基础工具来帮助我们搭建部分基础组件,这些基础工具包括消息队列,线程池,缓冲区抽象,事件循环和日志工具。接下来对这部分基础工具进

    2021年12月28日
  • 地表最强app官网ios_地表最强app下载

    地表最强app官网ios_地表最强app下载1.全历史当你村里的二大爷,国外回来的Uncle刘想要和你交流交流历史时,没关系,查看这个App。从生命起源到现代文明,从东亚到北美洲,从政权到经济,从军事到民生,保证让你上知天文,下知地理,聊得你二大爷也很蒙圈。2.Canva朋友相聚怎么少的了拍照发朋友圈!Canva提供朋友圈拍照模板以及各种特效,可爱的,青春的,春节气氛的,统统都有。万一结个婚呢,还可以在上面做贺卡。3.美丽修行…

    2022年8月22日
  • Vue2.0的三种常用传值方式、父传子、子传父、非父子组件传值

    Vue2.0的三种常用传值方式、父传子、子传父、非父子组件传值Vue2.0传值方式:在Vue的框架开发的项目过程中,经常会用到组件来管理不同的功能,有一些公共的组件会被提取出来。这时必然会产生一些疑问和需求?比如一个组件调用另一个组件作为自己的子组件,那么我们如何进行给子组件进行传值呢?如果是电商网站系统的开发,还会涉及到购物车的选项,这时候就会涉及到非父子组件传值的情况。当然你也可以用Vuex状态管理工具来实现,这部分我们后续会单独介绍。先给大家介绍Vue常见的三种传值方式

    2022年5月13日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号