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数据集,原先就想使用的,但是格式不一样,后期没有办法了,就搜了怎么转换的文章,幸运的是找到了相关代码可以使用,没有很浪费时间
  • 这次给我最大的教训,就是不可以一次调多个参数,效果变好变坏都不知道到底是哪个参数导致的
  • 调参真的需要经验,希望以后知道怎么调参数,,,

猜你喜欢

转载自blog.csdn.net/m0_46926492/article/details/129559384