1. 环境配置从零搭建Swin Transformer目标检测开发环境第一次接触Swin Transformer做目标检测时我在环境配置上踩了不少坑。这里分享一个经过实战验证的配置方案帮你避开90%的常见问题。建议使用conda创建独立环境避免与现有项目产生冲突conda create --name swin_det python3.7 -y conda activate swin_det关于PyTorch版本的选择经过多次测试发现torch 1.7.1cu110的组合最稳定。安装时建议使用官方推荐的命令pip install torch1.7.1cu110 torchvision0.8.2cu110 -f https://download.pytorch.org/whl/torch_stable.htmlMMCV的安装是个关键环节。我推荐使用openmim工具安装mmcv-full 1.7.0版本这个组合在多个项目中表现稳定pip install openmim mim install mmcv-full1.7.0遇到pycocotools安装失败的情况时可以尝试这个经过验证的安装流程git clone https://github.com/cocodataset/cocoapi.git cd cocoapi/PythonAPI python setup.py build_ext install对于apex的安装根据PyTorch版本不同需要采用不同策略。如果你的环境是torch 1.7.x建议使用这个特定commitgit clone https://github.com/NVIDIA/apex.git cd apex git reset --hard 3fe10b5597ba14a748ebb271a6ab97c09c5701ac pip install -v --disable-pip-version-check --no-cache-dir ./最后安装MMDetection时记得使用开发模式安装以便后续修改代码git clone https://github.com/open-mmlab/mmdetection.git cd mmdetection pip install -r requirements/build.txt pip install -v -e .2. 数据集配置与关键参数调整2.1 自定义数据集适配要让Swin Transformer识别你的自定义数据集需要修改三个关键文件。首先是类别定义文件找到mmdet/datasets/coco.py修改CLASSES列表CLASSES (person, car, dog) # 替换为你的实际类别然后在mmdet/core/evaluation/class_names.py中同步修改coco_classes。最后在模型配置文件中调整类别数量通常在configs/base/models/mask_rcnn_swin_fpn.py中有两处num_classes参数需要修改。2.2 数据路径与预处理设置在configs/base/datasets/coco_detection.py中需要配置以下关键参数data_root data/coco/ # 数据集根目录 img_scale (1333, 800) # 图像缩放尺寸根据GPU显存调整 train_pipeline [ dict(typeLoadImageFromFile), dict(typeLoadAnnotations, with_bboxTrue), dict(typeResize, img_scaleimg_scale, keep_ratioTrue), dict(typeRandomFlip, flip_ratio0.5), dict(typeNormalize, mean[123.675, 116.28, 103.53], std[58.395, 57.12, 57.375]), dict(typePad, size_divisor32), dict(typeDefaultFormatBundle), dict(typeCollect, keys[img, gt_bboxes, gt_labels]) ]特别注意samples_per_gpubatch size和workers_per_gpu数据加载线程数的设置。对于RTX 3090显卡建议从以下配置开始尝试GPU数量samples_per_gpuworkers_per_gpu1242464883. 模型架构调整与优化技巧3.1 纯目标检测改造Swin Transformer原始实现包含实例分割分支我们需要移除这些部分。找到mask_rcnn_swin_fpn.py注释掉mask相关配置# mask_roi_extractordict( # typeSingleRoIExtractor, # roi_layerdict(typeRoIAlign, output_size14, sampling_ratio0), # out_channels256, # featmap_strides[4, 8, 16, 32]), # mask_headdict( # typeFCNMaskHead, # num_convs4, # in_channels256, # conv_out_channels256, # num_classes80, # loss_maskdict( # typeCrossEntropyLoss, use_maskTrue, loss_weight1.0))同时修改配置文件中的数据集引用将coco_instance.py改为coco_detection.py。3.2 训练参数调优在mask_rcnn_swin_tiny_patch4_window7_mstrain_480-800_adamw_3x_coco.py中这些参数值得特别关注optimizer dict( typeAdamW, lr0.0001, # 初始学习率 betas(0.9, 0.999), weight_decay0.05, paramwise_cfgdict( custom_keys{ absolute_pos_embed: dict(decay_mult0.), relative_position_bias_table: dict(decay_mult0.), norm: dict(decay_mult0.) }))学习率设置建议单卡训练lr0.00018卡训练lr0.000816卡训练lr0.00164. 训练与测试实战指南4.1 多GPU分布式训练对于8卡服务器推荐使用以下启动命令./tools/dist_train.sh \ configs/swin/mask_rcnn_swin_tiny_patch4_window7_mstrain_480-800_adamw_3x_coco.py \ 8 \ --cfg-options evaluation.save_bestauto classwiseTrue关键参数说明--cfg-options动态覆盖配置文件参数evaluation.save_bestauto自动保存最佳模型classwiseTrue输出每个类别的AP值4.2 模型测试与推理单张图片测试命令示例python demo/image_demo.py \ demo/demo.jpg \ configs/swin/mask_rcnn_swin_tiny_patch4_window7_mstrain_480-800_adamw_3x_coco.py \ work_dirs/latest.pth \ --device cuda:0 \ --score-thr 0.3视频流实时检测命令python demo/webcam_demo.py \ configs/swin/mask_rcnn_swin_tiny_patch4_window7_mstrain_480-800_adamw_3x_coco.py \ work_dirs/latest.pth \ --camera-id 0 \ --threshold 0.5 \ --show4.3 常见问题解决方案OOM内存不足错误处理减小img_scale尺寸降低samples_per_gpu使用梯度累积optimizer_config dict(grad_clipNone, cumulative_iters4)训练震荡问题尝试增大window_size从7调整到14添加更强大的数据增强train_pipeline [ ... dict(typeAlbu, transforms[ dict(typeRandomRotate90, p0.5), dict(typeCutout, num_holes8, max_h_size32, max_w_size32, p0.5) ]), ... ]精度提升技巧使用更大的预训练模型从tiny切换到small/base延长训练周期1x→3x添加多尺度训练img_scale[(1333, 800), (1600, 960), (1920, 1152)]
Swin Transformer在目标检测中的实战配置与优化
1. 环境配置从零搭建Swin Transformer目标检测开发环境第一次接触Swin Transformer做目标检测时我在环境配置上踩了不少坑。这里分享一个经过实战验证的配置方案帮你避开90%的常见问题。建议使用conda创建独立环境避免与现有项目产生冲突conda create --name swin_det python3.7 -y conda activate swin_det关于PyTorch版本的选择经过多次测试发现torch 1.7.1cu110的组合最稳定。安装时建议使用官方推荐的命令pip install torch1.7.1cu110 torchvision0.8.2cu110 -f https://download.pytorch.org/whl/torch_stable.htmlMMCV的安装是个关键环节。我推荐使用openmim工具安装mmcv-full 1.7.0版本这个组合在多个项目中表现稳定pip install openmim mim install mmcv-full1.7.0遇到pycocotools安装失败的情况时可以尝试这个经过验证的安装流程git clone https://github.com/cocodataset/cocoapi.git cd cocoapi/PythonAPI python setup.py build_ext install对于apex的安装根据PyTorch版本不同需要采用不同策略。如果你的环境是torch 1.7.x建议使用这个特定commitgit clone https://github.com/NVIDIA/apex.git cd apex git reset --hard 3fe10b5597ba14a748ebb271a6ab97c09c5701ac pip install -v --disable-pip-version-check --no-cache-dir ./最后安装MMDetection时记得使用开发模式安装以便后续修改代码git clone https://github.com/open-mmlab/mmdetection.git cd mmdetection pip install -r requirements/build.txt pip install -v -e .2. 数据集配置与关键参数调整2.1 自定义数据集适配要让Swin Transformer识别你的自定义数据集需要修改三个关键文件。首先是类别定义文件找到mmdet/datasets/coco.py修改CLASSES列表CLASSES (person, car, dog) # 替换为你的实际类别然后在mmdet/core/evaluation/class_names.py中同步修改coco_classes。最后在模型配置文件中调整类别数量通常在configs/base/models/mask_rcnn_swin_fpn.py中有两处num_classes参数需要修改。2.2 数据路径与预处理设置在configs/base/datasets/coco_detection.py中需要配置以下关键参数data_root data/coco/ # 数据集根目录 img_scale (1333, 800) # 图像缩放尺寸根据GPU显存调整 train_pipeline [ dict(typeLoadImageFromFile), dict(typeLoadAnnotations, with_bboxTrue), dict(typeResize, img_scaleimg_scale, keep_ratioTrue), dict(typeRandomFlip, flip_ratio0.5), dict(typeNormalize, mean[123.675, 116.28, 103.53], std[58.395, 57.12, 57.375]), dict(typePad, size_divisor32), dict(typeDefaultFormatBundle), dict(typeCollect, keys[img, gt_bboxes, gt_labels]) ]特别注意samples_per_gpubatch size和workers_per_gpu数据加载线程数的设置。对于RTX 3090显卡建议从以下配置开始尝试GPU数量samples_per_gpuworkers_per_gpu1242464883. 模型架构调整与优化技巧3.1 纯目标检测改造Swin Transformer原始实现包含实例分割分支我们需要移除这些部分。找到mask_rcnn_swin_fpn.py注释掉mask相关配置# mask_roi_extractordict( # typeSingleRoIExtractor, # roi_layerdict(typeRoIAlign, output_size14, sampling_ratio0), # out_channels256, # featmap_strides[4, 8, 16, 32]), # mask_headdict( # typeFCNMaskHead, # num_convs4, # in_channels256, # conv_out_channels256, # num_classes80, # loss_maskdict( # typeCrossEntropyLoss, use_maskTrue, loss_weight1.0))同时修改配置文件中的数据集引用将coco_instance.py改为coco_detection.py。3.2 训练参数调优在mask_rcnn_swin_tiny_patch4_window7_mstrain_480-800_adamw_3x_coco.py中这些参数值得特别关注optimizer dict( typeAdamW, lr0.0001, # 初始学习率 betas(0.9, 0.999), weight_decay0.05, paramwise_cfgdict( custom_keys{ absolute_pos_embed: dict(decay_mult0.), relative_position_bias_table: dict(decay_mult0.), norm: dict(decay_mult0.) }))学习率设置建议单卡训练lr0.00018卡训练lr0.000816卡训练lr0.00164. 训练与测试实战指南4.1 多GPU分布式训练对于8卡服务器推荐使用以下启动命令./tools/dist_train.sh \ configs/swin/mask_rcnn_swin_tiny_patch4_window7_mstrain_480-800_adamw_3x_coco.py \ 8 \ --cfg-options evaluation.save_bestauto classwiseTrue关键参数说明--cfg-options动态覆盖配置文件参数evaluation.save_bestauto自动保存最佳模型classwiseTrue输出每个类别的AP值4.2 模型测试与推理单张图片测试命令示例python demo/image_demo.py \ demo/demo.jpg \ configs/swin/mask_rcnn_swin_tiny_patch4_window7_mstrain_480-800_adamw_3x_coco.py \ work_dirs/latest.pth \ --device cuda:0 \ --score-thr 0.3视频流实时检测命令python demo/webcam_demo.py \ configs/swin/mask_rcnn_swin_tiny_patch4_window7_mstrain_480-800_adamw_3x_coco.py \ work_dirs/latest.pth \ --camera-id 0 \ --threshold 0.5 \ --show4.3 常见问题解决方案OOM内存不足错误处理减小img_scale尺寸降低samples_per_gpu使用梯度累积optimizer_config dict(grad_clipNone, cumulative_iters4)训练震荡问题尝试增大window_size从7调整到14添加更强大的数据增强train_pipeline [ ... dict(typeAlbu, transforms[ dict(typeRandomRotate90, p0.5), dict(typeCutout, num_holes8, max_h_size32, max_w_size32, p0.5) ]), ... ]精度提升技巧使用更大的预训练模型从tiny切换到small/base延长训练周期1x→3x添加多尺度训练img_scale[(1333, 800), (1600, 960), (1920, 1152)]