【深度学习】【mmdetection】SOLO官方代码 vs 复现版本

【mmdetection】代码对比

在这里主要对比一下solo的官方代码和复现版本。
官方代码 https://github.com/WXinlong/SOLO
复现版本 https://github.com/Epiphqny/SOLO

  • config
img_norm_cfg = dict(
    mean=[102.9801, 115.9465, 122.7717], std=[1.0, 1.0, 1.0], to_rgb=False) # caffe的图片格式是BGR

img_norm_cfg = dict(
    mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) # pytorch的图片格式是RGB
  • scale_ranges表示不同
    官方代码表示((1, 96), (48, 192), (96, 384), (192, 768), (384, 2048))
    复现版本表示((-1, 64), (64, 128), (128, 256), (256, 512), (512, INF)) INF = 1e8

  • cls branch不同
    官方代码每层共享一个cls branch;复现版本每层都有一个cls branch;前者就会少一些参数

  • FPN设置
    我自己在复现版本上改了FPN的采样率;而官方代码没有改FPN,直接把把输出的特征图插值

  • coord编码方式不同
    官方代码的coord写法更为简略,复现版本没有该部分,我参考CoordConv

x_range = torch.linspace(-1, 1, ins_feat.shape[-1], device=ins_feat.device)
y_range = torch.linspace(-1, 1, ins_feat.shape[-2], device=ins_feat.device)
y, x = torch.meshgrid(y_range, x_range)
y = y.expand([ins_feat.shape[0], 1, -1, -1])
x = x.expand([ins_feat.shape[0], 1, -1, -1])
coord_feat = torch.cat([x, y], 1)
ins_feat = torch.cat([ins_feat, coord_feat], 1)
  • 质心求法不同
    官方代码通过scipy里的ndimage.measurements.center_of_mass函数直接求得,复现版本没有该部分,我参考polarmask求质心的方法。

  • mask branch
    官方代码与论文一致,每一层的mask经上采样2倍再计算loss,预测mask和target mask层层对应,s^2处于维度1。而复现版本将所有的正样本对应的mask都resize到原图的四分之一统一计算loss。

  • focal loss
    官方代码中avg_factor为总共实例个数+1,dice loss是对每一个层计算一下算平均;复现版本中是总共实例个数+batch数

  • label设置方式
    官方代码巧用zip,实现列表维度的转换,官方代码以gt mask的重心为出发点,来分配label。而复现版本先求出特征图上点对应原图的坐标, 再计算这些点到重心点的距离,看是否在范围内,有点繁琐。
    关于代码中zip部分可见【python】zip和*
    给一张图分配label的代码如下:

 def solo_target_single(self,
                               gt_bboxes_raw,
                               gt_labels_raw,
                               gt_masks_raw,
                               featmap_sizes=None):
        # featmap_sizes为5层mask输出的大小
        device = gt_labels_raw[0].device
        # ins
        gt_areas = torch.sqrt((gt_bboxes_raw[:, 2] - gt_bboxes_raw[:, 0]) * (
                gt_bboxes_raw[:, 3] - gt_bboxes_raw[:, 1])) # 边

        ins_label_list = []
        cate_label_list = []
        ins_ind_label_list = []
        for (lower_bound, upper_bound), stride, featmap_size, num_grid \
                in zip(self
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值