連載
» 2020年06月10日 05時00分 公開

AI・機械学習のデータセット辞典:CIFAR-10:物体カラー写真(乗り物や動物など)の画像データセット

データセット「CIFAR-10」について説明。6万枚の物体カラー写真(乗り物や動物など)の「画像+ラベル」データが無料でダウンロードでき、画像認識などのディープラーニングに利用できる。scikit-learn、Keras/tf.keras、TensorFlow、PyTorchにおける利用コードも紹介。

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

連載目次

データセット解説

 CIFAR-10データセット(Canadian Institute For Advanced Research)(以下、CIFAR-10)は、

  • ラベル「0」: airplane(飛行機)
  • ラベル「1」: automobile(自動車)
  • ラベル「2」: bird(鳥)
  • ラベル「3」: cat(猫)
  • ラベル「4」: deer(鹿)
  • ラベル「5」: dog(犬)
  • ラベル「6」: frog(カエル)
  • ラベル「7」: horse(馬)
  • ラベル「8」: ship(船)
  • ラベル「9」: truck(トラック)

という10種類の「物体カラー写真」(乗り物や動物など)の画像データセットである(図1、Alex Krizhevsky氏/Vinod Nair氏/Geoffrey Hinton氏によって、オブジェクト認識用画像データセット「80 Million Tiny Images」から収集されて作成されたサブセットである)。

図1 CIFAR-10に含まれる「乗り物や動物などの画像」の例 図1 CIFAR-10に含まれる「乗り物や動物などの画像」の例
データセットの配布元: 「CIFAR-10 and CIFAR-100 datasets」。ライセンス指定なし。

 CIFAR-10は、主に画像認識を目的としたディープラーニング/機械学習の研究や初心者向けチュートリアルで使われている。CIFAR-10は上記の通り10クラス(種類)となっており手軽に扱えるが、より複雑な内容として100クラス版であるCIFAR-100(後日解説)も提供されている。

 CIFAR-10データセット全体は、

  • 5万枚の訓練データ用(画像とラベル)
  • 1万枚のテストデータ用(画像とラベル)
  • 合計6万枚

で構成される(「ラベル」=正解を示す教師データ)。また、図2にも示すように、各画像のフォーマットは、

  • 24bit RGBフルカラー画像: RGB(赤色/緑色/青色)3色の組み合わせで、それぞれ「0」〜「255」の256段階
  • 32×高さ32ピクセル: 1つ分のデータが基本的に(3, 32, 32)もしくは(32, 32, 3)(=計3072要素)という多次元配列の形状となっており、最初もしくは最後の次元にある3要素がRGB値

となっている(「ピクセル」=画素のこと。RGB形式であるため、簡単に画像化できる)。

図2 CIFAR-10に含まれる画像データの内容(32行×32列にRGBの3要素が入っている例) 図2 CIFAR-10に含まれる画像データの内容(32行×32列にRGBの3要素が入っている例)

引用のための情報

 このデータセットは、基本的に自由に使用できる(ライセンスは指定されていない。CC(Creative Commons)でいう「パブリック・ドメイン・マーク 1.0」相当と考えられる。データの取得元を明記する場合は、以下を参考にしてほしい)。

 データセットを引用する際に使える情報を以下にまとめておく。

利用方法

 実際にCIFAR-10を使うには、scikit-learn/Keras/TensorFlow/PyTorchといった各ライブラリが提供する機能を利用することをお勧めする。ムダな作業を省いて、効率的に使えるため。

 以下に、それぞれのライブラリで「どのようなコードを書くとCIFAR-10が使えるか」の典型的なコードを簡単に示しておく(コードの詳細は解説しない)。基本的に各ライブラリは、CIFAR-10データセットを自動的にダウンロードして使いやすい形にロードしてくれる機能を提供している。

scikit-learn

# !pip install scikit-learn  # ライブラリ「scikit-learn」をインストール

from sklearn.datasets import fetch_openml

cifar10 = fetch_openml('CIFAR_10')

リスト1 scikit-learnでCIFAR-10を利用する基本的なコード

 sklearn.datasets.fetch_openml()関数(EXPERIMENTAL、つまり実験段階のAPI)を呼び出せばよい。この関数は、OpenML.orgからデータセットをフェッチ(=取得)するためのもので、リスト1では「OpenML CIFAR_10」をフェッチしている。

TensorFlow(tf.keras)/Keras

# !pip install tensorflow  # ライブラリ「TensorFlow」をインストール
# !pip install keras  # tf.kerasの場合は不要だが、Kerasを使う場合はライブラリ「Keras」をインストール

from tensorflow.keras.datasets import cifar10  # tf.kerasを使う場合(通常)
#from keras.datasets import cifar10  # tf.kerasではなく、Kerasを使う必要がある場合はこちらを有効にする

(train_images, train_labels), (test_images, test_labels) = cifar10.load_data()

リスト2 TensorFlow(tf.keras)/KerasでCIFAR-10を利用する基本的なコード

 tf.keras.datasets.cifar10.load_data()関数を呼び出せばよい。

TensorFlow Datasets

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

import tensorflow_datasets as tfds

cifar10_train = tfds.load(name="cifar10", split="train")

リスト3 TensorFlow DatasetsでCIFAR-10を利用する基本的なコード

 TensorFlow Datasetsで使用できるデータセットは、こちらのページにまとめられており、tensorflow_datasetsモジュール(=tfds)のtfds.load()関数から利用できる。

PyTorch

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

import torch
import torchvision

cifar10_data = torchvision.datasets. CIFAR10(
    './cifar-10', train=True, download=True,
    transform=torchvision.transforms.ToTensor())

data_loader = torch.utils.data.DataLoader(cifar10_data,  batch_size=4,  shuffle=True)

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

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

ライブラリ機能を活用しない場合

 上記のようなライブラリを使わずに手動でCIFAR-10データセットを利用する場合は、CIFAR-10の公式ページ上にある、

  • CIFAR-10 Pythonバージョン
  • CIFAR-10 MATLABバージョン
  • CIFAR-10 バイナリバージョン(Cプログラムに最適)

という3つのファイルから、目的に合致するものをダウンロードすればよい。各ファイルの仕様やデータのロード方法については、公式ページを確認してほしい。

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

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

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

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

メールマガジン登録

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