如何把SE,IBN融合到要生成resnet的bottleneck上?
- INB在类初始化时ibn=False可控的,IBN只存在每个block的第一个conv后,即浅层
- SE模块加在左分支上,相当于对生成的(1,256,56,56)特征加上一个通道注意力,这样的(1,256,56,56)特征效果更好
class SEBottleneck(nn.Module):
expansion = 4
def __init__(self, inplanes, planes, stride=1, downsample=None, ibn=False, reduction=16):
super(SEBottleneck, self).__init__()
self.conv1 = nn.Conv2d(inplanes, planes, kernel_size=1, bias=False)
if ibn:
self.bn1 = IBN(planes)
else:
self.bn1 = nn.BatchNorm2d(planes)
self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, stride=stride,
padding=1, bias=False)
self.bn2 = nn.BatchNorm2d(planes)
self.conv3 = nn.Conv2d(planes, planes * 4, kernel_size=1, bias=False)
self.bn3 = nn.BatchNorm2d(planes * 4)
self.relu = nn.ReLU(inplace=True)
self.se = SELayer(planes * 4, reduction)
self.downsample = downsample
self.stride = stride
def forward(self, x):
residual = x
out = self.conv1(x)
out = self.bn1(out)
out = self.relu(out)
out = self.conv2(out)
out = self.bn2(out)
out = self.relu(out)
out = self.conv3(out)
out = self.bn3(out)
out = self.se(out)
if self.downsample is not None:
residual = self.downsample(x)
out += residual
out = self.relu(out)
return out
IBN-Net.mxnet
IBN-Net的MXNet实现(Resnet-IBN-a,Resnext-IBN-a,Resnext-IBN-b)。 ( Resnet-IBN-a 50,101,152,Resnext-IBN-a 50,101,152,Resnext-IBN-b 50,101,152 )
这是一个实现IBN-网(RESNET-IBN-A 50101152)在论文中描述的架构提出,平罗,建平石,和晓鸥汤。 ECCV 2018接受了本文。他们凭借此IBN-Net区块赢得了WAD 2018挑战可驾驶区域赛道的第一名。
作者的pytorch实现可在GitHub的中找到。
这是一个实例批处理规范化(IBN)块的说明。
Resnet-IBN-a是根据(b)IBN-a实现的。请注意,我们的Resnet实现遵循“ ”中的“深层残留网络中的身份映射”。它与作者的pytorch版本略有不同。
1、SENet概述
Squeeze-and-Excitation Networks(简称 SENet)是 Momenta 胡杰团队(WMW)提出的新的网络结构,利用SENet,一举取得最后一届 ImageNet 2017 竞赛 Image Classification 任务的冠军,在ImageNet数据集上将top-5 error降低到2.251%,原先的最好成绩是2.991%。
作者在文中将SENet block插入到现有的多种分类网络中,都取得了不错的效果。作者的动机是希望显式地建模
IBN-Net
IBN-Net由《Two at Once: Enhancing Learning and Generalization Capacities via IBN-Net》这篇文章提出。
归一化层,目前主要有这几个方法,Batch Normalization(2015年)、Layer Normalization(2016年)、Instance Normalization(2017年)、Group Normalization(2018年)、Switchable Normalization(2018年
目录前言一、整体1.2、Resnet502.1、整体网络结构2.2、ResNet502.2.1、BasicBlock2.2.2、Bottleneck2.3、SE2.4、CBAM2.5、Feature Fusion2.2.3、ResNetReference
马上要找工作了,想总结下自己做过的几个小项目。
先总结下实验室之前的一个病虫害检测相关的项目。选用的baseline是SSD,代码是在这个仓库的基础上改的 lufficc/SSD.这个仓库写的ssd还是很牛的,github有1.3k个star。
这个操作就是一个全局平均池化(global average pooling)。经过压缩操作后特征图被压缩为1×1×C向量。
2、激励(Excitation)
接下来就是激励(Excitation)操作,如下图所示
由两个全连接层组成,其中SERatio是一个缩放参数,这个参数的目的是为
论文阅读之DeepLabv3:ASPP
本文进一步利用空洞卷积用于语义分割,通过空洞卷积实现不同感受野、不同特征分辨率的控制。在ASPP基础上完成不同尺度的特征提取,详情参见在PASCAL VOC 2012的分割结果。
主要复习一下ASPP具体结构。
Section I Introduction
将DNN用于语义分割任务存在两大限制:
(1)连续池化操作导致特征分辨率下降。在DCNN中往往需要深层次卷积学习更加抽象的高级语义特征,但却会造成空间信息的丢失,对于分类没什么影响,却不适合需要密集预测的语
链接:https://arxiv.org/pdf/2004.09164.pdf
代码:https://github.com/Xiangyu-CAS/AICity2020-VOC-ReID
该文章是CVPR 2020 Vehicle ReID赛道的第二名方案,下面从数据预处理、网络模块以及后处理三个方面简单的介绍下本文的思想:
1. 数据预处理
数据增强模块:作者通过观察训练集发现数据集中车体图背景区域占比较大,所以车体图是可以进一步裁剪的,在这里作者使用模型推理得到的车体图heatmap作基准朝
来自郑哲东 简单行人重识别代码到88%准确率阅读代码prepare.py数据结构部分代码一些函数model.pyClassBlockResNet50train.py
因为自己对代码不擅长,所以在参考这个博主的一系列博文,如Person_reID_baseline_pytorch 源码解析之 prepare.py等
prepare.py
这部分代码主要用于重构数据集,方便之后运行代码。
在原来的数据集中加入了pytorch这个文件夹。
├── Market/
│ ├── bou