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です。
(2017/10/29追記)
Docker Hubで10/28にリリースされたDIGITS 6 (nvidia/digits:6.0)では、GitHubのタグがv6.0.0からHotfix releaseのv6.0.1に変更されました。
以下のコマンドで、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の組み合わせで試してみました。