对文章 COCO 数据集的使用 做了一些改动,抛去一些繁琐的操作,让 API 是使用更加方便和快捷。

简介

微软发布的 COCO 数据库是一个大型图像数据集, 专为对象检测、分割、人体关键点检测、语义分割和字幕生成而设计。

COCO 数据库的网址是:

COCO API 提供了 Matlab, Python 和 Lua 的 API 接口. 该 API 接口可以提供完整的图像标签数据的加载, parsing 和可视化。此外,网站还提供了数据相关的文章, 教程等。

在使用 COCO 数据库提供的 API 和 demo 之前, 需要首先下载 COCO 的图像和标签数据(类别标志、类别数量区分、像素级的分割等 ):

  • 图像数据下载到 coco/images/ 文件夹中
  • 标签数据下载到 coco/annotations/ 文件夹中

下面我们来探讨一下如何利用 Python 来使用 COCO 数据集。

1 COCO 数据集的使用

下面我们来看看如何更好、更方便的使用 COCO 数据集?

首先我先是 fork 了 COCO API,然后下载到本地,并切换到:D:\API\cocoapi\PythonAPI

cd D:\API\cocoapi\PythonAPI

打开 Makefile 可以看到 API 的安装和使用说明。

在 Linux 下,我们直接在终端输入下列命令即可正常使用 COCO API:

pip3 install -U Cython
pip3 install -U pycocotools

COCO API 对 WIndows 系统不是太友好,在 Windows 下直接运行 python setup.py build_ext --inplace 会报错:

Windows 中 (一般需要安装 visual studio)有许多的坑,参考 Windows 10 编译 Pycocotools 踩坑记 暴力删掉参数 Wno-cppWno-unused-function,如下图所示:

这样,我们便可以使用 pycocotools,不过每次你想要调用 pycocotools 都需要先载入局部环境:

import sys
sys.path.append('D:\API\cocoapi\PythonAPI')   # 将你的 `pycocotools` 所在路径添加到系统环境

如果你不想这么麻烦,你可以直接将 pycocotools 安装在你的主环境下:

先切换到包所在路径

cd D:\API\cocoapi\PythonAPI

然后,运行

python setup.py build_ext install
rd build   # 删除

下面你便可载入 pycocotools 了。

2 COCO API

我们先看看如何使用 Annotations 数据。载入必要的包:

import sys
sys.path.append('D:\API\cocoapi\PythonAPI')
# -------------------------
import os
import zipfile

import pycocotools

root = 'E:/Data/coco'  # 你下载的 COCO 数据集所在目录

COCO API 可以帮助你载入、解析和可视化 annotations。 该 API 支持 multiple annotation 格式 (详情见 data format). 更多关于 API 的细节可参考 coco.py,同时你也可以查看 Python API demo

COCO API 的记号说明:

3 MASK API

COCO 为每个实例对象提供分割掩码(segmentation masks)。这就产生了两个挑战: 紧凑地存储掩码和高效地执行掩码计算。 MASK API 使用自定义运行长度编码 (Run Length Encoding, RLE) 方案解决这两个难题。RLE 表示的大小与掩码的边界像素数成正比, 并且可以在 RLE 上直接有效地计算操作 (如面积、联合或交集)。具体来说, 假设 shapes 相当简单, RLE 表示形式为 \(O(\sqrt{n}\), 其中 \(n\) 是对象中的像素数, 而通常计算量同样是 \(O(\sqrt{n})\)。在解码掩码 (存储为阵列) 上进行相同操作的自然的计算量将是 \(O(n)\)

Mask API 提供了一个用于操作以 RLE 格式存储的掩码的接口。这个 API 被定义在 mask.py。最后, 大多数 ground truth masks 存储为多边形 (相当紧凑), 这些多边形在需要时转换为 RLE。

下面我们来解读一下 pycocoDemo.ipynb

4 pycocoDemo.ipynb 解读

%matplotlib inline
import zipfile
import numpy as np
import skimage.io as io
import matplotlib.pyplot as plt
import pylab
pylab.rcParams['figure.figsize'] = (8.0, 10.0)

# -------------------
try:       # pycocotools 已经加入了全局环境变量中
    from pycocotools.coco import COCO
except ModuleNotFoundError:
    import sys
    # 加载 COCO API 环境
    sys.path.append('D:\API\cocoapi\PythonAPI')
    from pycocotools.coco import COCO

下面我们来看看 val2017 的标注信息:

版权声明:本文为q735613050原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/q735613050/p/10040330.html