MaskRCNN 在 Windows 上的部署教程

北海yy 2024-08-23 16:01:02 阅读 87

文章目录

引言环境准备克隆Mask R-CNN仓库模型推理(以气球为例)小结

引言

Mask R-CNN(Region-based Convolutional Neural Network for Mask Prediction)是一种流行的深度学习模型,广泛用于实例分割任务。它不仅能够识别图像中的对象,还能精确地勾勒出每个对象的轮廓。在Windows环境下部署Mask R-CNN可能对于许多用户来说是一个挑战,尤其是对于那些没有深厚深度学习背景的人来说。本教程将指导你如何在Windows系统上成功部署和使用Mask R-CNN模型。

环境准备

python3.6

<code>Package Version

-------------------- -----------

absl-py 1.4.0

astor 0.8.1

backcall 0.2.0

cached-property 1.5.2

certifi 2021.5.30

colorama 0.4.5

cycler 0.11.0

Cython 0.29.28

dataclasses 0.8

decorator 4.4.2

gast 0.2.2

google-pasta 0.2.0

grpcio 1.48.2

h5py 2.10.0

imageio 2.15.0

imgaug 0.4.0

imgviz 1.7.5

importlib-metadata 4.8.3

ipython 7.16.3

ipython-genutils 0.2.0

jedi 0.17.2

Keras 2.1.6

Keras-Applications 1.0.8

Keras-Preprocessing 1.1.2

kiwisolver 1.3.1

labelme 5.2.1

Markdown 3.3.7

mask-rcnn 2.1

matplotlib 3.3.4

natsort 8.2.0

networkx 2.5.1

numpy 1.17.0

olefile 0.47

opencv-python 3.4.9.33

opt-einsum 3.3.0

packaging 21.3

parso 0.7.1

pickleshare 0.7.5

Pillow 4.0.0

pip 21.3.1

prompt-toolkit 3.0.36

protobuf 3.19.6

pycocotools-windows 2.0.0.2

Pygments 2.14.0

pyparsing 3.1.2

PyQt5 5.15.6

PyQt5-Qt5 5.15.2

PyQt5-sip 12.9.1

python-dateutil 2.9.0.post0

PyWavelets 1.1.1

PyYAML 6.0.1

QtPy 2.0.1

scikit-image 0.17.2

scipy 1.2.1

setuptools 58.0.4

Shapely 1.8.5.post1

six 1.16.0

tensorboard 1.15.0

tensorflow-estimator 1.15.1

tensorflow-gpu 1.15.0

termcolor 1.1.0

tifffile 2020.9.3

traitlets 4.3.3

typing_extensions 4.1.1

wcwidth 0.2.13

Werkzeug 2.0.3

wheel 0.37.1

wincertstore 0.2

wrapt 1.16.0

zipp 3.6.0

克隆Mask R-CNN仓库

推荐

网址:Releases · matterport/Mask_RCNN (github.com)

在这里插入图片描述

下载预训练模型

Mask R-CNN的官方实现通常包含下载预训练模型的脚本。你可以使用这些脚本来获取已经训练好的模型权重。

在这里插入图片描述

不推荐

Mask R-CNN的官方实现或一些优秀的社区版本都可以在GitHub上找到。以下以Matterport的Mask R-CNN实现为例:

<code>git clone https://github.com/matterport/Mask_RCNN.git

cd Mask_RCNN

模型推理(以气球为例)

将根目录的model.py和utils.py放在balloo目录下:

在这里插入图片描述

优化balloon.py可以直接运行:

<code>if __name__ == '__main__':

import os

# Set parameters directly (replace these paths with your actual paths)

args = { -- -->

'command': 'splash', # 'train' or 'splash'

'dataset': r'D:\YITU\maskRcnnSrs\Mask_RCNN-2.1\balloon', # Directory of the Balloon dataset

'weights': "D:\\YITU\\maskRcnnSrs\\Mask_RCNN-2.1\\samples\\balloon\\balloon.h5", # Path to weights .h5 file or 'coco'

'logs': r'D:\YITU\maskRcnnSrs\Mask_RCNN-2.1\logs', # Logs and checkpoints directory

'image': r'D:\YITU\maskRcnnSrs\Mask_RCNN-2.1\balloon\val\5555705118_3390d70abe_b.jpg',

# Image path for splash mode

'video': None, # Video path for splash mode (set to None if not using)

}

# Validate arguments

if args['command'] == "train":

assert args['dataset'], "Argument --dataset is required for training"

elif args['command'] == "splash":

assert args['image'] or args['video'], "Provide --image or --video to apply color splash"

print("Weights: ", args['weights'])

print("Dataset: ", args['dataset'])

print("Logs: ", args['logs'])

# Configurations

if args['command'] == "train":

config = BalloonConfig()

else:

class InferenceConfig(BalloonConfig):

GPU_COUNT = 1

IMAGES_PER_GPU = 1

config = InferenceConfig()

config.display()

# Create model

if args['command'] == "train":

model = modellib.MaskRCNN(mode="training", config=config, model_dir=args['logs'])code>

else:

model = modellib.MaskRCNN(mode="inference", config=config, model_dir=args['logs'])code>

# Select weights file to load

if args['weights'].lower() == "coco":

weights_path = COCO_WEIGHTS_PATH

if not os.path.exists(weights_path):

utils.download_trained_weights(weights_path)

elif args['weights'].lower() == "last":

weights_path = model.find_last()[1]

elif args['weights'].lower() == "imagenet":

weights_path = model.get_imagenet_weights()

else:

weights_path = args['weights']

# Load weights

print("Loading weights ", weights_path)

if args['weights'].lower() == "coco":

model.load_weights(weights_path, by_name=True, exclude=[

"mrcnn_class_logits", "mrcnn_bbox_fc",

"mrcnn_bbox", "mrcnn_mask"])

else:

model.load_weights(weights_path, by_name=True)

# Train or evaluate

if args['command'] == "train":

train(model)

elif args['command'] == "splash":

detect_and_color_splash(model, image_path=args['image'], video_path=args['video'])

else:

print("'{}' is not recognized. Use 'train' or 'splash'".format(args['command']))

def detect_and_color_splash(model, image_path=None, video_path=None):

assert image_path or video_path, "Provide --image or --video to apply color splash"

print("Running on image: {}, video: {}".format(image_path, video_path))

参数解释

args = {

'command': 'splash', # 'train' or 'splash'

'dataset': r'D:\YITU\maskRcnnSrs\Mask_RCNN-2.1\balloon', # Directory of the Balloon dataset

'weights': "D:\\YITU\\maskRcnnSrs\\Mask_RCNN-2.1\\samples\\balloon\\balloon.h5", # Path to weights .h5 file or 'coco'

'logs': r'D:\YITU\maskRcnnSrs\Mask_RCNN-2.1\logs', # Logs and checkpoints directory

'image': r'D:\YITU\maskRcnnSrs\Mask_RCNN-2.1\balloon\val\5555705118_3390d70abe_b.jpg',

# Image path for splash mode

'video': None, # Video path for splash mode (set to None if not using)

command:

含义: 这个参数决定了程序将要执行的任务类型。

选项: ‘train’ 或 ‘splash’。

填写指导:

当你想使用给定的数据集训练一个新的Mask R-CNN模型时,设置为’train’。

当你想使用已训练的模型来检测图像或视频中的目标时,设置为’splash’。

dataset:

含义: 数据集的目录路径,程序将从中读取训练数据(如图片和标注)。

填写指导:

无论是’train’还是’splash’模式,这个路径都应该是包含训练和验证数据的目录。但在’train’模式下,这个目录需要包含用于训练的数据;在’splash’模式下,虽然这个参数仍被读取,但主要用于确保模型的训练环境与测试环境一致。

weights:

含义: 权重文件的路径或名称,用于初始化模型。

填写指导:

在’train’模式下,这可以是预训练的权重文件(如COCO数据集的权重),也可以是从先前训练中断续的权重文件。

在’splash’模式下,这必须是完全训练好的模型权重文件,用于进行目标检测和分割。

logs:

含义: 日志和检查点(checkpoints)的保存目录。

填写指导:

在’train’模式下,这个目录将用于保存训练过程中的日志、权重文件的检查点等。

在’splash’模式下,这个目录虽然也被读取,但主要用于确保与训练时使用的目录一致。

image:

含义: 在’splash’模式下,用于目标检测和分割的单个图像文件的路径。

填写指导:

在’train’模式下,这个参数通常不被使用或设置为None。

在’splash’模式下,设置为要检测的目标图像的路径。

video:

含义: 在’splash’模式下,用于目标检测和分割的视频文件的路径。

填写指导:

在’train’模式下,这个参数通常不被使用或设置为None。

在’splash’模式下,如果要对视频中的每一帧进行目标检测和分割,则设置为视频文件的路径。如果只对图像进行操作,则设置为None。

总结

在’train’模式下,主要关注dataset、weights和logs参数,确保它们正确指向了训练所需的数据集、权重文件和日志目录。

在’splash’模式下,除了上述参数外,还需要关注image或video参数,确保它们正确指向了要检测的目标图像或视频文件。同时,weights参数应指向一个已训练好的模型权重文件。

小结

通过以上步骤,你应该能够在Windows系统上成功部署并使用Mask R-CNN进行实例分割。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。