d2的自定义训练和增强
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的自定义训练和增强相关推荐
- MindSpore如何实现自定义训练
如何用MindSpore实现实现自定义单步训练 EMA是什么 深度学习模型使用EMA更新介绍 基于PyTorch的EMA权重更新方法 MindSpore介绍 如何用MindSpore实现自定义单步训练 ...
- Tensorflow2.0实战练习之猫狗数据集(包含自定义训练和迁移学习)
最近在学习使用Tenforflow2.0,写下这篇文章,用来帮助和我一样的初学者,文章中如果存在某些问题,还希望各位指出. 目录 数据集介绍 数据处理及增强 VGG模型介绍 模型搭建 训练及结果展示 ...
- 深度学习-Tensorflow2.2-Eager模式与自定义训练{4}-微分运算训练练习-16
Eager模式简介 Tensorflow 发布了新的 TF 2.0 Beta 版本我们可以通过以下命令安装:pip install tensorflow==2.0.0-beta1 TensorFlow ...
- Recbole自定义训练集、验证集和测试集推荐
文章目录 Recbole简介 Recbole使用 自定义训练集.验证集和测试集 Recbole简介 Recbole(中文名称:伯乐)是一款使用Python开发的开源推荐框架,里面集成了大量的推荐模型, ...
- 自定义训练中保存检查点
自定义训练中保存检查点 1.知识点 设置一个保存的目录 一个前缀,保存检查点的前缀 #设置一个保存的目录 cp_dir='customtrain_cp' #设置一个前缀,保存检查点的前缀 cp_pre ...
- 自定义训练中使用Tensorboard
自定义训练中使用Tensorboard 1.相关代码 优化 optimizer = tf.keras.optimizers.Adam() 损失 loss_func = tf.keras.losses. ...
- 【YoloV5】YoloV5训练图片增强 python代码
YoloV5训练图片增强 python代码 Generate More Label – 生成配套的Label #!/usr/bin/python # -*- coding=utf-8 -*- from ...
- 模型训练平台的构建_用5行代码构建自定义训练的对象检测模型
模型训练平台的构建 如今,机器学习和计算机视觉已成为一种热潮. 我们都已经看到了有关自动驾驶汽车和面部识别的新闻,并且可能想象到建立我们自己的计算机视觉模型将会多么酷. 但是,进入该领域并不总是那么容 ...
- 用5行代码构建自定义训练的对象检测模型
如今,机器学习和计算机视觉已成为一种热潮. 我们都已经看到了有关自动驾驶汽车和面部识别的新闻,并且可能想象到建立我们自己的计算机视觉模型将会多么酷. 但是,进入该领域并不总是那么容易,尤其是在没有扎实 ...
最新文章
- android Toast大全(五种情形)建立属于你自己的Toast
- 数据库SQL语句学习笔记(3)-排序检索数据
- GPU — CPU-GPU 异构计算系统
- 数据库事务和spring事务的区别
- 电脑销售渠道_为园区企业搭建服务麦格米特,长城电脑等企业产业链销售渠道...
- php 删除某个文件夹,Php删除指定文件与文件夹的方法
- C#与mongoDB初始环境搭建
- 远程桌面与本计算机共享文件,如何开启远程计算机共享目录
- 风糜全球、年销128亿!著名品牌好丽友突陷“双标”争议!
- gcc编译器_2020好用的C++编译器有哪些?这几款值得下载
- Oracle基于时间点的恢复(转载)
- 太平洋女性网焦点图的几种写法
- 快速搭建一个前端模板
- 蓝牙版本avrcp怎么选_干货|蓝牙网关是什么?蓝牙网关怎么用?蓝牙网关怎么选?...
- 形式语言与自动机 第五章 课后题答案
- java基于uni-app框架的民宿客房预订系统 小程序
- medusa--暴力破解
- 前端系列教程之推荐(实用网站 Can I use)
- win11任务管理器_win11系统怎么打开任务管理器
- Materials - 角色分层材质规范