連載
» 2021年09月08日 05時00分 公開

COCO dataset:セグメンテーションなどに使える大規模なカラー写真の画像データセットAI・機械学習のデータセット辞典

データセット「COCO」について説明。約33万枚のカラー写真(教師ラベル付きは20万枚以上)の画像データとアノテーション(=教師ラベル)が無料でダウンロードでき、物体検知/セグメンテーションや、キーポイント検出/姿勢推定、キャプション作成などに利用できる。

[一色政彦,デジタルアドバンテージ]
「AI・機械学習のデータセット辞典」のインデックス

連載目次

データセット解説

 Microsoft COCO(Common Objects in Context)は、約33万枚(ただし教師ラベル付きは約20万枚以上、残りの約12万枚は教師ラベルなし)の大規模な「カラー写真」の画像データセットである(図1)。

図1 COCO公式サイト 図1 COCO公式サイト

用途

 主な用途(タスク)は、

  • 物体検出/セグメンテーション: 150万個の物体インスタンスに対して、境界ボックスと、80個の物体カテゴリーを持つセグメンテーションマスク
  • キーポイント検出/姿勢推定: 25万人分の人物インスタンスと、17個のキーポイント(鼻/左目/左耳/左肩/左肘/左手首/左腰/左膝/左足首など)
  • キャプション作成: 画像ごとに5つのキャプション(=自然言語による説明文)

となっている。タスクの参考として、例えば2020年に行われたCOCOを用いたコンペティションに以下のものがある。

 COCOではさまざまな種類のセグメンテーションタスクでコンペティションが行われている。上記の2020年には、Instance SegmentationとPanoptic Segmentationの2種類が行われた。2019年には、「Stuff Segmentation」というタスクも行われている。

 なお、スタッフ(Stuff)とは、窓ガラス、壁、床、空など無形の数えられないモノを指し、物体(Object、Thing:人、車、猫など物理的に形がある数えられるモノ)とは区別される。よってStuff Segmentationとは、スタッフに対するセマンティックセグメンテーション(semantic segmentation)のことであり、物体に対するセグメンテーションであるInstance Segmentationとは区別される。ちなみに上記のPanoptic Segmentationは、スタッフと物体の両方に対応するシーンセグメンテーション(scene segmentation)のことである。

配布データの構成

 データセットは、画像データと、それに対する教師ラベルであるアノテーションに分けられ、さらにそれらが訓練(Train)/検証(Val)/テスト(Test)にあらかじめ分割されている。COCOは毎年のようにアップデートされており、具体的には以下のように更新されている。

  • 2014年: 訓練/検証用の画像データとアノテーション、テスト用の画像データ(と画像情報)
  • 2015年: テスト用の画像データ(と画像情報)
  • 2017年: 訓練/検証用の画像データとアノテーション、Stuff Segmentationのための訓練/検証用の画像データとアノテーション、Panoptic Segmentationのための訓練/検証用の画像データとアノテーション、テスト用の画像データ(と画像情報)、オプションとして(半教師あり学習などに使える)教師ラベルなしの画像データ(と画像情報)
  • 2018年: 2017年の全画像に対する完全な「Stuff Segmentationのためのアノテーション」と「Panoptic Segmentationのためのアノテーション」
  • 2019年: 何も変更されていない
  • 2020年: 何も変更されていない

 詳しくは「COCOの公式ダウンロードページ」を参照してほしい。

引用のための情報

 COCOの利用規約によると、COCOの画像を使用する場合は、Flickrの利用規約に従う必要があるとのこと。画像ファイルごとにCreative Commonsのいずれかのライセンスが割り当てられており、その情報がアノテーションに含まれている。

 データセットに関する研究内容を参照する際に使える論文情報を以下にまとめておく。

  • 論文著者: Tsung-Yi Lin, Michael Maire, Serge Belongie, Lubomir Bourdev, Ross Girshick, James Hays, Pietro Perona, Deva Ramanan, C. Lawrence Zitnick, Piotr Dollár
  • タイトル: Microsoft COCO: Common Objects in Context
  • 公開日: May 01, 2014
  • 論文: arXiv:1405.0312 [cs.CV]
  • URL: https://cocodataset.org

利用方法

 実際にCOCOを使うには、TensorFlowやPyTorchといった各ライブラリが提供する機能を利用することをお勧めする。以下に、それぞれのライブラリで「どのようなコードを書くとCOCOが使えるか」の典型的なコードを簡単に示しておく(コードの詳細は解説しない)。

TensorFlow Datasets

# !pip install tensorflow-datasets  # ライブラリ「TensorFlow Datasets」をインストール

import tensorflow_datasets as tfds

coco2017_train = tfds.load(name="coco/2017", split="train")
coco2014_captions_train = tfds.load(name="coco_captions/2014", split="train")

リスト1 TensorFlow DatasetsでCOCOを利用する基本的なコード

 TensorFlow Datasetsで使用できるデータセットは、TensorFlow Datasetsにまとめられており、tensorflow_datasetsモジュール(=tfds)のload()関数から利用できる。COCOデータセットは、次の2種類が提供されている。

PyTorch

 自動的にダウンロードできない仕様なので、事前に後述の「ダウンロード方法」に示す方法で、利用したい画像データとアノテーションの両方をダウンロードして、任意のフォルダー(例えば画像データを「./images/train2017/」に、アノテーションを「./annotations/」)に配置しておく必要がある。

# !pip install torch torchvision  # ライブラリ「PyTorch」をインストール

import torch
import torchvision

coco_det_data = torchvision.datasets.CocoDetection(
    './images/train2017', annFile='./annotations/instances_train2017.json',
    transform=torchvision.transforms.ToTensor())

coco_cap_data = torchvision.datasets.CocoCaptions(
    './images/train2017', annFile='./annotations/captions_train2017.json',
    transform=torchvision.transforms.ToTensor())

data_loader_det = torch.utils.data.DataLoader(coco_det_data,  batch_size=4,  shuffle=True)
data_loader_cap = torch.utils.data.DataLoader(coco_cap_data,  batch_size=4,  shuffle=True)

リスト4 PyTorchでCOCOを利用する基本的なコード

 torchvision.datasets名前空間の、

いずれかのクラスのコンストラクター(厳密には__init__関数)でデータセットのオブジェクトを生成してデータをダウンロードし、torch.utils.data.DataLoaderクラスのコンストラクターでデータローダーのオブジェクトを生成してデータをロードする。

ダウンロード方法

 COCOは、下記の公式ページからダウンロードできる。具体的なダウンロード方法は、リンク先のページにおける手順説明に従ってほしい。

図2 COCOデータセットのダウンロードページ 図2 COCOデータセットのダウンロードページ

「AI・機械学習のデータセット辞典」のインデックス

AI・機械学習のデータセット辞典

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。