1、detectron2中的DatasetMapper类——detectron2如何做数据增强_小麦先生的博客-CSDN博客_detectron2数据增强

2、 目标检测tricks(基于detectron2)_任小喵r的博客-CSDN博客

3、 detectron2/train_net.py at main · facebookresearch/detectron2 · GitHub

注:这个跟我们自己定义的很像,我们自定义的训练脚本如下:

import os
import cv2
import logging
from collections import OrderedDictimport detectron2.utils.comm as comm
from detectron2.utils.visualizer import Visualizer
from detectron2.checkpoint import DetectionCheckpointer
from detectron2.config import get_cfg
from detectron2.data import DatasetCatalog, MetadataCatalog
from detectron2.data.datasets.coco import load_coco_json
from detectron2.engine import DefaultTrainer, default_argument_parser, default_setup, launch
from detectron2.evaluation import COCOEvaluator, verify_results
from detectron2.modeling import GeneralizedRCNNWithTTA#使用指定的GPU
# os.environ["CUDA_VISIBLE_DEVICES"] = '1'# 数据集路径
DATASET_ROOT = './datasets/coco'
ANN_ROOT = os.path.join(DATASET_ROOT, 'annotations')
TRAIN_PATH = os.path.join(DATASET_ROOT, 'images/train2017')
VAL_PATH = os.path.join(DATASET_ROOT, 'images/val2017')
TRAIN_JSON = os.path.join(ANN_ROOT, 'instances_train2017.json')
VAL_JSON = os.path.join(ANN_ROOT, 'instances_val2017.json')# 数据集类别元数据
# 需修改!!
DATASET_CATEGORIES = [{"name": "DECP2", "id": 1, "isthing": 1, "color": [110, 20, 60]},{"name": "DECP3", "id": 2, "isthing": 1, "color": [220, 120, 60]},{"name": "PACO", "id": 3, "isthing": 1, "color": [220, 20, 120]},{"name": "PDCR", "id": 4, "isthing": 1, "color": [120, 20, 160]},{"name": "TARE", "id": 5, "isthing": 1, "color": [220, 120, 160]},{"name": "PAMS", "id": 6, "isthing": 1, "color": [15, 20, 60]},{"name": "TFDE", "id": 7, "isthing": 1, "color": [110, 190, 60]},{"name": "TMMS", "id": 8, "isthing": 1, "color": [15, 120, 160]},{"name": "EPDF", "id": 9, "isthing": 1, "color": [2, 120, 160]},{"name": "PASC", "id": 10, "isthing": 1, "color": [15, 1, 160]},
]# 数据集的子集
PREDEFINED_SPLITS_DATASET = {"train_2019": (TRAIN_PATH, TRAIN_JSON),"val_2019": (VAL_PATH, VAL_JSON),
}def register_dataset():"""purpose: register all splits of dataset with PREDEFINED_SPLITS_DATASET"""for key, (image_root, json_file) in PREDEFINED_SPLITS_DATASET.items():register_dataset_instances(name=key,metadate=get_dataset_instances_meta(),json_file=json_file,image_root=image_root)def get_dataset_instances_meta():"""purpose: get metadata of dataset from DATASET_CATEGORIESreturn: dict[metadata]"""thing_ids = [k["id"] for k in DATASET_CATEGORIES if k["isthing"] == 1]thing_colors = [k["color"] for k in DATASET_CATEGORIES if k["isthing"] == 1]# assert len(thing_ids) == 2, len(thing_ids)thing_dataset_id_to_contiguous_id = {k: i for i, k in enumerate(thing_ids)}thing_classes = [k["name"] for k in DATASET_CATEGORIES if k["isthing"] == 1]ret = {"thing_dataset_id_to_contiguous_id": thing_dataset_id_to_contiguous_id,"thing_classes": thing_classes,"thing_colors": thing_colors,}return retdef register_dataset_instances(name, metadate, json_file, image_root):"""purpose: register dataset to DatasetCatalog,register metadata to MetadataCatalog and set attribute"""DatasetCatalog.register(name, lambda: load_coco_json(json_file, image_root, name))MetadataCatalog.get(name).set(json_file=json_file,image_root=image_root,evaluator_type="coco",**metadate)# 查看数据集标注
def checkout_dataset_annotation(name="val_2019"):dataset_dicts = load_coco_json(TRAIN_JSON, TRAIN_PATH, name)for d in dataset_dicts:img = cv2.imread(d["file_name"])visualizer = Visualizer(img[:, :, ::-1], metadata=MetadataCatalog.get(name), scale=1.5)vis = visualizer.draw_dataset_dict(d)cv2.imshow('show', vis.get_image()[:, :, ::-1])cv2.waitKey(0)class Trainer(DefaultTrainer):@classmethoddef build_evaluator(cls, cfg, dataset_name, output_folder=None):if output_folder is None:output_folder = os.path.join(cfg.OUTPUT_DIR, "inference")return COCOEvaluator(dataset_name, cfg, distributed=False, output_dir=output_folder)@classmethoddef test_with_TTA(cls, cfg, model):logger = logging.getLogger("detectron2.trainer")# In the end of training, run an evaluation with TTA# Only support some R-CNN models.logger.info("Running inference with test-time augmentation ...")model = GeneralizedRCNNWithTTA(cfg, model)evaluators = [cls.build_evaluator(cfg, name, output_folder=os.path.join(cfg.OUTPUT_DIR, "inference_TTA"))for name in cfg.DATASETS.TEST]res = cls.test(cfg, model, evaluators)res = OrderedDict({k + "_TTA": v for k, v in res.items()})return resdef setup(args):"""Create configs and perform basic setups."""cfg = get_cfg()  # 拷贝default config副本# args.config_file = "configs/COCO-InstanceSegmentation/mask_rcnn_X_101_32x8d_FPN_3x.yaml"args.config_file = "configs/COCO-Detection/retinanet_R_101_FPN_3x.yaml"# args.config_file = "configs/COCO-Detection/faster_rcnn_R_101_FPN_3x.yaml"# args.config_file = "configs/Misc/mask_rcnn_R_50_FPN_3x_dconv_c3-c5.yaml"# args.config_file = "configs/Misc/cascade_mask_rcnn_R_50_FPN_3x.yaml"# args.config_file = "configs/Misc/cascade_mask_rcnn_X_152_32x8d_FPN_IN5k_gn_dconv.yaml"# args.config_file = "configs/Misc/cascade_mask_rcnn_X_152_32x8d_FPN_IN5k_gn_dconv.yaml"cfg.merge_from_file(args.config_file)  # 从config file 覆盖配置cfg.merge_from_list(args.opts)  # 从CLI参数 覆盖配置# 更改配置参数cfg.DATASETS.TRAIN = ("train_2019",)cfg.DATASETS.TEST = ("val_2019",)cfg.DATALOADER.NUM_WORKERS = 16  #cfg.INPUT.MAX_SIZE_TRAIN = 1300cfg.INPUT.MAX_SIZE_TEST = 1300       #testcfg.INPUT.MIN_SIZE_TRAIN = (1000,)   # (160,)cfg.INPUT.MIN_SIZE_TEST = 1000     #testcfg.MODEL.ROI_HEADS.NUM_CLASSES = 10  # 类别数cfg.MODEL.MASK_ON = Falsecfg.MODEL.RETINANET.NUM_CLASSES = 10             #80  retrainet# cfg.MODEL.WEIGHTS = "./models/cascade_mask_rcnn_R_50_FPN_3x/model_final_480dd8.pkl"  # 预训练模型权重# cfg.MODEL.WEIGHTS = "./models/R-50.pkl"  # 预训练模型权重# cfg.MODEL.WEIGHTS = "./models/R-101.pkl"    # 预训练模型权重# cfg.MODEL.WEIGHTS = "./models/X-152-32x8d-IN5k.pkl"# cfg.MODEL.WEIGHTS = "./models/mask_rcnn_X_101_32x8d_FPN_3x/model_final_2d9806.pkl"# cfg.MODEL.WEIGHTS = "./output/model_0003999.pth"    # 预训练模型权重# cfg.MODEL.WEIGHTS = "./output/model_final.pth"    # 预训练模型权重cfg.MODEL.WEIGHTS = "./models/retinanet_R_101_FPN_3x/model_final_971ab9.pkl"# cfg.MODEL.WEIGHTS = "./models/cascade_mask_rcnn_x152/model_0039999_e76410.pkl"    # cat uesd it# cfg.MODEL.WEIGHTS = "./models/mask_rcnn_R_50_FPN_3x_dconv_c3-c5/model_final_821d0b.pkl"  # 预训练模型权重cfg.SOLVER.IMS_PER_BATCH = 8 # batch_size=2; iters_in_one_epoch = dataset_imgs/batch_sizeITERS_IN_ONE_EPOCH = int(960 / cfg.SOLVER.IMS_PER_BATCH)cfg.SOLVER.MAX_ITER = (ITERS_IN_ONE_EPOCH * 40) - 1  # 4kcfg.SOLVER.BASE_LR = 0.002  # LRcfg.SOLVER.MOMENTUM = 0.9cfg.SOLVER.WEIGHT_DECAY = 0.0001cfg.SOLVER.WEIGHT_DECAY_NORM = 0.0cfg.MODEL.RETINANET.SCORE_THRESH_TEST = 0.8cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5cfg.MODEL.PANOPTIC_FPN.COMBINE.INSTANCES_CONFIDENCE_THRESH = 0.8#学习率线性# cfg.SOLVER.WARMUP_METHOD = "linear" # cfg.SOLVER.GAMMA = 0.7  # lr down rate# cfg.SOLVER.STEPS = (1500, 2000, 2500, 3000, 3500, 4000, 4500, 5000, 5500)  # lr delay  each step# cfg.SOLVER.WARMUP_FACTOR = 1.0 / 1000  # cfg.SOLVER.WARMUP_ITERS = 1000  # lr up under to base_lr#学习率cos          cfg.SOLVER.LR_SCHEDULER_NAME ="WarmupCosineLR"cfg.SOLVER.MAX_ITER = 4600cfg.SOLVER.WARMUP_FACTOR = 1.0 / 1000cfg.SOLVER.WARMUP_ITERS = 500  # lr up under to base_lrcfg.SOLVER.CHECKPOINT_PERIOD = 500   # save model  interval#cfg.SOLVER.CHECKPT_PERIOD = 1  # save model  interval??? no workcfg.TEST.EVAL_PERIOD = 750        # 迭代到指定次数,进行一次评估cfg.freeze()default_setup(cfg, args)return cfgdef main(args):cfg = setup(args)print(cfg)# 注册数据集register_dataset()#只测试不训练if args.eval_only:model = Trainer.build_model(cfg)DetectionCheckpointer(model, save_dir=cfg.OUTPUT_DIR).resume_or_load(cfg.MODEL.WEIGHTS, resume=args.resume)res = Trainer.test(cfg, model)if comm.is_main_process():verify_results(cfg, res)return res#开始训练trainer = Trainer(cfg)trainer.resume_or_load(resume=args.resume)        # If `resume==True`, and last checkpoint exists, resume from it, load all checkpointablesreturn trainer.train()if __name__ == "__main__":args = default_argument_parser().parse_args()print("Command Line Args:", args)launch(main,args.num_gpus,             #使用的gpu数量num_machines=args.num_machines,machine_rank=args.machine_rank,dist_url=args.dist_url,args=(args,),)

4、 https://github.com/facebookresearch/detectron2/blob/main/tools/plain_train_net.py

5、Detectron2 代码 难 解读 - 连载中_空洞卷积-重新思考底层特征-程序员资料 - 程序员资料

6、目标检测tricks(基于detectron2)_任小喵r的博客-CSDN博客

7、detectron2和mmdetection对比_小涵涵的博客-程序员秘密_mmdetection和detectron2 - 程序员秘密

8、[Detectron2] 03-数据加载模块(dataloader) - 知乎

9、使用 Detectron2 中的 mask-RCNN 检测建筑物轮廓_RS2GIS的博客-CSDN博客_武汉大学建筑物数据集

10、[Detectron2] 03-自定义数据增强样例-StrictRandomCrop - 知乎

11、detectron2模型使用、读写、训练及测试_alex1801的博客-CSDN博客_detectron2模型导出

12、Detectron2训练自己的数据集(较详细)_qq_29750461的博客-CSDN博客_detectron2训练自己的数据集

13、detectron2(目标检测框架)无死角玩转-00:目录_江南才尽,年少无知!的博客-CSDN博客_detectron2框架

14、detectron2/defaults.py at 45b3fcea6e76bf7a351e54e01c7d6e1a3a0100a5 · facebookresearch/detectron2 · GitHub

(后面自己写推理导出onnx时可以参考)

15、Sartorius-Cell-Instance-Segmentation/x2-customed-mosaic-with-albumentations-detectron2.ipynb at main · aengusng8/Sartorius-Cell-Instance-Segmentation · GitHub

可以参考推理:

https://github.com/aengusng8/Sartorius-Cell-Instance-Segmentation​​​​​​​)

16、Detectron2-数据增强(Data Augmentation)官方文档中文翻译__KATANA_的博客-CSDN博客_detectron2 数据增强

17、copy_paste_aug_detectron2/detectron2_copypaste.ipynb at main · MarkPotanin/copy_paste_aug_detectron2 · GitHub

(copy-paste技术!)

18、'CUDA out of memory' after applying custom augmentations · Issue #3709 · facebookresearch/detectron2 · GitHub

d2的自定义训练和增强相关推荐

  1. MindSpore如何实现自定义训练

    如何用MindSpore实现实现自定义单步训练 EMA是什么 深度学习模型使用EMA更新介绍 基于PyTorch的EMA权重更新方法 MindSpore介绍 如何用MindSpore实现自定义单步训练 ...

  2. Tensorflow2.0实战练习之猫狗数据集(包含自定义训练和迁移学习)

    最近在学习使用Tenforflow2.0,写下这篇文章,用来帮助和我一样的初学者,文章中如果存在某些问题,还希望各位指出. 目录 数据集介绍 数据处理及增强 VGG模型介绍 模型搭建 训练及结果展示 ...

  3. 深度学习-Tensorflow2.2-Eager模式与自定义训练{4}-微分运算训练练习-16

    Eager模式简介 Tensorflow 发布了新的 TF 2.0 Beta 版本我们可以通过以下命令安装:pip install tensorflow==2.0.0-beta1 TensorFlow ...

  4. Recbole自定义训练集、验证集和测试集推荐

    文章目录 Recbole简介 Recbole使用 自定义训练集.验证集和测试集 Recbole简介 Recbole(中文名称:伯乐)是一款使用Python开发的开源推荐框架,里面集成了大量的推荐模型, ...

  5. 自定义训练中保存检查点

    自定义训练中保存检查点 1.知识点 设置一个保存的目录 一个前缀,保存检查点的前缀 #设置一个保存的目录 cp_dir='customtrain_cp' #设置一个前缀,保存检查点的前缀 cp_pre ...

  6. 自定义训练中使用Tensorboard

    自定义训练中使用Tensorboard 1.相关代码 优化 optimizer = tf.keras.optimizers.Adam() 损失 loss_func = tf.keras.losses. ...

  7. 【YoloV5】YoloV5训练图片增强 python代码

    YoloV5训练图片增强 python代码 Generate More Label – 生成配套的Label #!/usr/bin/python # -*- coding=utf-8 -*- from ...

  8. 模型训练平台的构建_用5行代码构建自定义训练的对象检测模型

    模型训练平台的构建 如今,机器学习和计算机视觉已成为一种热潮. 我们都已经看到了有关自动驾驶汽车和面部识别的新闻,并且可能想象到建立我们自己的计算机视觉模型将会多么酷. 但是,进入该领域并不总是那么容 ...

  9. 用5行代码构建自定义训练的对象检测模型

    如今,机器学习和计算机视觉已成为一种热潮. 我们都已经看到了有关自动驾驶汽车和面部识别的新闻,并且可能想象到建立我们自己的计算机视觉模型将会多么酷. 但是,进入该领域并不总是那么容易,尤其是在没有扎实 ...

最新文章

  1. android Toast大全(五种情形)建立属于你自己的Toast
  2. 数据库SQL语句学习笔记(3)-排序检索数据
  3. GPU — CPU-GPU 异构计算系统
  4. 数据库事务和spring事务的区别
  5. 电脑销售渠道_为园区企业搭建服务麦格米特,长城电脑等企业产业链销售渠道...
  6. php 删除某个文件夹,Php删除指定文件与文件夹的方法
  7. C#与mongoDB初始环境搭建
  8. 远程桌面与本计算机共享文件,如何开启远程计算机共享目录
  9. 风糜全球、年销128亿!著名品牌好丽友突陷“双标”争议!
  10. gcc编译器_2020好用的C++编译器有哪些?这几款值得下载
  11. Oracle基于时间点的恢复(转载)
  12. 太平洋女性网焦点图的几种写法
  13. 快速搭建一个前端模板
  14. 蓝牙版本avrcp怎么选_干货|蓝牙网关是什么?蓝牙网关怎么用?蓝牙网关怎么选?...
  15. 形式语言与自动机 第五章 课后题答案
  16. java基于uni-app框架的民宿客房预订系统 小程序
  17. medusa--暴力破解
  18. 前端系列教程之推荐(实用网站 Can I use)
  19. win11任务管理器_win11系统怎么打开任务管理器
  20. Materials - 角色分层材质规范

热门文章

  1. python爬虫 下载视频网站视频
  2. 微信改版,“内容+服务”成为王道?
  3. Ariane和riscv-gnu-toolchain工具链的安装
  4. php时间期间检测重叠,如何检查PHP中多个日期范围之间的重叠?
  5. Python的wheel文件安装
  6. 1.DLL注入相关概念
  7. python回车换行怎么不行_python回车不能换行怎么办
  8. Matlab添加包libsvm svmtrain已被删除。 请改用fitcsvm。
  9. 1.FastAPI简介
  10. PCDATA和CDATA的区别究竟是什么呢?