自用:基于Pytorch的Mask RCNN模型训练非公共数据集
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
https://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.pth
https://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.pth
https://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中的方式配置即可。
更多推荐
所有评论(0)