mmdetection(2): DeformableConvNets(DCN)

先来点干货,基于pytorch的代码: https://github.com/4uiiurz1
DCN可以说是打破了传统的CNN,那到底是怎么搞的呢
v1: https://arxiv.org/abs/1703.06211

既然原始的只能提取特定区域,那我们给其加上个位移不就ok了
mmdetection(2): DeformableConvNets(DCN)_第1张图片
那位移应该怎么加呢,简单啊,每个kernel不是3x3吗(常见),那就在添加9个位移变量,分别对应3x3的每个权重值所乘的点的偏移值,但是要表示坐标偏移的话,得加2个不是,ok那就233,分别表示x,y的偏移值。

mmdetection(2): DeformableConvNets(DCN)_第2张图片
所以结合上图就非常好理解了,先conv一下,生成2N个特征图,N为33=9。然后根据特征图在原图上取值,然后再进行卷积操作,就是这么简单。
至于roi pooling,解释不好,不说了。
mmdetection(2): DeformableConvNets(DCN)_第3张图片

v2:https://arxiv.org/pdf/1811.11168.pdf
主要解决个啥呢
v1不是非常规的形状吗?但是这样有个缺点啊,容易提取冗余值,比如说,一个人牵着个狗,我要检测狗,DCN某几个节点给偏到人上去了,是不是很对,解决很简单,把人上的那几个点权重设为0 就好了啊、
在这里插入图片描述
这样也是,每个卷积核上的每个点得来个权重,用来表示该点有没有什么软用。那就得3*N了
还有Faster-Rcnn怎么办,mdcn提取特征的时候提取了一大堆冗余的数据,怎么搞呢,结合RCNN啊,
RCNN输入的仅仅局部图片,不会产生冗余数据,ok,怎么结合呢,最后产生的不是1024维度的向量吗?做个相似度比较啊,cos上一下,就能尽量让Fast-RCNN趋向RCNN,这样来保证不产生冗余数据。
mmdetection(2): DeformableConvNets(DCN)_第4张图片

mmdet怎么搞呢,具体咋搞的就不说了,杂用的还可以,看18和27 的channels,是不是就是29和39,就是2个只有x,y。3个加了个m(权重),至于deformable_groups,那就是组卷积了。不说了,看代码去

deformable_groups = dcn.get('deformable_groups', 1)
            if not self.with_modulated_dcn:
                conv_op = DeformConv
                offset_channels = 18
            else:
                conv_op = ModulatedDeformConv
                offset_channels = 27
            self.conv2_offset = nn.Conv2d(
                planes,
                deformable_groups * offset_channels,
                kernel_size=3,
                stride=self.conv2_stride,
                padding=dilation,
                dilation=dilation)

你可能感兴趣的:(检测算法-深度学习,DCN)