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

AI・機械学習のデータセット辞典:Fashion-MNIST:ファッション商品(写真)の画像データセット

データセット「Fashion-MNIST」について説明。7万枚の写真(ファッション商品)の「画像+ラベル」データが無料でダウンロードでき、画像認識などのディープラーニングに利用できる。scikit-learn、Keras/tf.keras、TensorFlow、PyTorchにおける利用コードも紹介。

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

連載目次

データセット解説

 Fashion-MNISTデータセット(以下、Fashion-MNIST)は、

  • ラベル「0」: T-shirt/top(Tシャツ/トップス)
  • ラベル「1」: Trouser(ズボン)
  • ラベル「2」: Pullover(プルオーバー、頭から被って着る服)
  • ラベル「3」: Dress(ドレス)
  • ラベル「4」: Coat(コート)
  • ラベル「5」: Sandal(サンダル)
  • ラベル「6」: Shirt(シャツ)
  • ラベル「7」: Sneaker(スニーカー)
  • ラベル「8」: Bag(バッグ)
  • ラベル「9」: Ankle boot(アンクルブーツ、かかとが隠れる丈のブーツ)

という10種類の「ファッション商品」写真の画像データセットである(図1)。

図1 Fashion-MNISTに含まれる「ファッション商品画像」の例 図1 Fashion-MNISTに含まれる「ファッション商品画像」の例
データセットの配布元: GitHub「fashion-mnist/zalandoresearch」。The MIT License (MIT) Copyright © [2017] Zalando SE, https://tech.zalando.com
出典: Fashion-MNIST: a Novel Image Dataset for Benchmarking Machine Learning Algorithms. Han Xiao, Kashif Rasul, Roland Vollgraf. arXiv:1708.07747

 Fashion-MNISTは、主に画像認識を目的としたディープラーニング/機械学習の研究や初心者向けチュートリアルで使われること、つまりMNISTの「ファッション商品画像版」(いわば強化版)として使われることを意識している。そのため例えば、MNISTは「0」〜「9」という10種類の手書き数字データセットとなっているが、Fashion-MNISTも前述した通り、10種類の写真データセットとなっているのである。MNISTには「高い精度が出すぎてしまう」という欠点があるが、本稿で紹介するFashion-MNISTに置き換えることでその欠点を回避できる可能性がある。

 Fashion-MNISTデータセット全体は(MNISTと同じく)、

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

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

  • 8bitグレースケール(=色がないモノクローム): 白「0」〜黒「255」の256段階
  • 28×高さ28フィールド(=784フィールド)

となっている(「フィールド」=データを画像化する場合には「ピクセル」に対応する。RGBで作るグレースケールでは、0が黒で、255が白となり逆なので注意してほしい)。

図2 Fashion-MNISTに含まれる画像データの内容 図2 Fashion-MNISTに含まれる画像データの内容

引用のための情報

 このデータセットは、MITライセンスとなっている。

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

利用方法

 実際にFashion-MNISTを使うには、scikit-learn/Keras/TensorFlow/PyTorchといった各ライブラリが提供する機能を利用することをお勧めする。というのも、Fashion-MNISTの公式ページからダウンロード可能な、

  • train-images-idx3-ubyte.gz: 訓練データ用の画像(6万枚)
  • train-labels-idx1-ubyte.gz: 訓練データ用のラベル(6万枚)
  • t10k-images-idx3-ubyte.gz: テスト用の画像(1万枚)
  • t10k-labels-idx1-ubyte.gz: テスト用のラベル(1万枚)

という4つのファイルは、.jpgのような一般的な画像ファイルではなく、独自のフォーマットを持つ単一(=複数の画像データがひとまとめになった形式)の画像データセットだからである(ファイルフォーマットの仕様は、MNIST公式ページの「FILE FORMATS FOR THE MNIST DATABASE」および「THE IDX FILE FORMAT」を確認してほしい)。

 ライブラリを使わない場合、この画像フォーマットを読み込むためのリーダーをプログラムとして作る必要がある。プログラムの作成は難しくはないが、多くの人が使うものなので、主要な機械学習&ディープラーニングのライブラリでは基本機能としてFashion-MNISTをロードする機能が含まれている。よってそのロード機能を活用して、ムダな作業を減らすことを本稿ではお勧めする。

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

scikit-learn

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

from sklearn.datasets import fetch_openml

fashion_mnist = fetch_openml('Fashion-MNIST')

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

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

TensorFlow(tf.keras)/Keras

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

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

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

リスト2 Keras/tf.kerasでFashion-MNISTを利用する基本的なコード

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

TensorFlow Datasets

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

import tensorflow_datasets as tfds

fashion_mnist_train = tfds.load(name="fashion_mnist", split="train")

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

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

PyTorch

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

import torch
import torchvision

fashion_mnist_data = torchvision.datasets.FashionMNIST(
    './fashion-mnist', train=True, download=True,
    transform=torchvision.transforms.ToTensor())

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

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

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

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

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

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

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

メールマガジン登録

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