はじめに
画像系の入門データとして、手書き文字のMNISTは最もよく使われるデータの1つかと思います。
KerasやChainerなど主要なフレームワークには、ダウンロードして配列に格納するといった処理を行う関数を用意しているので、簡単に扱うことができます。
# keras (X_train, y_train), (X_test, y_test) = keras.datasets.mnist.load_data() # chainer train, test = chainer.datasets.get_mnist() # pytorch train = torchvision.datasets.MNIST('./data', train=True, download=True) test = torchvision.datasets.MNIST('./data', train=False)
学習のために画像ファイルで扱いたかったので、Chainerのget_mnist()を参考に、変換スクリプトを書いてみました。
変換スクリプト
作成したスクリプトは
requestsでMNISTのファイルをダウンロード(donwload)structやordバイナリファイルを読み込み配列に格納(load)Image.fromarrayでPIL.Image形式に変換してjpgで保存(make_images)- ファイル名とラベルが書かれたリストを作成(
make_labellist)
といった流れになります。また、Python 3.6で動きます。
Download and Convert MNIST binary files to image f ...
実行例
python mnist_to_image.py --path ./data
のように実行すると、指定したフォルダに以下のようにファイルが生成されます。画像のファイル名は{ラベル}_{添字}.jpgとなっています。
data
├── processed
│ ├── images
│ │ ├── test
│ │ │ ├── 0_10.jpg
│ │ │ ├── 0_1001.jpg
│ │ │ ├── 0_1009.jpg
│ │ │ ├── ...
│ │ └── train
│ │ ├── 0_1.jpg
│ │ ├── 0_1000.jpg
│ │ ├── 0_10005.jpg
│ │ ├── ...
│ ├── labels
│ │ ├── test.csv
│ │ └── train.csv
└── raw
├── t10k-images-idx3-ubyte.gz
├── t10k-labels-idx1-ubyte.gz
├── train-images-idx3-ubyte.gz
└── train-labels-idx1-ubyte.gz
labels/train.csvやtest.csvは以下のように、ファイル名とラベルが書かれたリストです。
5_0.jpg,5 0_1.jpg,0 4_2.jpg,4 1_3.jpg,1 9_4.jpg,9