智能数字图像处理之FastRCNN(pytorch)代码解读之train_resnet50_fpn.py

本文详细解读了使用PyTorch实现的智能数字图像处理中FastRCNN模型的训练过程。通过create_model方法创建模型,包括设置分类数、加载预训练权重,并替换分类头部。在main方法中,处理设备选择、数据预处理、加载数据集、定义优化器、学习率调度器,并根据用户参数进行训练和权重保存。代码还包含了训练过程的损失和mAP曲线绘制功能。

解读create_model方法

1. num_classes:分类数

2.backbone = resnet50_fpn_backbone()
    model = FasterRCNN(backbone=backbone, num_classes=91)-》调用faster_rcnn_framework的FasterRCNN方法,传入分类数num_classes为91

3.weights_dict = torch.load("./backbone/fasterrcnn_resnet50_fpn_coco.pth")
    missing_keys, unexpected_keys = model.load_state_dict(weights_dict, strict=False)-》加载预训练的权重文件

4.    if len(missing_keys) != 0 or len(unexpected_keys) != 0:
        print("missing_keys: ", missing_keys)
        print("unexpected_keys: ", unexpected_keys)-》打印预训练权重信息

5.in_features = model.roi_heads.box_predictor.cls_score.in_features-》获取分类器输入特征的数量

6.model.roi_heads.box_predictor = FastRCNNPredictor(in_features, num_classes)-》用一个新的头替换一个预先训练好的头

解读main方法:

1.device = torch.device(parser_data.device if torch.cuda.is_available() else "cpu")-》查看设备是否有可用的GPU

2.data_transform = {-》图像预处理函数
        "train": transforms.Compose([transforms.ToTensor(),
                                     transforms.RandomHorizontalFlip(0.5)]),-》随机水平翻转
        "val": transforms.Compose([transforms.ToTensor()])
    }

3.VOC_root = parser_data.data_path-》数据集根目录

4.train_data_set = VOC2012DataSet(VOC_root, data_transform["train"], True)-》加载数据集的VOC2012DataSet方法

5.加载训练数据集

train_data_loader = torch.utils.data.DataLoader(train_data_set,
                                                    batch_size=1,
                                                    shuffle=False,
                                                    num_workers=0,
                                                    collate_fn=utils.collate_fn)
    val_data_set = VOC2012DataSet(VOC_root, data_transform["val"], False)
    val_data_set_loader = torch.utils.data.DataLoader(val_data_set,
                            &nbs

### 关于分布式训练脚本 `dist_train.sh` 的参数说明 运行分布式训练脚本时,通常会涉及多个配置文件和参数设置。以下是针对您提到的命令以及相关参数的具体解释: #### 命令结构解析 ```bash tools/dist_train.sh \ configs/faster_rcnn/faster-rcnn_r50-caffe_fpn_fcos-rpn_1x_coco.py \ 8 \ --work-dir ./work_dirs/faster-rcnn_r50-caffe_fpn_fcos-rpn_1x_coco ``` 1. **`tools/dist_train.sh`**: 这是一个用于启动分布式训练的 shell 脚本。它通过 PyTorch 提供的工具实现多 GPU 或多节点上的模型并行化训练。 2. **第一个参数 (配置文件路径)**: 配置文件指定了模型架构、数据集路径以及其他超参数等内容。例如,在您的例子中使用的配置文件为: `faster-rcnn_r50-caffe_fpn_fcos-rpn_1x_coco.py`[^1]。此文件定义了一个基于 Faster R-CNN 的目标检测器,其骨干网络为 ResNet-50FPN 结构,并使用 COCO 数据集进行训练。 3. **第二个参数 (GPU 数量)**: 表示参与训练的 GPU 总数。在此处指定的是 8 个 GPU。如果硬件资源不足或者需要调整规模,则可以修改该数值以适应实际需求。 4. **可选参数 (`--work-dir`)**: 它用来设定保存实验结果的工作目录位置。在这个实例里,默认工作目录被设为了当前项目根目录下的子文件夹 `./work_dirs/...`. --- ### BEV Fusion 及 Mask R-CNN 参数详解 对于更复杂的框架如 BevFusion 或者 Mask R-CNN 使用 DB-Swin Transformer 作为主干网的情况,同样遵循类似的逻辑来调用上述脚本执行分布式的预处理与学习过程。不过具体到这些高级模块上还需要额外关注几个方面: 1. **BevFusion 特殊选项**: - 如果涉及到 LiDAR 点云融合操作, 则可能需要引入更多自定义层支持三维特征提取. 2. **Mask R-CNN 中 Backbone 替换注意事项**: - 当采用 Swin-Tiny(Fused)代替传统 CNNs 后端部分时候要注意初始化权重加载方式变化. 下面给出一段 Python 实现片段展示如何动态导入不同类型的 backbone 并完成相应适配: ```python from mmdet.models import build_detector import torch.nn as nn def get_model(config_path): cfg = Config.fromfile(config_path) model = build_detector(cfg.model) # Example of replacing the default backbone with a custom one like SwinTransformer if 'swin' in config_path.lower(): from mmcv.cnn.bricks.transformer import SwinTransformer new_backbone = SwinTransformer(pretrained='path/to/swin_t.pth') # Replace original backbone module inside detector instance setattr(model.backbone, 'body', new_backbone.body) return model.cuda() model_instance = get_model('mask_rcnn_dbswin-t_fpn_config_file.py') print(f'Model successfully loaded! {type(model_instance)}') ``` 以上代码展示了根据给定配置创建对应模型对象的同时还能灵活替换其中某些组件的功能。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值