将自己voc格式的旋转目标数据集转换为coco格式并重写dataloader

上一篇博客提到了voc转成coco格式的代码,现在要把旋转边框的voc转成coco格式,因为水平框和我自己的旋转框的voc的节点名字稍有不同,所以需要注意对读取xml里面节点名字的改变。然后在读取目标框坐标的时候注意增加一个角度。

将标注文件转换好之后,我们还需要将coco格式的文件夹结构给处理好,这里不再赘述。

然后就需要修改dataloader

在有进行训练借口的.py文件中,重写训练类,该类继承于DefaultTrainer。重写def build_train_loader(cls, cfg)。为了将修改的函数与原有的函数区别开来,使得以后更方便的使用原有的函数,凡是进行了修改的函数我都重新定义一个函数,并在调用的时候调用新的函数。

这里记录一下需要修改的函数及他们之间的逻辑关系。

detectron2.data.build.py中修改def build_detection_train_loader(cfg, mapper=None)

def build_detection_train_loader(cfg, mapper=None)中调用的DatasetMapper类需要修改,该类是进行数据增强的。

DatasetMapper类在detectron2.data.dataset_mapper.py中。然后修改self.tfm_gens = utils.build_rotation_transform_gen(cfg, is_train)。utils.build_rotation_transform_gen是用来表示我们需要什么样的数据增强。该函数在detectron2.data.detection_utils中。

然后还需要修改annos = [
    utils.transform_rotation_instance_annotations(
        obj, transforms, image_shape, keypoint_hflip_indices=self.keypoint_hflip_indices
    )

在utils.transform_rotation_instance_annotations中需要将原有的水平框的转换变成旋转框的转换。对于旋转框的变化需要在数据增强类中增加有关旋转框变换的函数。模仿detectron2.data.transforms.transform.py中有关旋转框变换的函数的定义和注册即可。

最后有一个instances = utils.annotations_to_instances_rotated(
    annos, image_shape
)

现有代码中已经给出了旋转框对应的函数,直接替换即可。

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值