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.csdn.net/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.csdn.net/wangjianwei19911218/article/details/126362613?spm=1001.2014.3001.5502

https://blog.csdn.net/wangjianwei19911218/article/details/126348135?spm=1001.2014.3001.5502

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

  • 21
    点赞
  • 186
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 61
    评论
### 回答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并不会太困难,具有广泛的应用价值。
评论 61
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

WYKB_Mr_Q

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

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

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

打赏作者

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

抵扣说明:

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

余额充值