Fashion-MNIST:ファッション商品(写真)の画像データセット:AI・機械学習のデータセット辞典
データセット「Fashion-MNIST」について説明。7万枚の写真(ファッション商品)の「画像+ラベル」データが無料でダウンロードでき、画像認識などのディープラーニングに利用できる。scikit-learn、Keras/tf.keras、TensorFlow、PyTorchにおける利用コードも紹介。
データセット解説
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に含まれる「ファッション商品画像」の例
※データセットの配布元: 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が白となり逆なので注意してほしい)。
引用のための情報
このデータセットは、MITライセンスとなっている。
- The MIT License (MIT) Copyright © [2017] Zalando SE, https://tech.zalando.com
データセットを引用する際に使える情報を以下にまとめておく。
- 作成者: Han Xiao, Kashif Rasul, and Roland Vollgraf.
- タイトル: Fashion-MNIST: a Novel Image Dataset for Benchmarking Machine Learning Algorithms
- 公開日: Aug 28, 2017
- 論文: arXiv:1708.07747 [cs.LG]
- URL: https://github.com/zalandoresearch/fashion-mnist
利用方法
実際に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')
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()
tf.keras.datasets.fashion_mnist.load_data()関数を呼び出せばよい。
TensorFlow Datasets
# !pip install tensorflow tensorflow-datasets # ライブラリ「TensorFlow」と「TensorFlow Datasets」をインストール
import tensorflow_datasets as tfds
fashion_mnist_train = tfds.load(name="fashion_mnist", split="train")
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)
torchvision.datasetsクラスのコンストラクター(厳密には__init__関数)でデータセットのオブジェクトを生成してデータをダウンロードし、torch.utils.data.DataLoaderクラスのコンストラクターでデータローダーのオブジェクトを生成してデータをロードする。
Copyright© Digital Advantage Corp. All Rights Reserved.