对文章 COCO 数据集的使用 做了一些改动, 抛去一些繁琐的操作, 让 API 是使用更加方便和快捷.
简介
微软发布的 COCO 数据库是一个大型图像数据集, 专为对象检测, 分割, 人体关键点检测, 语义分割和字幕生成而设计.
COCO 数据库的网址是:
MS COCO 数据集主页 - http://mscoco.org/
GitHub 网址 - https://github.com/Xinering/cocoapi
关于 API 更多的细节在网站: http://mscoco.org/dataset/#download
COCO API https://github.com/cocodataset/cocoapi 提供了 Matlab, Python 和 Lua 的 API 接口. 该 API 接口可以提供完整的图像标签数据的加载, parsing 和可视化. 此外, 网站还提供了数据相关的文章, 教程等.
在使用 COCO 数据库提供的 API 和 demo 之前, 需要首先下载 COCO 的图像和标签数据 (类别标志, 类别数量区分, 像素级的分割等 ):
图像数据下载到 coco/images/ 文件夹中
标签数据下载到 coco/annotations/ 文件夹中
下面我们来探讨一下如何利用 Python 来使用 COCO 数据集.
1 COCO 数据集的使用
下面我们来看看如何更好, 更方便的使用 COCO 数据集?
首先我先是 fork 了 COCO API https://github.com/cocodataset/cocoapi , 然后下载到本地, 并切换到: D:\API\cocoapi\PythonAPI.
cd D:\API\cocoapi\PythonAPI
打开 可以看到 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 踩坑记 https://www.jianshu.com/p/de455d653301 暴力删掉参数 Wno-cpp 和 Wno-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 https://github.com/Xinering/cocoapi 可以帮助你载入, 解析和可视化 annotations. 该 API 支持 multiple annotation 格式 (详情见 data format http://cocodataset.org/#format-data ). 更多关于 API 的细节可参考 , 同时你也可以查看 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 被定义在 . 最后, 大多数 ground truth masks 存储为多边形 (相当紧凑), 这些多边形在需要时转换为 RLE.
下面我们来解读一下 .
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 的标注信息:
来源: https://www.cnblogs.com/q735613050/p/10040330.html