instance_segmentation.md 3.7 KB

实例分割MSCOCO

目录

数据格式

在PaddleX中,实例分割支持MSCOCO数据集格式。(MSCOCO格式同样也可以用于目标检测)。

数据文件夹结构

数据集按照如下方式进行组织,原图均放在同一目录,如JPEGImages,标注文件(如annotations.json)放在与JPEGImages所在目录同级目录下,示例结构如下

MyDataset/ # 实例分割数据集根目录
|--JPEGImages/ # 原图文件所在目录
|  |--1.jpg
|  |--2.jpg
|  |--...
|  |--...
|
|--annotations.json # 标注文件所在目录

训练集、验证集列表

为了区分训练集和验证集,在MyDataset同级目录,使用不同的json表示数据的划分,例如train.jsonval.json。点击下载实例分割示例数据集查看具体的数据格式。

数据集加载

训练过程中,PaddleX加载数据集的示例代码如下:

import paddlex as pdx
from paddlex import transforms as T

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])
])

train_dataset = pdx.dataset.CocoDetection(
                    data_dir='./MyDataset/JPEGImages',
                    ann_file='./MyDataset/train.json',
                    transforms=train_transforms)
eval_dataset = pdx.dataset.CocoDetection(
                    data_dir='./MyDataset/JPEGImages',
                    ann_file='./MyDataset/val.json',
                    transforms=eval_transforms)

添加负样本

实例分割任务支持添加负样本进行训练以降低误检率,代码示例如下:

import paddlex as pdx
from paddlex import transforms as T

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])
])

# 情况一:ann_file中已经包含负样本
train_dataset = pdx.dataset.CocoDetection(
                    data_dir='./MyDataset/JPEGImages',
                    ann_file='./MyDataset/train.json',
                    transforms=train_transforms,
                    allow_empty=True,   # 是否加载负样本
                    empty_ratio=1.)   # 用于指定负样本占总样本数的比例。如果小于0或大于等于1,则保留全部的负样本。默认为1。

# 情况二:train_list中仅包含正样本,负样本在单独的路径下
train_dataset = pdx.dataset.CocoDetection(
                    data_dir='./MyDataset/JPEGImages',
                    ann_file='./MyDataset/train.json',
                    transforms=train_transforms)
train_dataset.add_negative_samples(
                        image_dir='path/to/negative/images',   # 背景图片所在的文件夹目录。
                        empty_ratio=1)   # 用于指定负样本占总样本数的比例。如果为None,保留数据集初始化是设置的`empty_ratio`值,
                                         # 否则更新原有`empty_ratio`值。如果小于0或大于等于1,则保留全部的负样本。默认为1。