4,106 views
この記事は最終更新から 1812日 が経過しています。
1. CIFAR10画像セットを入手
まだ MNISTもちゃんと自動認識できていないけれど、他の画像セットにもちょっと興味あり。
そこで CIFAR10 なるカラー画像セットを見てみることにした。提供元はこちら(↓)
https://www.cs.utoronto.ca/~kriz/cifar.html
ダウンロードできるファイルは以下の3種類(2013年10月11日時点)、最近Octaveがお気に入りの自分はMATLAB用を選択。
2. CIFAR10画像セットを解凍
早速Linux上で解凍してみる。
[user@dog-server]$ ls cifar-10-matlab.tar.gz [user@dog-server]$ tar zxf cifar-10-matlab.tar.gz [user@dog-server]$ ls cifar-10-batches-mat cifar-10-matlab.tar.gz [user@dog-server]$
すると、以下のような8個のファイルができた。
[user@dog-server]$ ls -l 合計 179148 -rw-r--r--. 1 user user 299 4月 23 05:57 2010 batches.meta.mat -rw-r--r--. 1 user user 30568167 4月 23 05:50 2010 data_batch_1.mat -rw-r--r--. 1 user user 30576389 4月 23 05:50 2010 data_batch_2.mat -rw-r--r--. 1 user user 30572622 4月 23 05:50 2010 data_batch_3.mat -rw-r--r--. 1 user user 30565850 4月 23 05:50 2010 data_batch_4.mat -rw-r--r--. 1 user user 30572760 4月 23 05:50 2010 data_batch_5.mat -rw-r--r--. 1 user user 88 4月 23 05:50 2010 readme.html -rw-r--r--. 1 user user 30570596 4月 23 05:50 2010 test_batch.mat [user@dog-server]$
とりあえず.matファイルをOctaveでロードして、中身を順番に眺めてみる。
(1) batches.meta.mat
画像のラベル名称が書かれている。ラベル1は飛行機、ラベル2は自動車、ラベル10はトラックとのこと。
octave:1> whos -file batches.meta.mat
Variables in the file batches.meta.mat:
Attr Name Size Bytes Class
==== ==== ==== ===== =====
label_names 10x1 50 cell
Total is 10 elements using 50 bytes
octave:2> load('batches.meta.mat')
octave:3> label_names
label_names =
{
[1,1] = airplane
[2,1] = automobile
[3,1] = bird
[4,1] = cat
[5,1] = deer
[6,1] = dog
[7,1] = frog
[8,1] = horse
[9,1] = ship
[10,1] = truck
}
(2) data_batch_1.mat ~ data_batch_5.mat
学習用の画像+ラベルのセットが10,000個×5ファイルの全60,000個が格納されている。
「3072」は1画像のバイトサイズで、内訳は 32pixel x 32pixel x RGB3色 x uint8 = 3,072[bytes] で計算できる。
octave:5> whos -file data_batch_1.mat Variables in the file data_batch_1.mat: Attr Name Size Bytes Class ==== ==== ==== ===== ===== batch_label 1x21 21 char data 10000x3072 30720000 uint8 labels 10000x1 10000 uint8 Total is 30730021 elements using 30730021 bytes octave:6> load('data_batch_1.mat') octave:7> batch_label batch_label = training batch 1 of 5
(3) test_batch.mat
テスト用の画像+ラベルのセットが10,000個格納されている。
octave:10> whos -file test_batch.mat Variables in the file test_batch.mat: Attr Name Size Bytes Class ==== ==== ==== ===== ===== batch_label 1x20 20 char data 10000x3072 30720000 uint8 labels 10000x1 10000 uint8 Total is 30730020 elements using 30730020 bytes octave:11> load('test_batch.mat') octave:12> batch_label batch_label = testing batch 1 of 1
3. CIFAR10画像セットを見てみる
どんな画像が入っているのか?実際に画像表示してみる。
画像化して眺める手順は (2)MNIST学習画像を見てみる と同じだ。
試しに学習画像の最初の1個をOctave上で画像化してみる。
octave:1> load('data_batch_1.mat') octave:2> img = data(1,:); octave:3> size(img) ans = 1 3072 octave:4> img=reshape(img(:),32,32,3); octave:5> size(img) ans = 32 32 3 octave:6> imshow(uint8(permute(img,[2 1 3])))
なんだ???
よくわからないので先頭データのラベルを見てみる。
octave:8> labels(1) ans = 6
ラベル番号が6番なので「[6,1] = dog」のようだ。
この画像が犬なのか?
CIFAR10のホームページを見ると、ラベル番号は0~9を付与すると書かれている。
先ほど見た label_names変数の値は 1始まりだった。ラベル番号は 0始まりの6なので、1始まりに直せば 7だから「[7,1] = frog」が正しいラベルだ。
ややこしい…
続けていくつか見てみる。
(2)#10 truck |
(3)#10 truck |
(4)#5 deer |
(5)#2 automobile |
(6)#2 automobile |
(7)#3 bird |
(8)#8 horse |
(9)#9 ship |
(10)#4 cat |