NVIDIA DIGITS 6でFashion-MNISTを試してみた

Fashion-MNISTというデータセットが公開されていましたので、NVIDIA DockerとNVIDIA DIGITS 6の組み合わせで試してみました。

DIGITS 6にはFashion-MNIST用のコマンドは用意されていないのですが、Fashion-MNISTはMNIST互換を目指して作成されているようなので、ほぼURLの変更だけでDIGITS 6に対応させることができました。

スポンサーリンク

Fashion-MNIST

Fashion-MNISTのサイトは、こちら(https://github.com/zalandoresearch/fashion-mnist)です。

Datasetのダウンロード

DIGITSには、MNIST、CIFAR-10、CIFAR-100をダウンロードして、DIGITS用のフォルダ構成に変換するPythonモジュールが用意されています。

今回は、MNISTのダウンロードに必要なファイル(downloader.pyとmnist.py)を一部変更して、 Fashion-MNISTをダウンロードします。

以下のコマンドで、ファイルの準備を行います。

$ cd ~/data/digits/
$ wget https://github.com/NVIDIA/DIGITS/blob/digits-6.0/digits/download_data/downloader.py
$ wget https://github.com/NVIDIA/DIGITS/blob/digits-6.0/digits/download_data/mnist.py
$ mv mnist.py fashionmnist.py

エディタで、fashionmnist.pyの下記URLを

            'http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz',
            'http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz',
            'http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz',
            'http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz',

以下のように変更して保存します。

            'http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-images-idx3-ubyte.gz',
            'http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-labels-idx1-ubyte.gz',
            'http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-images-idx3-ubyte.gz',
            'http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-labels-idx1-ubyte.gz',

Python 2.7系のipython等で、以下のコマンドを実行します。

$ ipython
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
Type "copyright", "credits" or "license" for more information.

IPython 5.3.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: import fashionmnist

In [2]: dataset = fashionmnist.MnistDownloader('fashionmnist', 'clean')

In [3]: dataset.getData()
Downloading url=http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-images-idx3-ubyte.gz ...
Downloading url=http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-labels-idx1-ubyte.gz ...
Downloading url=http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-images-idx3-ubyte.gz ...
Downloading url=http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-labels-idx1-ubyte.gz ...
Uncompressing file=train-images-idx3-ubyte.gz ...
Uncompressing file=train-labels-idx1-ubyte.gz ...
Uncompressing file=t10k-images-idx3-ubyte.gz ...
Uncompressing file=t10k-labels-idx1-ubyte.gz ...
Reading labels from fashionmnist/train-labels.bin ...
Reading images from fashionmnist/train-images.bin ...
Reading labels from fashionmnist/test-labels.bin ...
Reading images from fashionmnist/test-images.bin ...
Dataset directory is created successfully at 'fashionmnist'

In [4]: exit

正常終了すると、fashionmnistディレクトリが作成され、このディレクトリの中に、trainディレクトリとtestディレクトリが作成されています。

DIGITS 6

Dockerイメージのダウンロード

GitHubのDIGITS 6(GitHubのタグは、v6.0.0、https://github.com/NVIDIA/DIGITS/releases/tag/v6.0.0)に対応するDockerイメージが、Docker Hubのnvidia/digits(https://hub.docker.com/r/nvidia/digits/)のタグ:6.0です。

以下のコマンドで、DIGITS 6のDockerイメージをpullします。

$ docker pull nvidia/digits:6.0

Dockerコンテナの起動

DIGITS 6の場合、DIGITSのport番号5000に加え、TensorFlowのTensorBoardを使用できるように、port番号6006を追加した以下のコマンドで、DockerイメージからDockerコンテナを起動します。なお、”/home/sora/digits6-jobs”と”/home/sora/data”の部分は、自分の環境に合わせて変更する必要があります。

$ nvidia-docker run --name digits6 -d \
 -p 5000:5000 \
 -p 6006:6006 \
 -v /home/sora/digits6-jobs:/jobs \
 -v /home/sora/data:/data \
 nvidia/digits:6.0

Firefox等のブラウザを起動し、URLにlocalhost:5000を入力すると、DIGITS「Home」ページが表示されます。

DIGITS Datasetの作成

DIGITS「Home」ページの「Datasets」タブを選択し、右側にある「New Dataset」下の「Images」ボタンをクリックし、プルダウンメニューから「Classification」を選択すると、「New Image Classification Dataset」 ページが表示されます。

このページで、以下の図のように設定して、Datasetを作成します。

なお、「Separate validation images folder」にチェックを入れ、testディレクトリを指定することで、testディレクトリのデータをval用データとして使用します。

作成されたFashion-MNISTのDatasetは、以下の図のように、trainデータが合計60k(各クラス6k)、valデータが合計10k(各クラス1k)となっています。

上の図の「Explore the db」をクリックすると、以下の図のようにデータベース内の画像を確認することができます。

DIGITS Modelの作成

Fashion-MNISTに対し、CaffeのLeNetモデルでトレーニングした結果が、以下の図となります。

DIGITS Modelによる予測

以下の図が、testデータに対する精度(accuracy)とコンフュージョン・マトリックスになります。

Fashion-MNISTの精度は91.04%。MNISTと比較すると、かなり低目の精度となっています。また、コンフュージョン・マトリックスを見ると、クラス6(Shirt)の精度が低くなっていることが分かります。

まとめ

Fashion-MNISTというデータセットが公開されていましたので、NVIDIA DockerとNVIDIA DIGITS 6の組み合わせで試してみました。