Mask rcnn代码实现_pytorch版_适用30系列显卡

Mask rcnn代码实现_pytorch版

由于科研需求,要做一个图像分割的项目,于是开始着手跑一下 mask rcnn。本以为很简单的事情,网上代码比较多,结果尝试了一下,遇到了各种问题。

主要是由于网上的代码大多是基于 tensorflow1.x 的,我的显卡是 RTX3080,而30系列显卡的 CUDA 版本要求是 11.x ,不能在 tensorflow1.x 上运行。

尝试用tensorflow2.x 代替 tensorflow1.x,改一下 bug ,结果不一样的地方实在太多,还不好改,于是脱坑,找到了 pytorch 版本的 mask rcnn 代码,30系列显卡也可以愉快的图像分割了。

1. 本文所用的代码是 mmtetection 库,pytorch 版本的 mask rcnn 代码:

代码连接:https://github.com/open-mmlab/mmdetection

在这里插入图片描述

2. 本文所用开发环境

Win10 + RTX 3080

Python=3.8.13 (最新版 python 就可以)

CUDA 11.3 + cuDNN 8.2.1(只要和30系列显卡适配就行,版本无要求)

pytorch=1.12.1 + torchvision=0.13.1 (直接安装最新版就行)

labelme=5.0.1

开发环境安装方法:https://github.com/open-mmlab/mmdetection/blob/master/docs/en/get_started.md/#Installation

打不开链接的话,就按下面的流程安装进行,很简单

2.1 安装虚拟环境(推荐)
在这里插入图片描述
2.2 安装 mmcv
在这里插入图片描述
2.3 安装 mmdet

剩余的包运行时候缺什么安装什么就行,简单!

3. 数据准备

mmdetection-master 目录下新建一个 data 文件夹, 将处理好的 coco 格式数据集,按如下样式放入到 data 文件夹中。此外还要在此目录下新建 checkpoints 文件夹和 work_dirs 文件夹。

(data 文件夹下面放 coco 文件夹,coco 文件夹下放 annotations 文件夹和 train2022, val2022 以及 test2022文件夹,这三个文件夹下直接是图片。)

这里提一下,可以用自制的数据集,用 labelme 软件标注好,再转化为 coco 数据标注格式就行,数据制作方法参考:https://blog.youkuaiyun.com/wangjianwei19911218/article/details/126348135

在这里插入图片描述

4. 修改源代码

4.1 如果是自制的数据集,需要修改数据集的类别名称和类别数量。这里以 mmdetection-master 为根目录,主要修改两个文件:

./mmdetection-master/mmdet/datasets/coco.py
./mmdetection-master/mmdet/core/evaluation/class_name.py

目前我的数据集只有 cow 样本,一个类别要加逗号,因此直接按照我的来:

在这里插入图片描述
在这里插入图片描述

4.2 修改配置文件

首先打开文件配置文件,找到需要修改的文件路径:
./mmdetection-master/configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py

在这里插入图片描述

需要对这4个路径中的文件进行一一修改:

(1)修改 mask_rcnn_r50_fpn.py 文件

修改第 47 行和第 66 行的类别数,根据自己的数据集,我的是 1 类。

在这里插入图片描述

(2)修改 coco_instance.py 文件

data_root 路径改为 ‘ …/data/coco ', 文件路径按我的来。

在这里插入图片描述
在这里插入图片描述

(3)修改 schedule_1x.py 文件

原文中 8 个 GPU,学习率为0.02,咱们一个GPU,因此设为0.0025.

在这里插入图片描述

(4)修改 default_runtime.py 文件

按照如下修改就行

在这里插入图片描述

我们主要用 tools 文件夹下的 train.py 文件进行训练。

pycharm软件下添加文件参数:

在这里插入图片描述
在这里插入图片描述

确定,点开始就可以训练了。

在这里插入图片描述

不过这时候,你可能会遇到这个bug:

在这里插入图片描述

这是因为官方代码有 bug, 你只要把 dataset 去掉就好了。

原始代码

在这里插入图片描述

修改后代码:

在这里插入图片描述

大功告成!!

在这里插入图片描述

测试时,在config中加入如下代码:

../configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py E:\relate_code\mmdetection-master\tools\work_dirs\mask_rcnn_r50_fpn_1x_coco/epoch_12.pth --show --eval bbox segm

在这里插入图片描述

参考链接:https://blog.youkuaiyun.com/wangjianwei19911218/article/details/126362613?spm=1001.2014.3001.5502

https://blog.youkuaiyun.com/wangjianwei19911218/article/details/126348135?spm=1001.2014.3001.5502

日常学习记录,一起交流讨论吧!侵权联系~

### Mask R-CNN 实现概述 Mask R-CNN 是一种用于实例分割的任务模型,在目标检测的基础上增加了像素级的掩码预测。为了实现实例级别的对象识别,该架构扩展了 Faster R-CNN 的功能。 对于基于 PyTorch 框架的具体实现,可以参考如下代码片段: ```python import torch from torchvision.models.detection.mask_rcnn import maskrcnn_resnet50_fpn def get_model_instance_segmentation(num_classes): model = maskrcnn_resnet50_fpn(pretrained=True) in_features = model.roi_heads.box_predictor.cls_score.in_features model.roi_heads.box_predictor = FastRCNNPredictor(in_features, num_classes) in_features_mask = model.roi_heads.mask_predictor.conv5_mask.in_channels hidden_layer = 256 model.roi_heads.mask_predictor = MaskRCNNPredictor( in_features_mask, hidden_layer, num_classes ) return model ``` 上述代码展示了如何创建一个预训练过的 Mask R-CNN 模型并调整其分类器以适应特定数量的目标类别[^1]。 此配置使用 ResNet-50-FPN 作为骨干网,并应用了一个特征金字塔网络来增强不同尺度上的特征提取能力。通过修改 `roi_heads` 中的预测层,可以使模型适用于自定义数据集中的类目数。 另外需要注意的是,如果想要运行更复杂的变体如 Cascade RCNN,则还需要构建额外的支持工具,比如 MATLAB 封装接口[^2]。 当涉及到具体项目部署时,通常会先克隆官方仓库获取最新源码本[^3]。之后可以根据实际需求进一步定制化开发环境以及优化性能表现。
评论 64
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

WYKB_Mr_Q

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

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

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

打赏作者

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

抵扣说明:

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

余额充值