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进行实例分割。
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。