MaskRCNN 在 Windows 上的部署教程

引言

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

环境准备

python3.6

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实现为例:

git clone https://github.com/matterport/Mask_RCNN.git  
cd Mask_RCNN

模型推理(以气球为例)

将根目录的model.py和utils.py放在balloo目录下:
在这里插入图片描述
优化balloon.py可以直接运行:

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'])
    else:
        model = modellib.MaskRCNN(mode="inference", config=config, model_dir=args['logs'])

    # 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进行实例分割。

  • 17
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mask RCNN的部署可以分为两个方面: 1. 模型部署 将训练好的模型部署到生产环境中,可选的方式包括: - TensorFlow Serving: TensorFlow Serving是一个高性能,灵活的服务系统,用于在生产环境中部署机器学习模型。可以将训练好的Mask RCNN模型保存为TensorFlow格式,然后使用TensorFlow Serving进行部署和服务。 - ONNX Runtime: ONNX Runtime是一个高性能推理引擎,支持多种硬件和操作系统,可以将训练好的Mask RCNN模型保存为ONNX格式,然后使用ONNX Runtime进行部署和服务。 - TensorFlow Lite: TensorFlow Lite是一个适用于移动和嵌入式设备的轻量级机器学习框架,可以将训练好的Mask RCNN模型转换为TensorFlow Lite格式,然后在移动设备上进行部署和服务。 2. 数据预处理和后处理 在模型部署之前,需要对输入数据进行预处理,以满足模型的输入要求。在模型推理之后,需要对模型输出进行后处理,以得到最终的目标检测和分割结果。常见的数据预处理和后处理包括: - 图像预处理:包括图像缩放、归一化、裁剪等操作,以满足模型的输入要求。 - 目标框后处理:包括目标框解码、非极大值抑制(NMS)等操作,以得到最终的目标检测结果。 - 掩模后处理:包括掩模解码、掩模二值化、掩模填充等操作,以得到最终的目标分割结果。 以上的预处理和后处理操作可以使用Python和OpenCV等库进行实现,也可以使用TensorFlow和ONNX Runtime等推理引擎的API进行实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值