结合代码聊聊重参数化ACNet与DBBNet

本文旨在介绍ACNet和DBBNet的原理,并提供PyTorch实现代码。ACNet通过3x3, 1x3和3x1并行卷积提升模型参数量和鲁棒性,训练完成后可直接融合。DBBNet则是ACNet的升级版,增加参数化范围。文中提供代码示例,帮助读者将其应用于实际项目。" 5551609,682984,C# 数据库操作:删除、修改与刷新实践,"['数据库', 'C#编程', 'GUI开发', '数据处理']
摘要由CSDN通过智能技术生成

讲在前面的话:

这篇文章的目的是两点,首先还是一样的介绍下ACNet与DBBNet的涨点原理,另外现在的网上的教程在代码方面,如何与自己的工程如何集成讲的比较少,需要读者自己去抠,对于初学者不太友好。这里不仅讲原理,还把代码抠出来,讲一讲,然后开箱即用。

首先来看ACNet的原理如下图所示:

模型首先在训练阶段将3x3的卷积核增加为3x3 , 1x3 和 3x1的并行三个卷积核,同时1x3和 3x1 是以原有3x3卷积核的中心展开,这样的好处是首先整个模型的参数量变大了,能够从直观上拟合更多的信息,微观上这种中心对称的非对称卷积核,可以在图像翻转这一类的图像处理中取得更好的鲁棒性。

随后模型训练完成后,3x3的卷积核能够与1x3以及3x1卷积核直接融合,并且不改变相关结果,因为这个乘累加过程是线性的。感兴趣的同学可以去推导一下。推导过程如下图所示:

有相关问题搜索知识星球号:1453755 【CV老司机】加入星球提问。扫码也可加入:

也可以搜索关注微信公众号: CV老司机

  相关代码和详细资源或者相关问题,可联系牛先生小猪wx号: jishudashou

原理的点很少,同时在实际的使用中要嫁接到自己的代码中,也十分的方便。其实现代码如下:

import torch.nn as nn
import torch.nn.init as init
import torch

class ACBlock(nn.Module):

    def __init__(self, in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, padding_mode='zeros', deploy=False,
                 use_affine=True, reduce_gamma=False, gamma_init=None ):
        super(ACBlock, self).__init__()
        self.deploy = deploy
        if deploy:
        
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值