機械学習で便利な画像データセット「MNIST」を丁寧に解説!

機械学習で便利な画像データセット「MNIST」を丁寧に解説!

機械学習の画像認識の学習において、初心者でも使いやすく、サンプルデータとしてもよく利用されているのが「MNIST(エムニスト)」のデータセットです。MNISTは使いやすさだけではなく、他のライブラリでも簡単に取得することができる、応用力の高いデータセットです。

この記事ではMNISTとは何かをわかりやすく解説。さらに、ダウンロード方法やTensorflowKerasChainer(※1)での取得方法まで紹介します。

(※1)2019年Preferred Networks(PFN)は2019年12月、同社が開発する深層学習フレームワーク「Chainer」のメジャーアップデートを終了すると発表。今後は、米Facebookが主導する深層学習フレームワーク「PyTorch」へ順次移行する。

MNISTとは?

MNIST(Mixed National Institute of Standards and Technology database)とは、手書き数字画像60,000枚と、テスト画像10,000枚を集めた、画像データセットです。さらに、手書きの数字「0〜9」に正解ラベルが与えられるデータセットでもあり、画像分類問題で人気の高いデータセットです。

MNISTは深層学習(ディープラーニング)の手法の1つであるニューラルネットワークを学ぶ上でも便利ですし、機械学習の入門のデータセットとしてもよく使われています。

手軽に入手できる点も含めて、人工知能(AI)の勉強を始める入り口としてMNISTは人気の高いデータセットです。

コンピュータ・ビジョンとは?

MNIST解説する前に、覚えておいていただきたいのが「コンピュータ・ビジョン」です。

コンピュータ・ビジョンとは、科学技術分野のうちの1つで、コンピュータを用いた視覚( Vision)の実現を研究する学術分野です。

コンピュータ

コンピュータ・ビジョンを活用して行える例として、画像分類や画像認識があります。畳み込みニューラルネットワークを使用すれば、これらの分類や認識を良好に機能させてくれます。

畳み込みニューラルネットワークは深い層を持った、ニューラルネットワークの種類のうちの1つですが、ニューラルネットワークについて詳しく知りたい人は「ニューラルネットワークとは?人工知能の基本を初心者向けに解説!」を見てみてください。

そして、コンピュータ・ビジョンを活用しているものの1つに、MNISTがあります。MINSTは、コンピュータ・ビジョンを使用し、手書きの数字が書かれている画像データから正解ラベルを導き出すことができます。

MNISTは教師あり学習のデータセットなので、学習データには正解ラベル、もしくはクラスが与えられています。(詳しくは次の章で解説します)

\文字より動画で学びたいあなたへ/

Udemyで講座を探す >

MNISTのデータ仕様について

続いてMNISTのデータ仕様についてわかりやすく解説します。

MNISTのデータセットは、手書きで書かれた数字が画像になった画像データと、その画像に書かれた数字の正解となるラベルデータで構成されています。そして、画像データとラベルデータのペアは学習用に60,000個、検証用に10,000個あります。

そして、MNISTのデータは以下の4つのファイルで構成されています。

train-images-idx3-ubyte: 学習用の画像データセット
train-labels-idx1-ubyte: 学習用のラベルデータセット
t10k-images-idx3-ubyte:検証用の画像データセット
t10k-labels-idx1-ubyte:検証用のラベルデータセット

MNISTの画像データについて

まずは、MNISTのデータセットに含まれている、学習用の画像データセット(train-images-idx3-ubyte)と、検証用の画像データセット(t10k-images-idx3-ubyte)のフォーマットについて解説します。

画像データセットのフォーマットは以下になります。

offset type value description
0000 32 bit integer 0x00000803(2051) 識別子(定数)
0004 32 bit integer 60000 画像データの数
0008 32 bit integer 28 1画像あたりのデータ行数
0012 32 bit integer 28 1画像あたりのデータ列数
0016 unsigned byte 0〜255 1つ目の画像の1ピクセル目の値
0017 unsigned byte 0〜255 1つ目の画像の2ピクセル目の値
xxxx unsigned byte 0〜255 最後の画像の784ピクセル目の値

画素数であるピクセルの値は、0から255まであり、0が白、255が黒を表しています。

ラベルデータについて

つづいて、MNISTの学習用のラベルデータ(train-labels-idx1-ubyte)と、検証用のラベルデータ(t10k-labels-idx1-ubyte)について解説します。

ラベルデータのフォーマットは以下になります。

offset type value description
0000 32 bit integer 0x00000801(2049) 識別子(定数)
0004 32 bit integer 60000 or 10000 ラベルデータの数
0008 unsigned byte 0〜9 1つ目のデータのラベル
0009 unsigned byte 0〜9 2つ目のデータのラベル
xxxx unsigned byte 0〜9 最後のデータのラベル

ラベルは画像がどの数字を表しているのかを示す、0から9までの数値です。

【簡単】MNISTのダウンロード方法!

最後に、MNISTのダウンロード方法、そして「Tensorflow」「Keras」「Chainer(※1)」のライブラリ別でのデータ利用方法について解説します。

ダウンロード方法

MNISTはこちらのサイトからダウンロードできます。サイトに書かれている以下の項目をダウンロードしてください。

train-images-idx3-ubyte.gz:  training set images (9912422 bytes)
train-labels-idx1-ubyte.gz:  training set labels (28881 bytes)
t10k-images-idx3-ubyte.gz:   test set images (1648877 bytes)
t10k-labels-idx1-ubyte.gz:   test set labels (4542 bytes)

Tensorflow(テンソルフロー)の場合

Googleが提供するオープンソフトライブラリである「Tensorflow」には、MNISTデータを使用したチュートリアルがあります。「Tensorflow」をインストールした後、以下のinput_dateを使用することで取得できます。

from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets(“/tmp/mnist_data/”, one_hot=True)

Keras の場合

Pythonで書かれたオープンソースニューラルネットワークライブラリである「Keras」でも、MNISTデータセットが提供されています。以下のコードを書けばKerasでもMNISTデータセットを取得できます。

from keras.datasets import mnist (x_train, y_train), (x_test, y_test) = mnist.load_data()

Chainer の場合(※1)

さらに、ニューラルネットワークの計算、そして学習をするオープンソースソフトウェアライブラリである「Chainer」でもMNISTデータセットを取得することができます。以下のコードでMNISTデータセットを取得することができます。

import chainer train, test = chainer.datasets.get_mnist()

(※1)2019年Preferred Networks(PFN)は2019年12月、同社が開発する深層学習フレームワーク「Chainer」のメジャーアップデートを終了すると発表。今後は、米Facebookが主導する深層学習フレームワーク「PyTorch」へ順次移行する。

人工知能(AI)や機械学習のサンプルデータとして頻繁に利用されるのが、MNISTのデータセットです。MNISTの学習を入り口にして、人工知能(AI)を学び始めてみてはいかがでしょうか?