1.数据准备

准备好自己的数据集,并按照Mask RCNN模型要求的数据集格式进行格式转化。

注意:Mask RCNN模型训练所使用的数据集格式为COCO格式,COCO格式数据集目录结构如下所下:

dataset_root/
├── annotations/       # 存放所有JSON标注文件
│   ├── instances_train2017.json
│   └── instances_val2017.json
├── train2017/         # 存放训练集图像
├── val2017/           # 存放验证集图像

本次模型的复现,使用的是COCO2017数据集,如果想用自己的数据集进行模型训练,可以将自己的数据集按照COCO格式进行转化。

如果想使用COCO2017数据集进行代码的初步测试,可以去官网下载该数据集。

COCO官网地址:COCO - Common Objects in Context

2. 模型环境配置

2.1 创建虚拟环境

特别说明:本次模型训练,是在Win10系统下进行!!! 

首先,使用Win+R,然后输入“cmd”,打开命令提示符,然后使用以下指令,创建一个Mask RCNN模型的虚拟环境。

conda create --name=maskrcnn python=3.9.20

注意:本模型需要使用Py3.9的版本(尝试过其他的版本,无法运行本模型复现的代码)

创建完成后,可以使用下列命令来激活虚拟环境:

conda activate maskrcnn

 至此,就完成了环境配置的第一步,虚拟环境的搭建。

2.2 配置模型运行所需要的环境依赖

【前提】已经安装好Anaconda3并配置好Pycharm!!!!

2.2.1 安装torch

接下来,就可以配置Mask RCNN模型运行所需要的环境依赖,其中最主要的就是torch的安装。本次复现所用电脑具有独显,因此配置的是具有CUDA的torch

 在打开的虚拟环境中,运行下列代码:

pip --isolated install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

【注意】
        1. 要安装适合自己GPU的torch,安装时可以去torch官网去查找!

        2.--isolated 这个命令,作用是将环境依赖下载到maskrcnn虚拟环境中,如果不使用这个命令,可能会导致下载的环境依赖不存在于这个环境中。

2.2.2 其他环境依赖的安装

其他的环境依赖如下所示,可根据实际情况进行安装即可。

Package             Version
------------------- ------------
certifi             2024.8.30
charset-normalizer  3.4.0
colorama            0.4.6
contourpy           1.0.7
cycler              0.12.1
filelock            3.16.1
fonttools           4.55.2
idna                3.10
importlib_resources 6.4.5
Jinja2              3.1.4
kiwisolver          1.4.7
lxml                5.3.0
MarkupSafe          3.0.2
matplotlib          3.5.3
mpmath              1.3.0
networkx            3.2.1
numpy               1.21.6
packaging           24.2
pillow              11.0.0
pip                 24.2
pycocotools         2.0.8
pyparsing           3.2.0
python-dateutil     2.9.0.post0
requests            2.32.3
setuptools          75.1.0
six                 1.17.0
sympy               1.13.3
torch               2.0.0+cu118
torchvision         0.15.0+cu118
tqdm                4.67.1
typing_extensions   4.12.2
urllib3             2.2.3
wheel               0.44.0
zipp                3.21.0

2.2.3 特别说明

在本次模型训练的时候,在配置好环境后对模型进行训练时,会一直产生一个报错,其大概意思是numpy的版本不兼容的问题,但是一般在创建虚拟环境时,或者下载torch时就会有一个默认的numpy,所以一定要注意这个numpy的版本问题。

在进行环境安装的时候,一定要注意好环境依赖的版本,避免产生不必要的报错。本次复现所使用的numpy的版本为1.21.6,由numpy进而牵扯出matplotlib和contourpy的版本不兼容的问题。具体的合适版本如下所示。

pip --isolated install numpy==1.21.6 matplotlib==3.5.3 contourpy==1.0.7

至此,所有的环境依赖就全部安装完毕。

3. 模型代码的下载及调试

3.1 代码下载

本次代码复现,参考下列网址内的博文:

https://github.com/WZMIAOMIAO/deep-learning-for-image-processing/tree/master/pytorch_object_detection/mask_rcnn

模型代码下载地址:

https://github.com/WZMIAOMIAO/deep-learning-for-image-processing/tree/master/pytorch_object_detectionhttps://github.com/WZMIAOMIAO/deep-learning-for-image-processing/tree/master/pytorch_object_detection注意:最好使用Git进行下载,并且开启科学上网!!

此外,在下载完代码文件后,会得到很多的模型,具体如下所示:

我们只需要打开Mask RCNN代码即可。

3.2 代码调试

3.2.1 数据集放置

将之前准备好的COCO格式的数据集,放置到代码中。

3.2.2 下载预训练模型权重

预训练权重下载地址:

1.ResNet50预训练权重: https://download.pytorch.org/models/resnet50-0676ba61.pthhttps://download.pytorch.org/models/resnet50-0676ba61.pth预训练权重下载完毕后,需要修改权重文件名称,例如在train.py文件中,权重文件名称为resnet50.py,而使用链接下载下的文件名称是resnet50-0676ba61.pth。

2.Mask RCNN预训练权重: https://download.pytorch.org/models/maskrcnn_resnet50_fpn_coco-bf2d0c1e.pthhttps://download.pytorch.org/models/maskrcnn_resnet50_fpn_coco-bf2d0c1e.pth 同理,该权重文件下载后,也需要修改其名称为:maskrcnn_resnet50_fpn_coco.pth

下载完权重文件后,将其放在mask_rcnn根目录下。

3.2.3 配置train.py文件

完成上述配置后,即可配置train.py训练文件。

1.修改文件中权重文件的地址。

将上述下载好的权重文件的“路径”复制下来

然后,将权重文件的路径防止到train.py文件中的相应位置。

(注意,这个地方要将上述两个权重文件都下载下来,并放置到合适位置)

2. 配置训练集的根目录

将训练集在mask_rcnn根目录下的路径放置到下列位置,如果使用的是COCO2017则不需要修改。

3. 配置好检测目标类别数

将数据集中的类别数量(不包含背景的)放置到如下位置。

至此,完成train.py文件的配置。

4.代码运行

完成上述配置后,运行train.py文件即可。

5. 报错内容参考

在运行上述代码的时候,出现了基础报错的地方,写在这里供参考

5.1 没有正确设置训练集数据路径

报错内容:

Traceback (most recent call last):
  File "F:\computer_algorithm\MaskRCNN\mask_rcnn\train.py", line 242, in <module>
    main(args)
  File "F:\computer_algorithm\MaskRCNN\mask_rcnn\train.py", line 60, in main
    train_dataset = CocoDetection(data_root, "train", data_transform["train"])
  File "F:\computer_algorithm\MaskRCNN\mask_rcnn\my_dataset_coco.py", line 25, in __init__
    assert os.path.exists(root), "file '{}' does not exist.".format(root)
AssertionError: file '/data/coco2017' does not exist.

主要原因就是没有配置好train.py中的训练集数据路径,重新复制训练集的路径,放置上即可。

5.2 没有正确配置权重文件

在第一次训练时,我只是配置了Mask RCNN的权重文件,而并没有配置另一个,这就导致了如下报错:

Traceback (most recent call last):
  File "F:\computer_algorithm\MaskRCNN\mask_rcnn\train.py", line 242, in <module>
    main(args)
  File "F:\computer_algorithm\MaskRCNN\mask_rcnn\train.py", line 107, in main
    model = create_model(num_classes=args.num_classes + 1, load_pretrain_weights=args.pretrain)
  File "F:\computer_algorithm\MaskRCNN\mask_rcnn\train.py", line 23, in create_model
    backbone = resnet50_fpn_backbone(pretrain_path="resnet50.pth", trainable_layers=3)
  File "F:\computer_algorithm\MaskRCNN\mask_rcnn\backbone\resnet50_fpn_model.py", line 164, in resnet50_fpn_backbone
    assert os.path.exists(pretrain_path), "{} is not exist.".format(pretrain_path)
AssertionError: resnet50.pth is not exist.

只需要按照3.2.3中的方式配置即可。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐