[Detectron2]使用Detectron2/AdelaiDet训练自己的数据集

前言

前言以及为什么写这篇的原因:
        国庆的时间在网络上查找如何使用Detectron2注册数据集,并使用了2位博主的相关代码,除了官方文档https://detectron2.readthedocs.io/以外,再次非常感谢2位博主的文章https://blog.csdn.net/qq_29750461,以及https://blog.csdn.net/weixin_39916966对我的帮助和启发。
        但目前我所看到的大家写的方法都是直接在tools/train_net.py上直接添加相应的函数并且配置cfg的参数(这一部分可以在yaml中配置,更耦合)。
       因此我想的是如何直接在Detectron2框架中的对应的python文件中修改对应部分的代码,使得train_net.py上不是那么冗余,使得添加的代码更加规范,更利于重构,并且进行下一步的修改会更加简单,这便是我写这篇博客的目的~

学会注册数据集之前应该至少会点什么:
        1. 制作好自己的数据集,如annatation的coco-json格式或者voc-xml格式,以及train和val的图片数量与路径等。(如果使用标准的数据集忽略这一步)
        2. 安装好Detectron2或AdelaiDet,至少熟悉了Detectron2AdelaiDet的INSTALL.md和GETTING_STARTED.md。AdelaiDet在安装的时候有一个小坑,具体可以看下另一篇文章AdelaiDet安装教程。(截至2020.1130)
        3. 配置好数据集,查阅github上的datasets/readme.md,如何Use Builtin Datasets。
AdelaiDet

# AdelaiDet需要以下命令:
git clone https://github.com/facebookresearch/detectron2.git
cd detectron2
git checkout -f 9eb4831 # 官方提示
cd ..	
python -m pip install -e detectron2
git clone https://github.com/aim-uofa/AdelaiDet.git
cd AdelaiDet
python setup.py build develop

        AdelaiDet是什么? AdelaiDet可以算是Detectron2的一个扩展包,基本和Detectron2类似。由于Detectron2中做detection的只有faster-rcnn的anchor-based模型,而AdelaiDet中含有了FCOS等比较新的anchor-free模型,AdelaiDet中的FCOS是采用coco format,因此我需要将训练的pascalraw数据集从voc format 转化成 coco format。并且raw数据集只有3个class。
        另外要特别说明的是,根据buildin.py文件中的COCO_CATEGORIES文件中的列表中展示的。 id都是从1开始的。因此在自己制作json文件时候,也要检查json中的catagories_id是不是从1开始的。

1.如何注册数据集

        借用之前博主的言语,只要熟悉了这几个函数,基本就能够明白注册的流程了。

data/datasets/builtin.py/register_all_coco(root="datasets") 
data/datasets/builtin_meta.py/_get_builtin_metadata(dataset_name) 
data/datasets/builtin_meta.py/_get_coco_instances_meta() 
data/datasets/register_coco.py/register_coco_instances(name, metadata, json_file, image_root)


#上面4个都和register dataset息息相关,一定要掌握上面4个函数
data/datasets/coco.py/load_coco_json(json_file, image_root, dataset_name=None, extra_annotation_keys=None)

        首先还是要把训练集按照文档的要求放置。详细的操作请看Detectron2的datasets目录下的readme.md

#COCO-format
coco/
  annotations/
    instances_{
   train,val}2017.json
    person_keypoints_{
   train,val}2017.json
  {
   train,val}2017/
    # image files that are mentioned in the corresponding json
#VOC-format
VOC20{
   07,12}/
  Annotations/
  ImageSets/
    Main/
      trainval.txt
      test.txt
      # train.txt or val.txt, if you use these splits
  JPEGImages/

1.1 detectron2/detectron2/data/datasets/builtin.py

1.1.1 字典_PREDEFINED_SPLITS_COCO

_PREDEFINED_SPLITS_COCO字典中,添加你的your_dataset_name : (image/root, json_file)

_PREDEFINED_SPLITS_COCO = {
   }

_PREDEFINED_SPLITS_COCO["coco"] = {
   
    "coco_2014_train": ("coco/train2014", "coco/annotations/instances_train2014.json"),
    "coco_2014_val": ("coco/val2014", "coco/annotations/instances_val2014.json"),
    "coco_2014_minival": ("coco/val2014", "coco/annotations/instances_minival2014.json"),
    "coco_2014_minival_100": ("coco/val2014", "coco/annotations/instances_minival2014_100.json"),
    "coco_2014_valminusminival": (
        "coco/val2014",
        "coco/annotations/instances_valminusminival2014.json",
    ),
    "coco_2017_train": ("coco/train2017", "coco/annotations/instances_train2017.json"),
    "coco_2017_val": ("coco/val2017", "coco/annotations/instances_val2017.json"),
    "coco_2017_test": ("coco/test2017", "coco/annotations/image_info_test2017.json"),
    "coco_2017_test-dev": ("coco/test2017", 
  • 40
    点赞
  • 109
    收藏
    觉得还不错? 一键收藏
  • 78
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值