Detectron2(一): Dataloader

本文深入探讨了Detectron2的数据加载器(DataLoader)工作原理,包括如何通过load_coco_json函数加载JSON文件,注册DatasetCatalog及MetedataCatalog,构建自定义数据集,以及通过get_detection_dataset_dicts函数获取dataset_dicts的过程。最终,通过DatasetFromList和MapDataset类包装,结合torch.utils.data.dataloader创建出用于训练的dataloader。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 detectron2的dataloader主要在detectron2/data/文件夹中:
a. 第一个核心函数是根据提供的train.json等进行加载,举例coco.py中的load_coco_json函数,这个是加载json文件的。
b. 根据这个函数以及对应的json名字,就可以进行注册DatasetCatalog(这个是主要的)以及MetedataCatalog(主要是一些附加属性),这俩类在data/catalog.py中
c. 通过data/datasets/register_coco.py中register_coco_instances函数进行注册,最终在data/datasets/builtin.py中会对一些默认的数据集如coco,pascal_voc等数据集进行注册,然后通过data/datasets/init.py会对所有进行注册(该文件在导入包时自动加载)
d 之后通过调用data/build.py 里面的get_detection_dataset_dicts函数,也就是load_coco_json函数,得到dataset_dicts,然后通过data/common.py里面的DatasetFromList类已经Mapdataset类进行包装得到最终dataset(也就是torch…utils.data.dataset),之后再调用torch.utils.data.dataloader,得到最终的dataloader
e. 最终的函数是data/build.py中的build_detection_train_loader函数,当然在调用torch.utils.data.dataloader时,会输入sampler,transformer等,这两个模块和别的差别不大,就不详细描述
2 该dataloader可具体参考
a. https://zhuanlan.zhihu.com/p/88149772
b. 官方关于构建自己数据的例子https://colab.research.google.com/drive/16jcaJoc6bCFAQ96jDe2HwtXj7BMD_-m5#scrollTo=tjbUIhSxUdm_

### Detectron2 训练指南 对于希望使用Detectron2进行模型训练的开发者而言,官方提供了详细的教程来帮助理解和实现这过程[^2]。 #### 安装依赖项 为了能够顺利运行Detectron2项目,首先需要安装必要的Python包和其他依赖库。通常推荐在个新的虚拟环境中执行此操作以避免与其他项目的冲突: ```bash pip install -r requirements.txt ``` #### 配置环境变量 确保已设置适当的路径以便于访问预训练权重文件以及其他资源。这步骤可以通过修改`.env`配置文件完成,具体取决于个人的工作流需求。 #### 准备数据集 在开始之前,准备好用于训练的数据非常重要。支持多种格式的数据输入方式,包括但不限于COCO JSON格式标注图像实例分割任务所需的信息。如果自定义数据不符合这些标准,则可能需要转换成兼容的形式。 #### 编写配置文件 通过编写yaml格式的配置文件可以指定各种超参数以及网络架构细节。下面是个简单的例子展示了如何创建这样的配置文件: ```yaml _BASE_: "../Base-MaskRCNN-FPN.yaml" MODEL: WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl" DATASETS: TRAIN: ("my_dataset_train",) TEST: () DATALOADER: NUM_WORKERS: 4 SOLVER: IMS_PER_BATCH: 8 BASE_LR: 0.001 TEST: EVAL_PERIOD: 1000 OUTPUT_DIR: "./output/" ``` #### 启动训练进程 旦完成了上述准备工作之后就可以调用内置的`DefaultTrainer`类来进行实际的训练工作了。然而正如提到过的那样,默认情况下它并不十分灵活,在某些场景下难以满足特定的需求。因此建议深入研究其源码并考虑继承该类来自定义行为,从而更好地适应具体的实验设计要求: ```python from detectron2.engine import DefaultTrainer trainer = DefaultTrainer(cfg) trainer.resume_or_load(resume=False) trainer.train() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值