あさの畑

ランニングや自転車の記事、書評記事、人工知能や深層学習に関する記事、興味があること全部詰め込みブログです

【Deep Learning実践編】ひたすら調べて自分でなんとかAIによる画像認識をしてみた

以前書いた記事の続編(後編)ということになります。

 

こちら→【Deep Learning勉強編】僕はDeep Learningに魅せられて勉強を始めた - あさの畑

 

 

とりあえずディープラーニングの基本的なことは理解したつもりでした。

 

しかし、自分で作ろうと思っても全くどうしたらいいのかわからないことに気づき、勉強法を変えることにしました。

 

「動画を見たり、本を読んだりするのはもちろん大切だが、サンプルコードを写しているだけや、用意されたデータセットを使っているだけではいけない。とにかく自分でなにか作ってみて実践力をつけるしかない。」

そう思ったのです。

 

記事読み込み期

まず僕は、とにかく実際にディープラーニングを用いて画像認識をされている記事を読み漁りました。

 

その中で僕の「樹皮画像から樹種を同定したい」という思いと非常に近くて大変参考になったのが、こちらの記事です。

 

「ディープラーニング×きゅうり」の可能性に、たったひとりで取り組むエンジニア

 

かなり有名みたいですが、僕は初めて知りました。1ヵ月前まで全く興味がなかったので当然と言えば当然かもしれませんが…。

 

他にも参考になる記事がいくつもありました。ありがとうございます!

 

ディープラーニングでザッカーバーグの顔を識別するAIを作る①(学習データ準備編)

TensorFlowによるももクロメンバー顔認識(前編)

機械学習で乃木坂46を顏分類してみた - Aidemy Tech Blog

 

 

TensorFlowと奮闘、だが失敗。

どうやら「TensorFlow」というフレームワークが有名でいいらしいということなのでさっそくインストールして英語のチュートリアルに挑みました。

 

でも、

英語だし、難しいし、よくわからない。

 

とりあえず、MNISTチュートリアルの完成コードを実行してディープラーニングを体験してみることはできましたが、コードの書き方は依然としてわかりません。

 

いろいろ調べていると「Keras」というフレームワークがわかりやすいみたいだと知り、TensorFlowは諦めてKerasでやっていくことにしました。

 

Kerasだと日本語の詳しいページがある上にコードが短くて書きやすいので初心者にもおすすめだそうです(これは本当に感じました)。

 

Kerasでディープラーニング。気合で乗り切る1週間

とは言ってもそう簡単にコードが書けるようになるわけではないので、再び様々な記事を読み込むことに。ひたすら読んでいるとだんだんわかってきます。

 

こちらの記事が参考になりました。ありがとうございます!

顔認識をしてみた記事が多い中、こちらは花の識別や物体認識なのでとても参考になりました。

 

keras(tensorflow)で花の画像から名前を特定

KerasでCIFAR-10の一般物体認識 - 人工知能に関する断創録

 

しかし、つまずいたポイントもいくつかありました。特に、、、

 

データセットの作成

一番はやはり自分で画像のデータセットを作るところ。

 

MNISTは使いやすい形になっていますが、自分のデータを使って学習させたいなら、まずは画像データセットを作成しないといけません。ここがけっこう難しかったです。

 

画像を読み込んだり正解ラベルをつけたり配列にまとめたり。また、サイズなどデータの形や大きさにも注意を払わないといけないのが大変でした。

 

1週間ぐらい画像の読み取りのことしか考えていませんでした。(笑)

ご飯食べてる時も、授業中も、歩いてる時も。何をしているときも画像の読み込みとデータセットの作成のことで頭がいっぱい。

 

そしてなんとか学習モデルに入力できる形に画像データを変換できました!

 

わい天才かもしれん!(←弱虫ペダルの鳴子章吉くん風)

 

よし、あとは写真を撮ってこればいいだけだ。

そうです、実際の画像はまだありません。画像があるとしてとりあえずデータセット作成のコードを書いていたのです。ですので画像さえ入手できればデータセットは完成します。

 

参考にさせていただいた記事はこちらです。ありがとうごさいます。

 

オリジナルのデータセットを読み込むための準備

機械学習(ディープラーニング)初心者のためのデータセットにまつわる話

TensorFlowとCNNで、自作データセットを画像分類する

Python, Pillowで画像を一括リサイズ(拡大・縮小) | / note.nkmk.me

Pythonでのファイル操作

 

 

写真を集めてきて、モデルを適当に組んで、実行。

モデルはいろんなところに書かれているので、それらを参考にして適当に組んでみました。

 

初めて自分のデータで学習が進んでいく。。。

 

あーーー!

 

ようやく長いトンネルを抜けたような気分。

 

もちろん精度はまだまだです。(というか、うまく学習が進んでいません…)

しかし、エラー画面ばかりだったので、認識精度(accuracy)が表示されるまでいったのがとてもうれしかったのです!!

 

今後の課題としては、モデルの構築をやり直して精度を上げることです。(その前にちゃんと学習が進むこと。)

また、データ拡張をして画像データを増やす必要もあるかもしれません。

 

まだまだ、やるべきことが多くてようやくスタートラインに立てただかけかもしれませんが、少しずつ前に進んでいこうと思います。

 

ちなみに、今のところ正解率が40%なので恥ずかしくてコードを見せることもできません(笑)

CNNモデルを適当に組み立てちゃったのでしょうがないのかもしれませんが…。

 

精度が上がればコードもお見せしたいと思います。

しばしお待ちを。。。

 

※追記

データ拡張と転移学習によりテストデータの正解率が97%を超えました。

 

こちらの記事で詳しくまとめましたので、よろしければどうぞ!

Deep Learningを用いた樹皮画像による樹種同定(Keras, CNN, 転移学習, VGG16) - あさの畑