コンピュータビジョンMNISTの数字画像はそろそろ飽きてきた(笑)ので一般物体認識のベンチマークとしてよく使われているCIFAR-10という画像データセットについて調べていた。Imagesからサブセットとして約6万枚の画像を抽出してラベル付けしたデータセット。Krizhevskyさんとのこと。いう泥臭い仕事もしていたなんて尊敬する。Imagesは類似画像検索(2009/10/3)で少し言及したことがあった。初出はこの論文(PDF)だと思うけれど、最初に読んだときいろいろな画像があってとてもわくわくし、いつか使ってみたいと思った覚えがある。Learningを使った一般物体認識が主目的。隠れ層の圧縮データを使って類似画像検索もできるらしいので後で試してみたい。特徴をまとめておこう。truckで10クラス50000枚(各クラス5000枚)の訓練画像と10000枚(各クラス1000枚)のテスト画像に分割されているクラスラベルは排他的PythonのcPickle形式で提供されている最後が重要。BMPやPNGといった画像ファイルが60000枚提供されているわけではなく、ピクセルデータ配列としてPythonから簡単に読み込める形式で提供されている。Python使い歓喜!逆に言うとピクセルデータしか提供されていないので人の目に見える画像として表示するには一手間かかる。人工知能がものを「見る」ためにはピクセルデータの数列さえあればよいが、人間が見るためにはそういうわけにはいかない。いうわけで今回はこの画像セットをロードして画像として描画するところまでやってみたい。versionをダウンロード。テスト画像(1万枚)というファイルが出てくる。訓練画像は1万枚ずつ別のファイルになっている。全部、PythonのcPickleのバイナリダンプ形式のためcPickleモジュールでロードできる。ロードするとPythonのlist、dict、numpy.ndarrayのオブジェクトとしてすぐに使える。ファイルをロードするにはホームページに記載されている通り下の関数でできる。多くはdict形式なのでkeys()でどんなデータが格納されているか簡単に調べられる。CIFAR-10の描画data_batch_1の1万枚の画像から各クラス10枚の画像をランダムに描画してみよう。実行するたびに違う画像が表示される。Pythonで描画するときはmatplotlibのimshow()が使える。順番に並び変える必要がある。オリジナルの画像はchannel(3チャンネル)、row(32ピクセル)、column(32ピクセル)のフラット形式3*32*32=3072次元ベクトルの形で格納されている。[2]column)の3次元arrayに変換している。順番に変更するためにnumpyのtranspose()を使って次元を入れ替えている。column)の順番でよいらしいので元のままでOK。実行するとCIFAR-10の元サイトにあるような画像が描画できる。解像度がピクロスレベルの32x32しかないためすごく識別しにくいが何となくわかる。してこの10種類のクラスを選んだのかはっきりしないけれど、動物と乗り物が好きだったのかな?(笑)次回は、与えた画像が10種類のどのクラスかを当てる一般物体認識と呼ばれるタスクを畳み込みニューラルネットワークで解いてみたい。Network今回は畳み込みニューラルネットワーク。»プロフィールid:aidiary人工知能とその関連分野に興味があります。)はてなブログをはじめよう!aidiaryさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。