kazuto1011 / deeplab-pytorch

PyTorch re-implementation of DeepLab v2 on COCO-Stuff / PASCAL VOC datasets

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

reset dilation : layer2 layer3 dilation=1

wuzuowuyou opened this issue · comments

the original caffe model,in resnet layer2 and layer3,There are no dilation parameters, This means that dilation=0 in resnet layer2 and layer3

class _ResLayer(nn.Sequential):
"""
Residual layer with multi grids
"""

def __init__(self, n_layers, in_ch, out_ch, stride, dilation, multi_grids=None):
    super(_ResLayer, self).__init__()

    if multi_grids is None:
        multi_grids = [1 for _ in range(n_layers)]
    else:
        assert n_layers == len(multi_grids)

    # Downsampling is only in the first block
    for i in range(n_layers):
        self.add_module(
            "block{}".format(i + 1),
            _Bottleneck(
                in_ch=(in_ch if i == 0 else out_ch),
                out_ch=out_ch,
                stride=(stride if i == 0 else 1),
                dilation=dilation * multi_grids[i],
                downsample=(True if i == 0 else False),
            ),
        )

lass DeepLabV2(nn.Sequential):
"""
DeepLab v2: Dilated ResNet + ASPP
Output stride is fixed at 8
"""

def __init__(self, n_classes, n_blocks, atrous_rates):
    super(DeepLabV2, self).__init__()
    ch = [64 * 2 ** p for p in range(6)]
    self.add_module("layer1", _Stem(ch[0]))
    self.add_module("layer2", _ResLayer(n_blocks[0], ch[0], ch[2], 1, 1))
    self.add_module("layer3", _ResLayer(n_blocks[1], ch[2], ch[3], 2, 1))
    self.add_module("layer4", _ResLayer(n_blocks[2], ch[3], ch[4], 1, 2))
    self.add_module("layer5", _ResLayer(n_blocks[3], ch[4], ch[5], 1, 4))
    self.add_module("aspp", _ASPP(ch[5], n_classes, atrous_rates))

def freeze_bn(self):
    for m in self.modules():
        if isinstance(m, _ConvBnReLU.BATCH_NORM):
            m.eval()

dilation=0 is invalid in convolution operations.