计算机系统应用教程网站

网站首页 > 技术文章 正文

6.人工智能-实例分割

btikc 2024-08-30 13:19:24 技术文章 19 ℃ 0 评论

视频:6.1 实例分割:数据集采集、转换和划分

实例分割

实例分割数据的标注推荐使用LabelMe标注工具。

准备工作

  1. 将收集的图像存放于JPEGImages文件夹下,例如存储在D:\MyDataset\JPEGImages
  2. 创建与图像文件夹相对应的文件夹Annotations,用于存储标注的json文件,如D:MyDataset\Annotations
  3. 打开LabelMe,点击”Open Dir“按钮,选择需要标注的图像所在的文件夹打开,则”File List“对话框中会显示所有图像所对应的绝对路径,接着便可以开始遍历每张图像,进行标注工作

目标边缘标注

  1. 打开多边形标注工具(右键菜单->Create Polygon)以打点的方式圈出目标的轮廓,并在弹出的对话框中写明对应label(当label已存在时点击即可,此处请注意label勿使用中文),具体如下提所示,当框标注错误时,可点击左侧的“Edit Polygons”再点击标注框,通过拖拉进行修改,也可再点击“Delete Polygon”进行删除。
  2. 点击右侧”Save“,将标注结果保存到中创建的文件夹Annotations目录中

格式转换

LabelMe标注后的数据还需要进行转换为MSCOCO格式,才可以用于实例分割任务的训练,创建保存目录D:\dataset_seg,在python环境中安装paddlex后,使用如下命令即可

paddlex --data_conversion --source labelme --to MSCOCO \
        --pics D:\MyDataset\JPEGImages \
        --annotations D:\MyDataset\Annotations \
        --save_dir D:\dataset_coco

数据集划分

转换完数据后,为了进行训练,还需要将数据划分为训练集、验证集和测试集,同样在安装paddlex后,使用如下命令即可将数据划分为70%训练集,20%验证集和10%的测试集

paddlex --split_dataset --format COCO --dataset_dir D:\MyDataset --val_value 0.2 --test_value 0.1

执行上面命令行,会在D:\MyDataset下生成train.json, val.json, test.json,分别存储训练样本信息,验证样本信息,测试样本信息


视频:6.2 实例分割:模型训练

import paddlex as pdx
from paddlex import transforms as T

#数据格式转换 labelme-->MSCOCO
#paddlex --data_conversion --source labelme --to MSCOCO  --pics holder\JPEGImages --annotations holder\Annotations --save_dir holder-coco
#数据集划分
#paddlex --split_dataset --format COCO --dataset_dir D:\MyDataset --val_value 0.2 --test_value 0.1

# 输出推理模型
# paddlex -export_inference --model_dir best_model --save_dir inference

# 定义训练和验证时的transforms
# API说明:https://github.com/PaddlePaddle/PaddleX/blob/develop/docs/apis/transforms/transforms.md
train_transforms = T.Compose([
    T.RandomResizeByShort(
        short_sizes=[640, 672, 704, 736, 768, 800],
        max_size=1333,
        interp='CUBIC'), T.RandomHorizontalFlip(), T.Normalize(
            mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

eval_transforms = T.Compose([
    T.ResizeByShort(
        short_size=800, max_size=1333, interp='CUBIC'), T.Normalize(
            mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

# 定义训练和验证所用的数据集
# API说明:https://github.com/PaddlePaddle/PaddleX/blob/develop/docs/apis/datasets.md
train_dataset = pdx.datasets.CocoDetection(
    data_dir='holder-coco/JPEGImages',
    ann_file='holder-coco/train.json',
    transforms=train_transforms,
    shuffle=True)
eval_dataset = pdx.datasets.CocoDetection(
    data_dir='holder-coco/JPEGImages',
    ann_file='holder-coco/val.json',
    transforms=eval_transforms)

# 初始化模型,并进行训练
# 可使用VisualDL查看训练指标,参考https://github.com/PaddlePaddle/PaddleX/blob/develop/docs/train/visualdl.md
num_classes = len(train_dataset.labels)
model = pdx.det.MaskRCNN(
    num_classes=num_classes, backbone='ResNet50', with_fpn=True)

# API说明:https://github.com/PaddlePaddle/PaddleX/blob/develop/docs/apis/models/instance_segmentation.md
# 各参数介绍与调整说明:https://github.com/PaddlePaddle/PaddleX/blob/develop/docs/parameters.md
model.train(
    num_epochs=12,
    train_dataset=train_dataset,
    train_batch_size=1,
    eval_dataset=eval_dataset,
    pretrain_weights='COCO',
    learning_rate=0.00125,
    lr_decay_epochs=[8, 11],
    warmup_steps=10,
    warmup_start_lr=0.0,
    save_dir='output/mask_rcnn_r50_fpn',
    use_vdl=True)

视频:6.3 实例分割:模型部署和预测

import paddlex as pdx
import cv2
import os
#os.environ["CUDA_VISIBLE_DEVICES"]="0,1"
predictor=pdx.deploy.Predictor("output/mask_rcnn_r50_fpn-holder/inference_model",use_gpu=True)
image_name="holder/holder-test1.jpg"
img=cv2.imread(image_name)
result=predictor.predict(img)
#print(result)
vis_img=pdx.det.visualize(img,result,threshold=0.5,save_dir=None)
cv2.imshow("result",vis_img)
cv2.waitKey(0)
cv2.destroyAllWindows()


本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表