示例#1
0
文件: test.py 项目: CV-IP/C2F-FWN
def check_mdconv_im2col_step_forward():
    conv_offset = nn.Conv2d(inC,
                            deformable_groups * 2 * kH * kW,
                            kernel_size=(kH, kW),
                            stride=(1, 1),
                            padding=(1, 1),
                            bias=True).cuda()

    conv_mask = nn.Conv2d(inC,
                          deformable_groups * 1 * kH * kW,
                          kernel_size=(kH, kW),
                          stride=(1, 1),
                          padding=(1, 1),
                          bias=True).cuda()

    input = torch.randn(N, inC, inH, inW).cuda()
    offset = conv_offset(input)
    mask = conv_mask(input)
    groups = 2

    dcn1 = ModulatedDeformConv(inC,
                               outC, (kH, kW),
                               stride=1,
                               padding=1,
                               dilation=1,
                               groups=groups,
                               deformable_groups=deformable_groups,
                               im2col_step=1).cuda()

    dcn2 = ModulatedDeformConv(inC,
                               outC, (kH, kW),
                               stride=1,
                               padding=1,
                               dilation=1,
                               groups=groups,
                               deformable_groups=deformable_groups,
                               im2col_step=2).cuda()
    dcn1.weight = dcn2.weight
    dcn1.bias = dcn2.bias
    output1 = dcn1(input, offset, mask)
    output2 = dcn2(input, offset, mask)

    d = (output1 - output2).abs().max()
    if d < 1e-10:
        print('mdconv im2col_step forward passed with {}'.format(d))
    else:
        print('mdconv im2col_step forward failed with {}'.format(d))
        print(output1)
        print(output2)
        print((output1 - output2).abs())
示例#2
0
文件: test.py 项目: CV-IP/C2F-FWN
def check_mdconv_zero_offset():
    conv_offset = nn.Conv2d(inC,
                            deformable_groups * 2 * kH * kW,
                            kernel_size=(kH, kW),
                            stride=(1, 1),
                            padding=(1, 1),
                            bias=True).cuda()

    conv_mask = nn.Conv2d(inC,
                          deformable_groups * 1 * kH * kW,
                          kernel_size=(kH, kW),
                          stride=(1, 1),
                          padding=(1, 1),
                          bias=True).cuda()

    dcn = ModulatedDeformConv(inC,
                              outC, (kH, kW),
                              stride=1,
                              padding=1,
                              dilation=1,
                              groups=2,
                              deformable_groups=deformable_groups,
                              im2col_step=1).cuda()
    pcn = nn.Conv2d(inC,
                    outC, (kH, kW),
                    stride=1,
                    padding=1,
                    dilation=1,
                    groups=2).cuda()
    pcn.weight = dcn.weight
    pcn.bias = dcn.bias
    print((pcn.weight.data - dcn.weight.data).abs().max())

    conv_offset.weight.data.zero_()
    conv_offset.bias.data.zero_()
    conv_mask.weight.data.zero_()
    conv_mask.bias.data.zero_()

    input = torch.randn(N, inC, inH, inW).cuda()
    offset = conv_offset(input)
    mask = conv_mask(input)
    mask = torch.sigmoid(mask)
    mask *= 2
    output_d = dcn(input, offset, mask)
    output_p = pcn(input)
    d = (output_d - output_p).abs().max()
    if d < 1e-5:
        print('mdconv zero offset passed with {}'.format(d))
    else:
        print('mdconv zero offset failed with {}'.format(d))
        # print(output_p)
        # print(output_d)
        print((output_d - output_p).abs())
示例#3
0
文件: test.py 项目: CV-IP/C2F-FWN
def check_mdconv_zero_offset_identify():
    conv_offset = nn.Conv2d(inC,
                            deformable_groups * 2 * kH * kW,
                            kernel_size=(kH, kW),
                            stride=(1, 1),
                            padding=(1, 1),
                            bias=True).cuda()

    conv_mask = nn.Conv2d(inC,
                          deformable_groups * 1 * kH * kW,
                          kernel_size=(kH, kW),
                          stride=(1, 1),
                          padding=(1, 1),
                          bias=True).cuda()

    groups = 2
    dcn = ModulatedDeformConv(inC,
                              outC, (kH, kW),
                              stride=1,
                              padding=1,
                              dilation=1,
                              groups=groups,
                              deformable_groups=deformable_groups,
                              im2col_step=1).cuda()

    conv_offset.weight.data.zero_()
    conv_offset.bias.data.zero_()
    conv_mask.weight.data.zero_()
    conv_mask.bias.data.zero_()
    conv_identify(dcn.weight, dcn.bias, groups)

    input = torch.randn(N, inC, inH, inW).cuda()
    offset = conv_offset(input)
    mask = conv_mask(input)
    mask = torch.sigmoid(mask)
    output = dcn(input, offset, mask)
    output *= 2
    d = (input - output).abs().max()
    if d < 1e-10:
        print('mdconv zero offset identify passed with {}'.format(d))
    else:
        print('mdconv zero offset identify failed with {}'.format(d))
        # print(input)
        # print(output)
        print((input - output).abs())
示例#4
0
def check_ddconv_zero_offset_identify():
    conv_offset = nn.Conv2d(inC, deformable_groups * 2 * kH * kW,
                            kernel_size=(kH, kW),
                            stride=(1, 1),
                            padding=(1, 1),
                            bias=True).cuda()

    conv_mask = nn.Conv2d(inC, deformable_groups * 1 * kH * kW,
                          kernel_size=(kH, kW),
                          stride=(1, 1),
                          padding=(1, 1),
                          bias=True).cuda()
    stride = 1
    padding = 1
    groups = 2
    dilation = 1

    depth_offset = torch.zeros(N, 2 * kW * kH, inH, inW).int().cuda() * 2

    groups = 2
    dcn = ModulatedDeformConv(inC, outC, (kH, kW), 
        stride=1, padding=1, dilation=1, 
        groups=groups, 
        deformable_groups=deformable_groups,
        im2col_step=1).cuda()

    input = torch.randn(N, inC, inH, inW).cuda()
    depth = torch.ones(N, 1, inH, inW).cuda()
    offset = conv_offset(input)
    mask = conv_mask(input)
    mask = torch.sigmoid(mask)
    output = dcn(input, offset, mask)
    output2 = _DepthDeformConv(input, depth, depth_offset, offset, mask, dcn.weight, dcn.bias, stride, padding, dilation, groups, deformable_groups, 2)
    # output2 = dcn2(input, depth, offset, mask)
    d = (output2 - output).abs().max()
    if d < 1e-10:
        print('ddconv zero offset identify passed with {}'.format(d))
    else:
        print('ddconv zero offset identify failed with {}'.format(d))
        # print(input)
        # print(output)
        print((output2 - output).abs())