COCO数据集解析生成语义分割mask
通过coco数据集的标注文件 — instances_train2014.json / instances_val2014.json 生成语义分割mask存在不同类别区域重叠问题,导致重叠部分像素的数值超出 [0,80] 范围内,模型训练时报错:
103: block: [1,0,0], thread: [448,0,0] Assertiont >= 0 && t < n_classes
failed.
文章目录
coco数据集
将coco数据集用于语义分割需要生成对应的mask,官方下载的coco2014/2017数据集的标注信息:
图片:
train/val 的注释文件分别有 caption,instance,person_keypoint 这三个任务方向,语义分割注释文件 instances_train2014.json 和 instances_val2014.json ,用于之后的mask提取。
train/val 的 image 文件在 train2014 、val2014、test2014 里,train2014 共有82783张图像,val2014 共有40504张图像。
一、pycocotools — 介绍
COCO是一个大型的图像数据集,用于目标检测、分割、人的关键点检测、实例分割和标题生成。pycocotools 提供了 Matlab、Python 和 luaapi,这些api有助于在COCO中加载、解析和可视化注释。请访问http://cocodataset.org/,可以了解关于COCO的更多信息,包括数据、论文和教程。COCO网站上也描述了注释的确切格式。
linux 安装 pycocotools
pip install pycocotools
因为 pycocotools 并不支持 windows 平台,采用上述命令会安装失败。采用以下方法安装:
- 查询 anaconda 对 pycocotools 的支持,点击 https://anaconda.org/search?q=pycocotools 在搜索栏输入 pycocotools :
- 查看 conda-forge 支持的安装命令:
- 在终端输入上诉任一命令,安装 pycocotools 包
二、基于 pycocotools 提供的 api 生成 mask 标注
1.引入库
代码如下:
import shutil
import cv2
from PIL import Image
import imgviz
import argparse
import os
import tqdm
import numpy as np
from pycocotools.coco import COCO # COCO 数据集标注解析库
2.设置数据路径(train / val)
代码如下:
def get_args():
parser = argparse.ArgumentParser()
parser.add_argument("--input_dir", default="/home/yc/onionDocument/code/model/MSCOCO2014/", type=str,
help="input dataset directory") # coco数据集路径
parser.add_argument("--split", default="train2014", type=str,
help="train2014 or val2014") # 解析训练数据(train)或者验证数据(val)
return parser.parse_args()
2.读入数据生成 mask(train / val)
- 标注信息保存路径
annotation_file = os.path.join(args.input_dir, 'annotations', 'instances_{}.json'.format(args.split)) # 标注文件路径
# 保存方式有两种,一种为灰度模式、一种为调色板模式
os.makedirs(os.path.join(args.input_dir, 'train2014_annotations'), exist_ok=True) # 灰度模式
os.makedirs(os.path.join(args.input_dir, 'Binary_map_aug'), exist_ok=True) # 调色板模式
os.makedirs(os.path.join(args.input_dir, 'JPEGImages'), exist_ok=True) # 所有处理的图片
- 获取