detectron2 学习笔记

一、安装

  1. 安装pytorch和对应CUDA
  2. 安装detectron2
git clone https://github.com/facebookresearch/detectron2.git
python -m pip install -e detectron2
如果更换pytorch版本,需要删除`rm -rf build/ **/*.so`再重新构建

具体安装相关问题点击这里

二、项目详细介绍

链接
API文档

  • 模型搭建
    主要入口:detectron2/detectron2/modeling/meta_arch/build.py 中的 def build_model(cfg) 方法。
    相关代码:detectron2/detectron2/modeling 目录下。
    相关配置:detectron2/config/defaults.py中_C.MODEL 开头的配置。
    主要包括了:TrainerBase, SimpleTrainer, DefaultTrainer 三个类。
训练
  • 1
    TrainerBase:
    定义在 detectron2/detectron2/engine/train_loop.py 中。
    • 主要功能:
      • 提供了 hooks 机制,可以通过导入 HookBase 对象,在训练过程的各个时间点进行自定义处理。
      • 定义了训练函数为 train(self, start_iter: int, max_iter: int),且维训练提供了一个 EventStorage 对象。
      • 这个与TF中的SessionRunHook类似,只不过TF已经实现在源码里,而Detectron2中是自己实现的。
  • 2
    SimpleTrainer:
    定义在 detectron2/detectron2/engine/train_loop.py 中。
    • 主要功能:在 TrainerBase 的基础上添加了训练所需的基本参数以及最基本的训练过程代码。
      基本训练参数指的是 model/data_loader/optimizer
      基本训练过程包括位于 run_step 函数中,主要包括的功能是:
      导入数据。
      • 计算损失函数(并确保损失函数是有效的)。
      • 记录一些性能指标(包括损失函数、时间点),保存到 EventStorage 对象中。
      • 进行梯度下降操作。
  • 2
    DefaultTrainer
    定义在 detectron2/detectron2/engine/defaults.py 中。
    • 主要功能:
      • 在 SimpleTrainer 的基础上,提供了通过配置文件创建模型、数据集、优化器、学习率等一系列操作。
      • 提供了 checkpoint 功能。
      • 使用了一系列常见的 hooks。
      • hooks的定义都在 detectron2/detectron2/engine/hooks.py 中。

三、tools文件夹

train_net.py 训练脚本
benchmark.py 标记给定配置的训练速度、推理速度或数据加载速度。
analyze_model.py 分析FLOPs,参数,detectron2模型的激活。
visualize_json_results.py可视化json实例检测/分割结果转储“cocoevaluator”或“LVISEvaluator”。如果不使用内置数据集,则需要自己的脚本或修改脚本。
visualize_data.py可视化ground truth或训练数据(after preprocessing/augmentations).
在这里插入图片描述

四、换自己的数据集

制作数据集

要转化成coco格式的数据集

换数据集

train.py该文件里面包含了Trainer这个类,继承了DefaultTrainer,这里重写了build_evaluator 和 test_with_TTA这两个方法。
根据英文注释,可以明显看出这两个方法,一个是创建对应数据集的评价器,一个是对应于RCNN系列的评价。
如果您想在使用自定义数据集的同时重用检测器 2 的数据加载器,您将需要:

  • 注册您的数据集(即,告诉detectron2 如何获取您的数据集)。

  • (可选)为您的数据集注册元数据。

官方:

def my_dataset_function():
  ...
  return list[dict] in the following format

from detectron2.data import DatasetCatalog
DatasetCatalog.register("my_dataset", my_dataset_function)
# later, to access the data:
data: List[Dict] = DatasetCatalog.get("my_dataset")

my_dataset_function() 函数返回了你的数据集(比如叫my_dataset)中的数据。这个函数无论被调用多少次,必须返回同一批数据。这个注册在进程结束之前一直有效。

这个函数在经过任意处理后必须以 list[dict] 格式返回数据,每个 dict 必须具有如下格式:

Detectron2 的标准数据字典(下面会介绍)。使用这种格式的话,你的数据集将会支持很多 Detectron2 内置的操作,如果没有其他需求推荐使用这种格式。
任何自定义的格式,比如对于新的任务,你要求数据具有额外的信息。但是在随后的运行中你需要逐一处理可能出现的问题。

原文链接:https://blog.csdn.net/weixin_42174674/article/details/116290093

后来发现,在built.py中注册自己的数据集:
以coco格式为例

# 先声明自己的数据集,模仿下面的格式,先是图片路径,再是annotation
mydataset={
   
 "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")
    }
# 再声明数据集中的类别
metadata_mydata = {
   
    "thing_classes": ["cat,dog"]
}
# 然后在这个函数中加入循环
def register_all_coco(root):
        for key, (image_root
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值