LabelStudio + MMDetection 实现目标分割预标注

在 Label Studio ML Backend 提供的预标注模型示例中,只有 mmdetection 这个 目标检测预标注 示例,而没有 目标分割预标注 示例,因此我参考野生的 目标分割预标注 代码 interactive_segmentation.py 并结合 MMDetection 的 Mask R-CNN 算法,实现了一个 目标分割预标注 的演示代码。

首先下载 Label Studio ML backend 项目代码到本地,并按 目标检测预标注文档 的内容,先实现目标检测预标注。

然后在 label_studio_ml/examples 目录下新创建一个 mask_segmentation 目录,再到 mask_segmentation 目录创建一个新的 mask_segmentation.py 文件:

import os
import logging
import boto3
import cv2
import PIL
import numpy as np

from mmdet.apis import init_detector, inference_detector

from label_studio_ml.model import LabelStudioMLBase
from label_studio_ml.utils import get_image_size, get_single_tag_keys
from label_studio.core.utils.io import json_load, get_data_dir
from label_studio.core.settings.base import DATA_UNDEFINED_NAME
from label_studio_converter.brush import encode_rle
from botocore.exceptions import ClientError
from urllib.parse import urlparse


logger = logging.getLogger(__name__)


class MaskSegmentation(LabelStudioMLBase):
    """基于 https://github.com/open-mmlab/mmdetection 的目标分割器"""

    def __init__(self, config_file, checkpoint_file, image_dir=None, labels_file=None, score_threshold=0.5, device='cpu', **kwargs):
        """
        将 MMDetection model 模型从配置和检查点加载到内存中.
        """
        super(MaskSegmentation, self).__init__(**kwargs)

        self.config_file = config_file
        self.checkpoint_file = checkpoint_file
        self.labels_file = labels_file
        # 默认 Label Studio 图片上传文件夹
        upload_dir = os.path.join(get_data_dir(), 'media', 'upload')
        self.image_dir = image_dir or upload_dir
        logger.debug(f'{self.__class__.__name__} 从 {self.image_dir} 读取图像')
        if self.labels_file and os.path.exists(self.labels_file):
            self.label_map = json_load(self.labels_file)
        else:
            self.label_map = {}

        self.from_name, self.to_name, self.value, self.labels_in_config = get_single_tag_keys(
            self.parsed_label_config, 'BrushLabels', 'Image')
        schema = list(self.parsed_label_config.values())[0]
        self.labels_in_config = set(self.labels_in_config)

        # 从 

回到根目录下,执行以下命令,创建并初始化 目标分割预标注 项目目录,并下载相应的算法模型,再运行预标注服务。

# 创建并初始化目录
label-studio-ml init mask-segmentation --from label_studio_ml/examples/mask_segmentation/mask_segmentation.py
# 下载相应的算法模型
cd mask-segmentation
git clone https://github.com/open-mmlab/mmdetection.git
cd mmdetection
mkdir checkpoints
cd checkpoints
wget http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r50_fpn_1x_coco/mask_rcnn_r50_fpn_1x_coco_20200205-d4b0c5d6.pth
# 回到根目录运行
cd ../../..
label-studio-ml start mask-segmentation --with config_file=mask-segmentation/mmdetection/configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py checkpoint_file=mask-segmentation/mmdetection/checkpoints/mask_rcnn_r50_fpn_1x_coco_20200205-d4b0c5d6.pth hostname=http://localhost:8081 -p 8082

其中 hostname=http://localhost:8081Label Studio 的访问地址,8082目标分割预标注 服务的访问端口,这里按实际情况进行修改。

然后在 Label Studio 项目的 Settings / Machine Learning 页面配置好 目标分割预标注 服务。

最后在 Label Studio 项目的 Settings / Labeling Interface 页面选择 Computer Vision > Semantic Segmentation with Masks 标注模板,并按下面的格式配置预标注项:

  

我们可以直接使用 MMDetection 已经提供的 81 个预训练模型,具体请看 COCO标签的完整列表,在其中选择需要的模型,填入 valuepredicted_values 的值就可以生效。

待标注图片:


待标注图片.jpg

预标注演示:


预标注页面.png

你可能感兴趣的:(LabelStudio + MMDetection 实现目标分割预标注)