pytorch环境之mask-rcnn源码实现

1.下载源码及配置环境

1.1 mask-rcnn源码下载

1.2 安装项目依赖包

  • 在虚拟环境中安装相关项目库
    pip install openmim
    mim install mmcv-full
    pip install mmdet
    

1.3 coco2017数据集下载

  • 官网链接:https://cocodataset.org/
    在这里插入图片描述
  • 创建data/coco2017文件夹,将文件解压到coco2017
  • annotations_trainval2017/annotations文件夹剪切到与train2017,val2017同目录
    在这里插入图片描述
  • train2017.zip,val2017.zip,annotations_trainval2017.zip,annotations_trainval2017,四个文件都可以删除了
  • data整个文件放入项目的根目录
    在这里插入图片描述

1.4 气球数据集下载

2. coco2017数据集训练模型

2.1 修改数据集类别名称和类别数量

  • 需要修改为自己数据的类别名称,才能预测
  • 修改文件位置
    • mmdetection-master/mmdet/datasets/coco.py
    • mmdetection-master/mmdet/core/evaluation/class_name.py
  • 我使用的是coco2017数据集,所以现在不用修改
    在这里插入图片描述

2.2 修改配置文件

  • 找到配置文件目录mmdetection-master/configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py
    在这里插入图片描述

  • 修改mask_rcnn_r50_fpn.py 文件类别数,将80改为自己的分类个数

    • coco2017数据集不用修改
      在这里插入图片描述
  • 修改coco_instance.py 文件,data_root数据集路径

    • 数据集文件路径放的位置是固定的,但是coco2017这个名称可以根据自己的名称修改即可,其他的不需要动
      在这里插入图片描述
    • 为什么需要加../,因为train.py数据集在tools文件夹中,不在根目录,需要找到根目录位置

    在这里插入图片描述

  • 修改coco_instance.py 文件数据集路径,查看自己的文件名称,进行相应修改
    在这里插入图片描述

  • 修改schedule_1x.py 文件中的学习率修改自己的数值
    在这里插入图片描述

  • 修改default_runtime.py 文件,不知道为什么修改
    在这里插入图片描述

  • 添加train.py 文件参数
    在这里插入图片描述

2.3. 代码运行报错问题解决

  • 运行train.py代码
    • 报错了ImportError: Please run pip install future tensorboard to install the dependencies to use torch.utils.tensorboard (applicable to PyTorch 1.1 or higher)
      • 根据提示命令安装
        pip install future tensorboard
        
    • 再次运行,又报错了AttributeError: module distutils has no attribute version
      • 查阅资料表示setuptools版本太高,采用低版本的setuptools
        pip install setuptools==59.5.0
        
      在这里插入图片描述
  • 重新运行,成功训练
    • 数据集太大,没有跑完,所以下面使用balloon数据集测试是否正常跑通
      在这里插入图片描述

4.气球数据集训练模型

4.1 修改数据集类别名称和类别数量

  • 需要修改为自己数据的类别名称,才能预测
  • 修改文件位置
    • mmdetection-master/mmdet/datasets/coco.py
    • mmdetection-master/mmdet/core/evaluation/class_name.py
      在这里插入图片描述

4.2 修改配置文件

  • 找到配置文件目录mmdetection-master/configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py
    在这里插入图片描述

  • 修改mask_rcnn_r50_fpn.py 文件类别数,将80改为自己的分类个数,我改为1
    在这里插入图片描述

  • 修改coco_instance.py 文件,data_root数据集路径

    • 路径根据自己的数据集修改
      在这里插入图片描述
  • 修改coco_instance.py 文件数据集路径,查看自己的文件名称,进行相应修改

    • 注意自己的json文件名称,我修改为了train.json,val.json
      在这里插入图片描述
  • 在训练过coco2017数据集之后修改了其他的配置,其他都不需修改

4.3 代码运行

  • 运行train.py代码,成功训练
    在这里插入图片描述

4.5 优化模型

4.5.1 查看算法指标图

  • 代码运行成功,但是效果非常差
  • 原超参数
    batch_size=2,epoch=12
  • 使用balloon数据集train数据集个数为63val数据集个数为13,数据及太小了,所以要根据自己的数据集修改超参数
    • 打印出来显示的是这样的,惊呆了,,,
      在这里插入图片描述

4.5.2 调整超参数batch_size

  • 最终调整的超参数值samples_per_gpu=1
  • 电脑只有一个gpu,源码有8gpu,所以他的samples_per_gpu=2,实际batch_size16,实际调整的参数是samples_per_gpu
    在这里插入图片描述
  • samples_per_gpu这个值调试了很多次
    • 我将samples_per_gpu改为16报错显示内存溢出
    • 改为8使用训练集测试,一个图片都没有检测出来【不知道什么问题】
    • 改为了4,有检测出来的,但是还有没有检测出来的
      在这里插入图片描述
    • 改为2,下面这张图片没有预测出来
      在这里插入图片描述
    • 想想就这样吧,最后改为1试了一下,预测出了一个气球,只能这样了,数据集小了
      在这里插入图片描述
  • 参数修改文件
    在这里插入图片描述

4.5.3 调整超参数epoch和学习率

  • 前期sample_per_gpu修改时,epoch也修改了,改过200,150,都没有什么效果
  • 原因:数据集太小,应该是不需要这么多批次,最后就设置了100,没有设置更低的,但是觉得80可能效果也差不多,不想再试了,,,
  • 学习率改为0.0025【网上说的使用的gpu越少,学习率就要越低】
    在这里插入图片描述

4.5.4 迭代次数interval

  • 没有什么对模型实际的影响,该不该都行,只是在终端会打印loss信息,但是也看不出来什么,看图比较明显
  • 我是改为了4
    在这里插入图片描述

4.5.5 运行test文件测试数据

  • 设置保存图片路径【检测出的图片】
    在这里插入图片描述

  • test.py中加入参数

../configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py
../tools/work_dirs/mask_rcnn_r50_fpn_1x_coco/epoch_150.pth
--show
--eval
bbox
segm

在这里插入图片描述

  • 使用val数据集测试
    在这里插入图片描述

  • 预测问题,一个物体出现多个框
    在这里插入图片描述

  • 调整相关非极大值抑制参数

    • 修改nms参数,红线行数数值修改了,默认值是注释的值
    • 也调好几次,这是最后的值
      在这里插入图片描述
  • 测试结果图

    • 一张图片测试结果还好
      在这里插入图片描述

    • 多个气球不重叠的效果还好
      在这里插入图片描述

    • 多个气球重叠的效果还不是很好

    在这里插入图片描述

    • 测试错误的,把像气球的形状也测出来了
      在这里插入图片描述

4.6 再次查看算法指标图

  • 查看loss,使用tensorboard
    • 在终端项目根目录输入命令logdir为输出的日志路径
    tensorboard --logdir=tools/work_dirs/mask_rcnn_r50_fpn_1x_coco/
    
    在这里插入图片描述
  • 学习率
    在这里插入图片描述
  • 训练集指标图
    • 精准率大约为93.5%
    • 其他损失也都在缓慢下降
    • 总体看效果是不错的
      在这里插入图片描述
      在这里插入图片描述
  • 校验集指标图
    • 不知道是什么意思,但是感觉效果不错
    • 以后知道都是什么指标再更新
      在这里插入图片描述
      在这里插入图片描述

5.总结

  • 第一次实战,踩了很多坑
  • 原先使用的tensorflow框架,环境搞不好,弄了一周放弃了【代码都没有正常运行出来,无语】
  • 原先使用的coco2017数据集,真的太大了,训练时间太久了,再调参更可怕,不适合学习
  • 实在没有办法了,就是用了balloon数据集,原先就想使用的,但是格式不一样,后期没有办法了,就搜了怎么转换的文章,幸运的是找到了相关代码可以使用,没有很浪费时间
  • 这次给我最大的教训,就是不可以一次调多个参数,效果变好变坏都不知道到底是哪个参数导致的
  • 调参真的需要经验,希望以后知道怎么调参数,,,
### 回答1: Mask R-CNN 是一种基于 Faster R-CNN 的目标检测算法,它可以用来做目标分割。在 PyTorch 中,可以使用 torchvision 库中的 maskrcnn_resnet50_fpn 模型实现 Mask R-CNN。代码示例如下: ```python import torchvision from torchvision.models.detection.faster_rcnn import FastRCNNPredictor # Load a pre-trained model model = torchvision.models.detection.maskrcnn_resnet50_fpn(pretrained=True) # Replace the classifier with a new one, that has num_classes which is user-defined num_classes = 2 # 1 class (person) + background # get number of input features for the classifier in_features = model.roi_heads.box_predictor.cls_score.in_features # replace the pre-trained head with a new one model.roi_heads.box_predictor = FastRCNNPredictor(in_features, num_classes) ``` 这段代码会加载一个预训练的 Mask R-CNN 模型,并使用自定义的类别数量来替换模型中的分类器。然后你可以使用这个模型来进行目标检测和目标分割。 注意,在实际使用中, 还需要处理输入数据, 配置损失函数, 设置训练参数等, 这里只是简单的给出了模型加载和类别数量替换的代码。 ### 回答2: Mask R-CNN是一种在Faster R-CNN的基础上同时实现物体检测和分割的网络结构。它在Faster R-CNN中引入了一个分割分支,该分支提取感兴趣区域的特征并生成与其对应的分割掩码。这使得Mask R-CNN能够同时预测目标的类别、边界框和掩码。下面将介绍如何使用PyTorch实现Mask R-CNN。 首先,需要准备数据集。Mask R-CNN需要使用标注好的包含分割掩码的图像进行训练。可以使用COCO等开放数据集或自己的数据集。 其次,需要下载Mask R-CNN PyTorch代码库,并按照其README中的说明安装PyTorch和其他依赖项。 接着,根据具体情况修改配置文件,如主要训练参数、数据集路径等。可以使用默认配置文件,也可以根据需要自定义配置文件。例如,需要设置训练集、验证集、学习率等。 然后,创建数据的DataLoader和模型实例。数据载入器可以使用内置的COCO DataLoader,也可以自定义数据集,使用torch.utils.data.Dataset和torch.utils.data.DataLoader来封装数据集。 最后,进行模型训练。在训练之前,可以调用model.roi_heads.mask_predictor添加掩码分支的预测器模块。然后,可以使用torch.nn.parallel.DistributedDataParallel自动并行化训练。 以上是使用PyTorch实现Mask R-CNN的基本流程。但是,由于Mask R-CNN是一种复杂的网络结构,在具体实现中需要注意一些细节问题,如调整学习率策略、数据增强等。同时,由于分割掩码对于计算资源的占用较高,训练时建议在GPU上进行。 ### 回答3: Mask R-CNN是一种多任务目标检测算法,它可以同时完成目标检测、物体分割和置信度评估等任务。它是RCNN、Fast R-CNN和Faster R-CNN的进化版,同时添加了一个分割分支,实现了实例分割。因此,它是一个非常强大的算法,适用于许多实际场景。 PyTorch是一个基于Python的深度学习框架,它提供了方便的API和工具,用于构建神经网络模型。 在PyTorch中,实现Mask R-CNN需要以下步骤: 1.安装Mask R-CNN和PyTorch包。在命令行终端中运行以下命令: pip install maskrcnn-benchmark pip install torch torchvision 2.引入必要的包和模块: import torch import torchvision from maskrcnn_benchmark.config import cfg from predictor import COCODemo 3.设置路径和配置文件: config_file = "configs/caffe2/e2e_mask_rcnn_R_50_FPN_1x_caffe2.yaml" cfg.merge_from_file(config_file) cfg.merge_from_list(["MODEL.DEVICE", "cpu"]) 4.创建模型: demo = COCODemo(cfg, confidence_threshold=0.7) 5.加载图像并运行模型: image = demo.run_on_image(path_to_image) 6.显示结果: plt.imshow(image[:, :, [2, 1, 0]]) plt.show() 这些步骤只是一个简单的示例,可以根据实际需要进行修改和扩展。在实现Mask R-CNN时需要注意以下几点: -理解Mask R-CNN的原理及其论文中的细节, -合理配置模型和超参数,例如confidence_threshold、score_threshold等, -使用适当的数据集进行训练和测试,例如COCO、Pascal VOC等。 由于Mask R-CNN的复杂性较高,需要较长时间的学习和实践。但是,通过PyTorch实现Mask R-CNN并不会太困难,具有广泛的应用价值。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荼靡~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值