下丸子のコネクショニスト

機械学習、人工知能などの話題について触れます。

Caffe+AlexNetでImageNet2012を学習してみた (1)

今回は下記の記事で導入したCaffeを用いて、ImageNetを学習してみる。

【メモ書き】Ubuntu 14.04 CUDA6.5 GTX970 Caffeインストール - 下丸子のコネクショニスト

 

ImageNet(イメージネット)は大規模画像認識のコンペティションを毎年開催している組織で、

Stanford大のFei-Feiなどが監修している。

コンペの正式名称をLarge scale visual recognition challengeというのだが、

ここでは単にImageNetと呼ぶことにする。

 

トロント大のHintonらとともにAlexが提案し、

今ではDeep Convolutional Neural Networkのベースモデルとして扱われている通称AlexNetは、

2012年のImageNetにて発表されたものだ。

AlexNetはCaffeのZoo(様々なニューラルネットワークのモデルを収録したカタログ)にも入っており、学習済みのモデルも提供されている。

今回の一連の記事の目標は、Caffeを使ってAlexNetをイチから学習し、再現することになる。

 

データの入手

まずはデータがないと始まらない。

ImageNetでは非商用目的の研究者向けにのみ元データを配布しており、今回は元データを取得することができた。

公式ページの下記のフォームから登録すると、データをDownloadする許可を申請することができる。筆者は個人のメールアドレスを用いて当初申請していたが、いつまでたっても許可されなかった。公用のアドレスで申請したら一日程度で許可を得ることができた。

f:id:yukisaito:20150307130825p:plain

なお研究者でない人は、ImageNetから画像のURLを取得し、URLを通してダウンロードすることで画像を揃える必要がある。

 

今回はAlexNetをターゲットにするので、Download links to ILSVRC2012 image data.からリンク先に飛んでダウンロードする。

今回ダウンロードしたものは下記の通り。

  • Training images
  • Validation images
  • Test images
  • Development kit

ダウンロードが完了するのに一日程度かかった。

 

データの整理

Caffe | ImageNet tutorialによると、学習データなどのディレクトリ構成は

/path/to/imagenet/train/n01440764/n01440764_10026.JPEG

/path/to/imagenet/val/ILSVRC2012_val_00000001.JPEG

 といったようにするのが望ましいらしい。

これにならって今回は

~/data/imagenet/train/n01440764/n01440764_10026.JPEG

~/data/imagenet/test/ILSVRC2012_test_00074997.JPEG

~/data/imagenet/val/ILSVRC2012_val_00000001.JPEG

のような構成にする。

 

mkdir ~/data

mkdir ~/data/imagenet

mkdir ~/data/imagenet/train

mkdir ~/data/imagenet/test

mkdir ~/data/imagenet/val

としてフォルダを作っておき、.tarをダウンロードしたフォルダ上で

tar -xf ILSVRC2012_img_train.tar -C ~/data/imagenet/train

tar -xf ILSVRC2012_img_test.tar -C ~/data/imagenet/test

tar -xf ILSVRC2012_img_val.tar -C ~/data/imagenet/val

として解凍する。これには数時間かかる場合がある。

 

この時点でtest, valの画像はきちんと解凍されているのだが、

trainは学習クラスごとの画像がまとめられたtarファイルが生成されているので、

もう一度解凍する必要がある。

しかしtarコマンドをそのまま使うだけでは

~/data/imagenet/train/n01440764/n01440764_10026.JPEG

のような構成にはならず、trainフォルダにすべて解凍されてしまう。

そこで

~/data/imagenet/train/untarimage.sh

に.shファイルを作り、下記の内容を記述して実行した。

 #!/bin/sh

files="./n*.tar"

for filepath in ${files}
do
  filename=`basename ${filepath} .tar`
  mkdir ${filename}
  tar -xf ${filename}.tar -C ${filename}
done

 

 上記のshファイルを実行することで、画像がフォルダごとに分けて解凍される。

なおここでも数時間かかるので注意。

 

これでデータの準備は整った。

次回はcaffeを実行していく。