HRNet解析

HRNet通过并行融合多个尺度特征图信息提升网络性能,适用于目标检测和姿势估计等任务。网络包含多分支,分支间通过上采样和下采样进行信息交互。代码分析展示了残差块构造、HRNet主要网络构造,包括分支的创建和融合操作。
摘要由CSDN通过智能技术生成

前 言

大多数网络都是由较高的分辨率特征图开始,通过步长为2的卷积块,甚至是池化操作,来逐渐缩小特征图大小,丰富各个通道的信息,最后再通过一个全局池化,输出通道信息。于是HRNet的作者就在思考能否通过并行,来融合多个尺度特征图信息来提高网络的性能,事实上也证明了这种方法的有效。这篇SOTA的模型也常用于目标检测,姿势估计等复杂任务,且表现都十分不错

网络结构

在这里插入图片描述
这是论文里面的一幅图片,看上去十分清楚,整个网络有多个分支,经过一定卷积操作后,上面的分支通过下采样来缩小特征图大小,融合进下面的分支,而下面的分支则通过上采样来恢复原特征图大小,融合进上面的分支

这里上采样模块,作者使用的是最近邻元素填充的方式

代码分析

作者已经开源了该代码
https://github.com/leoxiaobin/deep-high-resolution-net.pytorch/blob/master/lib/models/pose_hrnet.py

残差块构造

网络中的卷积操作,还是以残差块的思想,所以开头两段module是残差块的构造,包含基本块和bottleneck块

在这里插入图片描述

class BasicBlock(nn.Module):
    """
    基本块构造
    """
    expansion = 1

    def __init__(self, inplanes, planes, stride=1, downsample=None):
        super(BasicBlock, self).__init__()
        self.conv1 = conv3x3(inplanes, planes, stride)
        self.bn1 = nn.BatchNorm2d(planes, momentum=BN_MOMENTUM)
        self.relu = nn.ReLU(inplace=True) # 使用inplace直接代替原先计算的值,减少内存消耗
        self.conv2 = conv3x3(planes, planes)
        self.bn2 = nn.BatchNorm2d(planes, momentum=BN_MOMENTUM)
        self.downsample = downsample
        self.stride = stride

    def forward(self, x):
        """
        构造残差连接
        :param x:
        :return:
        """
        residual = x
        out = self.conv1(x)
        out = self.bn1(out)
        out = self.relu(out)

        out = self.conv2(out)
        out = self.bn2(out)

        if self.downsample is not None:
            # 如果downsample不为None,则进行下采样
            residual = self.downsample(x)

        out += residual
        out = self.relu(out)

        return out

class Bottleneck(nn.Module):
    """
    残差块的bottleneck部分
    """
    expansion = 4

    def __init__(self, inplanes, planes, stride=1, downsample=None):
        super(Bottleneck, self).__init__()
        self.conv1 = nn.Conv2d(inplanes, planes, kernel_size=1, bi
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值