ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

如何用 lazyconfig_train_net.py 与 LazyConfig Python 配置训练 Detectron2 new_baselines 模型

如何用 lazyconfig_train_net.py 与 LazyConfig Python 配置训练 Detectron2 new_baselines 模型 如何用 lazyconfig_train_net.py 与 LazyConfig Python 配置训练 Detectron2 new_baselines 模型【免费下载链接】detectron2Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.项目地址: https://gitcode.com/GitHub_Trending/de/detectron2Detectron2 提供两套配置系统传统的 yacs/YAML 配置以及基于 Python 的 LazyConfig 系统。configs/new_baselines/下的 Mask R-CNN LSJ 系列基线如mask_rcnn_R_50_FPN_100ep_LSJ.py全部采用 LazyConfig 编写配套的训练脚本是 tools/lazyconfig_train_net.py。这篇文章围绕一个具体任务展开用 LazyConfig Python 配置训练或先验证后训练一个 new_baselines 模型。适用前提与 INSTALL.md 一致Linux 或 macOS、Python ≥ 3.7、PyTorch ≥ 1.8 及匹配的 torchvision从源码安装还需要 gcc g ≥ 5.4。训练走 GPUtrain.device默认cuda。理解 new_baselines 配置的组成以 configs/new_baselines/mask_rcnn_R_50_FPN_100ep_LSJ.py 为例一个可训练的 LazyConfig 由四个部分组成前三个通过相对导入从configs/common/组合而来from ..common.data.coco import dataloader # COCO 数据加载与 COCOEvaluator from ..common.models.mask_rcnn_fpn import model # Mask R-CNN 模型 from ..common.optim import SGD as optimizer # SGD 优化器 from ..common.train import train # 训练选项model zoo 的配置遵循固定约定cfg.model是模型对象cfg.dataloader.{train,test}是数据加载器cfg.train是以键值形式存放的训练选项。100ep 基线在此之上做了这些修改train.init_checkpoint 从头训练不加载预训练权重train.amp.enabled True与train.ddp.fp16_compression True开启混合精度主干与头替换为 SyncBNNaiveSyncBatchNorm数据增强改为 Large-Scale JitterResizeScalemin_scale0.1, max_scale2.0, target 1024×1024FixedSizeCrop并开启recompute_boxesdataloader.train.total_batch_size 64train.max_iter 184375文档注释说明这约等于 100 epochs按 118000 张图/epoch 计算学习率调度器WarmupParamScheduler包裹MultiStepParamSchedulervalues[1.0, 0.1, 0.01]milestones[163889, 177546]optimizer.lr 0.1、optimizer.weight_decay 4e-5。configs/common/ 的 README 说明这些对象的定义采用 lazy instantiation 形式参数可以在构造对象之前被用户编辑既可以import也可以在自己的配置中通过model_zoo.get_config加载。数据侧注意两点来自 configs/common/data/coco.py训练集是coco_2017_train、验证集是coco_2017_val需要通过 detectron2 的 COCO 数据集注册流程提前注册见 docs/tutorials/datasets.mddataloader.evaluator是COCOEvaluator负责验证集指标。先查看配置结构再动手修改修改前先确认配置加载和结构解析没有问题。docs/tutorials/lazyconfigs.md 给出的查看方式是from detectron2.model_zoo import get_config from detectron2.config import LazyConfig print(LazyConfig.to_py(get_config(new_baselines/mask_rcnn_R_50_FPN_100ep_LSJ)))print()之外LazyConfig.to_py输出的结构更容易定位要改的项文档中举的例子是dataloader.train.total_batch_sizebatch size和optimizer.lr基础学习率。get_config接受相对于 detectron2configs/目录的文件名省略.py后缀即可如果安装后该路径不可用直接把仓库里的 configs/new_baselines/mask_rcnn_R_50_FPN_100ep_LSJ.py 作为参照打开。复制基线配置并修改自己的训练项训练脚本对配置的唯一硬性要求是包含 configs/common/train.py 定义的train选项该文件注释明确写着它 designed fortools/lazyconfig_train_net.pytrain dict( output_dir./output, # 输出目录 init_checkpoint, # 初始 checkpoint max_iter90000, ampdict(enabledFalse), ddpdict( broadcast_buffersFalse, find_unused_parametersFalse, fp16_compressionFalse, ), checkpointerdict(period5000, max_to_keep100), eval_period5000, log_period20, devicecuda, # ... )推荐的做法是把基线配置复制到仓库configs/下并改名例如configs/new_baselines/mask_rcnn_R_50_FPN_100ep_LSJ_mine.py然后在副本上编辑而不是从零写基线文件顶部的from ..common.data.coco import dataloader这类相对导入只在configs/目录结构内能正确解析放到别处需要改成绝对导入或用LazyConfig.load_rel。需要改的典型位置train.output_dir ./output_my_run # 结果输出到哪里 train.max_iter 184375 # 总迭代数 optimizer.lr 0.1 # 基础学习率 dataloader.train.total_batch_size 64 # 每迭代总图片数相对导入的语义来自 lazyconfigs 文档配置文件中的相对导入只能导入其他配置文件的字典是LazyConfig.load_rel的语法糖按相对路径加载、不需要__init__.py不能导入目录。如果不想改文件脚本本身支持命令行覆盖。tools/lazyconfig_train_net.py 的主流程是LazyConfig.load(args.config_file)之后立刻LazyConfig.apply_overrides(cfg, args.opts)所以KEY.KEYVALUE形式的覆盖参数直接生效见先跑小规模冒烟测试一节。先做验证用官方 checkpoint 跑 eval-only正式训练前可以先用同一套配置与官方训练好的 checkpoint 走一遍纯评估确认数据、评估器、模型加载链路可用。new_baselines 各配置都有对应 checkpointURL 由detectron2.model_zoo的_ModelZooUrls表给出例如new_baselines/mask_rcnn_R_50_FPN_100ep_LSJ映射到model_final_bb69de.pkl。可以用 API 打印实际 URLfrom detectron2.model_zoo import get_checkpoint_url print(get_checkpoint_url(new_baselines/mask_rcnn_R_50_FPN_100ep_LSJ))然后把 URL 作为覆盖项传入注意--前python tools/lazyconfig_train_net.py \ --config-file configs/new_baselines/mask_rcnn_R_50_FPN_100ep_LSJ.py \ --eval-only \ --train.init_checkpoint上一步打印的checkpoint URL脚本eval-only分支的行为见脚本main()instantiate(cfg.model)建模型 →DetectionCheckpointer(model).load(cfg.train.init_checkpoint)加载权重 →do_test在dataloader.test上推理并用dataloader.evaluator即COCOEvaluator计算指标最后print_csv_format(ret)以 CSV 形式打印结果。这一步需要能访问该 checkpoint 的下载地址。先跑小规模冒烟测试100ep 基线有 184375 次迭代、batch 64正式训练代价很高。先用命令行覆盖把迭代数压小确认整条训练链路数据加载、模型、优化器、AMP/DDP 选项没有配置错误python tools/lazyconfig_train_net.py \ --config-file configs/new_baselines/mask_rcnn_R_50_FPN_100ep_LSJ.py \ --train.max_iter10 \ --train.log_period5 \ --train.output_dir./output_smoke这条命令只对副本路径和输出目录有要求配置本身不用改。跑完 10 次迭代后正常退出即说明配置可被instantiate成功解析此时./output_smoke下会开始写入训练输出。正式启动训练并验证结果正式训练命令python tools/lazyconfig_train_net.py \ --config-file configs/new_baselines/mask_rcnn_R_50_FPN_100ep_LSJ_mine.py \ --num-gpus GPU数参数说明来自default_argument_parser与脚本invoke_main--config-filePython 配置文件路径--num-gpus每台机器的 GPU 数默认 1--num-machines、--machine-rank、--dist-url用于多机dataloader.train.total_batch_size表示每个迭代的总图片数跨全部进程多卡时不需要按卡数改它train.device为cuda100ep 基线开启了amp.enabled与ddp.fp16_compression即文档注释中的 AMP 选项。训练过程中的验证信号均由train默认值与do_train中的 hooks 决定每eval_period默认 5000次迭代触发一次EvalHook在coco_2017_val上运行COCOEvaluator打印 CSV 格式的验证指标每checkpointer.period默认 5000最多保留 100 份保存 checkpoint 到train.output_dir每log_period默认 20次迭代写一次日志训练在train.max_iter结束。断点续训再次运行时加--resume脚本会从output_dir中已存的 checkpoint 恢复并从记录的迭代下一次继续checkpointer.resume_or_load(cfg.train.init_checkpoint, resumeargs.resume)。限制与注意100ep 基线是init_checkpoint 的从头训练SyncBN替换依赖多进程统计如果你只用单卡或 CPU 环境跑先在覆盖train.amp.enabledFalse、缩小max_iter的前提下确认能跑通再决定是否沿用完整设置——基线本身面向多 GPU 大规模训练。LazyConfig.save不能保证总是成功配置中出现的 lambda本基线的NaiveSyncBatchNorm构造就是 lambda不可序列化文档明确说明保存能力与灵活性的取舍由用户决定。脚本只理解configs/common/train.py约定的train字段要加更复杂的训练逻辑文档的建议是在配置里新增自己的字段并实现一个新的 train_net.py而不是改动lazyconfig_train_net.py的假设。数据集未注册coco_2017_train找不到会在数据加载阶段报错先完成 docs/tutorials/datasets.md 的 COCO 注册流程再训练。完整参考LazyConfig 教程、训练脚本、公共配置目录、new_baselines 配置目录。【免费下载链接】detectron2Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.项目地址: https://gitcode.com/GitHub_Trending/de/detectron2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表