はじめに
画像系の入門データとして、手書き文字の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