深度学习及mmdetection学习理解笔记

关于mmdet源码

mmdetection 的网络配置中, type参数都是实例化的类名, 后面的都是对于的类初始化参数

参考:

关于卷积

1x1 的layer用来减少或增加输入的特征的channel, 比如resnet 中残差结构中的第一层需要减少channel, 第三层增加channel, 有几个卷积核输出就有几个channel

3*3卷积 主要作用是减少网络参数, 增大有效感受野, 增加了局部上下文信息, 一般图像尺寸会减小

Resnet的理论及源码讲解

关于 FPN 的讲解

实际是对高低层的特征图进行融合, 然后在 目标检测网络中, 针对不同的特征层再进行 RPN(提出建议框)

参考:

特征融合中的拼接和相加

element-wise sum 即矩阵元素对位相加

concat 拼接一般是在 通道上channel 上拼接, 结果是通道数增加, 一般在后面需要再加上一层卷积以减少通道数, 但同时这增加了参数量以及计算量

注意力机制 SELayer 的理解 2017

Squeeze,Excitation,Scale为SENet模块主要构成,

Squeeze: 把H×W×C的矩阵压缩到了1×1×C,每个通道的信息都用该通道的全局平均池化值来表示

Excitation: 激活, 对通道建模, 全连接层->Relu激活->全连接层

Scale: 就是一个简单的加权操作, 在经过 Excitation第二个全连接层后得到的输出是经过 sigmoid激活的权重值

通过对通道进行加权,强调有效信息,抑制无效信息,注意力机制 是一种通道注意力

ResNeSt

消融研究

通常用于神经网络,尤其是相对复杂的神经网络,如R-CNN。我们的想法是通过删除部分网络并研究网络的性能来了解网络

DetectoRS

RFP 中 T 设置为 2, 相当于重新又进行了一次融合, 添加反馈连接到FPN。只对 Resnet 中每个stage中的第一个block

sac 提出了可形变空洞卷积, 相当于给卷积加了一个权重, 将所有 Resnet中的 3*3卷积 更换为 SAC了

SyncBN与BN

BN 为批量归一化, 用于防止过拟合

BN 的性能和 batch size 有很大的关系。batch size 越大,BN 的统计量也会越准。然而像检测这样的任务,占用显存较高,一张显卡往往只能拿较少的图片(比如 2 张)来训练,这就导致 BN 的表现变差。一个解决方式是 SyncBN:所有卡共享同一个 BN,得到全局的统计量。

参考:

注意力机制: CBAM 2018

CBAM包含通道注意力和 空间注意力, 如果在Resnet中添加, 可以在第一层和最后一层进行添加CBAM 注意力模块

可以直接加进去,输入输出均为相同维度尺寸,没有变化

2021年别人使用 CBAM 发的论文:

参考:

注意力 DANet, 主要针对分割 2018-2019

基于注意力和 transformer 改进的 BoTNet 2021

可形变卷积 DCNv2

数据增强相关

epoch和iteration的区别

(1)batchsize:批大小。在深度学习中,一般采用SGD训练,即每次训练在训练集中取batchsize个样本训练; (2)iteration:1个iteration等于使用batchsize个样本训练一次;一个迭代 = 一个正向通过+一个反向通过 (3)epoch:1个epoch等于使用训练集中的全部样本训练一次;一个epoch = 所有训练样本的一个正向传递和一个反向传递

举个例子,训练集有1000个样本,batchsize=10,那么: 训练完整个样本集需要:

100次iteration,1次epoch。

比如我训练gan, batch为 8, 图片数量为 331, 331/8=42, 所以 42个 iter== 1个epoch

300个epoch相当于 12,600个iter 100->4200 200->8400

参考:

mmdetection计算map,precision,Recall:

mmdetection计算FPS:

单机使用命令示例:
python tools/analysis_tools/benchmark.py work_dirs/round1_cascade/cascade_rcnn_r50_fpn_1x_voc.py work_dirs/round1_cascade/latest.pth
经验分享 程序员 微信小程序 职场和发展