画像認識への道のりと壁

TensorFlow を使って何かしてみようと思ってから数ヶ月経った。

MNIST だけ試したことがありますが、あれはノーカンなのでとりあえず画像認識でもして TensorFlow の使い方に慣れていこうという第一歩です。

スポンサーリンク

はじめに

画像の多クラス分類

画像を見せて分類するというのをやりたいと思います。万単位の画像を読み込んで学習させることで、機械は人間の気づかないような特徴量までも発見し、幾つかのクラスに分類できるようになります。

教師あり学習

テストデータを用いずに分類の仕方をすべて機械に任せることもできますが、今回は人間が決めたクラスに分類してもらいます。

畳み込みニューラルネットワーク

Convolutional Neural Nerwork は画像認識によく使われます。畳み込み層があることで、一部の特徴量にこだわりすぎることがなく、頑健性のあるモデルができます。

手順

画像の収集

機械学習に欠かせないのはデータです。画像認識の場合は、大量の画像が必要になります。ここが最も大変なところです。

教師あり学習の場合、データは大きく分けると訓練用とテスト用に分けられます。それぞれ数千枚から数万枚あるのが望ましいところですが、それを拾ってくるのとラベル付けでかなり疲労しそうです。そのために ImageNet などの各種データセットが公開されているわけですが、独自の画像認識モデルを作りたいとなると、それらを利用できません。

画像にも条件があります。縮小したりすると歪むので、正方形でなくてはなりません。インターネット上にある画像のほとんどは長方形なので、都合のいいように切り出す必要があります。顔認識では Haar-Like 特徴量などを用いて切り出したりしますが、これも顔認識でなければ応用できません。

ラベル付け

画像には正しいラベルを付けておかないと学習できないので、すべて目で確認していくのも重労働です。ここをクラウドソーシングとかで楽に済ませられればよかったり…

モデル構築

TensorFlow を使って学習モデルを作ります。各層をどのように配置するかとか、最適化関数には何を使うかとか考えながらソースコードを書いていきます。

訓練

実際にデータを読み込んで訓練した結果でモデルが完成します。モデルさえあれば、学習しなくても画像認識ができます。

訓練には強力な GPU があると最もいいですが大抵持っていないので、高性能 CPU で我慢するか、Google Cloud Platform などの外部サーバを利用します。

最後に

TensorFlow が登場して一年が経過し、ソースコードもいくつか上がっているのでそれを参考にすればモデルを構築するのは (知識が不足していても) 可能です。

ただ、画像だけはなんともなりません。どうやって拾ってきたものか…

画像収集をプログラムで頑張ったとしてもラベル付けが辛いですね。

スポンサーリンク

コメント・質問する