Learningはじめにpart1では環境構築を行い、part2ではMNISTを試してみました。今回は食材を同定する画像認識システムを作ります。前回と違うのは自分で画像を用意するカラー画像という点です。「チュートリアル(MNIST)はできたけど挫折」、ということがぽろぽろあるみたいなので、ちぎれないように心を強く保ちます。ちなみに、なんで食材同定なのかというと、「冷蔵庫にある食材の写真を取って、今ある材料からレシピをレコメンドしてくれる」システムがあればいいなと思った次第です。ちなみにこのシステムを大学の課題で作成しました。最低限のレコメンドシステムですがこんな感じです。学習データを用意する今回は5種類の食材を認識することをゴールとしました。少なめではあったのですが、やはりデータを集めるのが大変でした。Flickerとかも使いましたが、なかなか求める画像が引っかからなくて悩みました。後から知りましたが、こちらに様々なデータセット(画像に限らず)がまとめてあるので利用できる場合は有効活用したいですね。arXivTimesスクレイピングで画像収集GoogleやBingの画像検索で探してきます。手動でダウンロードしてられないので、スクレイピングしました。今回はテストなので「carrot」、「cabbage」、「tomato」、「radish」、「onion」の5つの単語の検索結果を取得しました。画像検索ページってスクロールしないと全部表示できないので、本気出してたくさんデータ集めようと思ったらseleniumとか使う必要があるのかな、と想像。それぞれ100枚弱くらい集めてみました。*ブロッコリーや白菜が含まれていますが、一旦全部ダウンロードします。cabbageだそうです。Soupを使用しました。それぞれの食材ごとにディレクトリ分けて、ファイル名もいい具合に設定するとあとで楽です。適切な画像を選別5つのディレクトリに分けられた画像をチェックします。この時点で意にそぐわないものは除去します。ブロッコリーや白菜などこちらの意図から逸れて引っかかってしまったもの、キャベツスープや、にんじんおばけ(?)のイラストなど学習に適さないものです。ここはどうしても人力ですかね。効率を上げる工夫のしがいはありそうですが、今回はたかだか500枚程度だったので、サムネイル表示して選別しました。この時点で各食材50枚前後になりました。水増しさすがに50枚では心許ないので、データ数を水増しします。具体的には角度をずらす反転するぼかしを入れるなどの処理をした画像を作ります。人間なら傾いていようが、鏡写しだろうが、多少ぼやけてても認識できるよね、って考え方らしいです。これで10倍くらいにして、各500枚まで増やしました。Catsの訓練データが犬猫それぞれ12500枚ずつなのを考えるとずいぶん少ないですが、とりあえずのテストとしては十分でしょう。ここら辺の処理はPythonの画像処理ライブラリPillowを使用しました。学習する学習は前回MNISTでやったことを食材画像でやるだけです。カラー画像なのでグレースケールではなくRGBを使ったことに注意です。BeautifulSoup,scikit-learn,TensorFlowを使ってみよう」を大いに参考にしました。試しにMacでトレーニングさせたところ、20分ほどかかりました。比較のためにAzureのGPUインスタンスで実行したら30秒で済みました。今回は最低限手順を把握するのが目的だったので、一回しか回しませんでしたが、チューニングを繰り返して何度も学習をする場合にはGPUでやらないと時間がいくらあっても足りないですね。part1」にまとめてあります。テスト学習の結果、識別精度は70%ぐらいでした。本来ならカリカリチューニングをしていくのでしょうが、僕はまず全体像を完成させてから細かいところをリファインしていく方法が好きなので、一旦これで次のステップに進みます。人工知能の歴史的ブレークスルーの先に」によると人間のエラー率は5%ぐらいとのことなので、いずれは95%を目標にしたいと思います。まとめ今回、任意の画像に対して画像認識を行うことができるようになりました。今の所コンソール上で実行する必要があります。ネット記事を見ていてもここで終わってしまっているものが多いのですが、せっかく作ったのでウェブ上で動かしてみましょう。いうことで次回はこれまでの集大成として、食材認識サービスをウェブに公開します。一枚の画像に複数の食材が含まれている場合に対応できない点が改善点として挙げられます。後者はR-CNNを取り入れることで解消できそうです。R-CNNに関してはまた別途まとめたいと思いますが、ざっくりいうと画像の中の特定の部分を物体として認識し、その部分を今回出てきたCNNで何か識別するという流れをとります。CNNでは「何か」ということしかできませんでしたが、R-CNNでは「どれが」、「何か」まで識別できるようになるので複数の対象を処理できるのです。ディープラーニング、そこらへんのバズワードをさっくり知りたい人向け。人工知能が普及したらどうなるのか、読み物として面白いです。開発したい人には向いてないです。Pythonによるスクレイピング&機械学習スクレイピングでデータを集めて、自分で学習させるところまで学べます。全編が機械学習というわけではありませんが、実践的に機械学習を使って何かをしようとした時に付随して必要になる知識を勉強するのに役立ちます。「機械学習のアルゴリズム自体を構築したい」という人より、「機械学習を使って何かしたい」という人におすすめ。Learning学びの深い一冊です。ディープラーニングの中身を細かく解剖し、一つずつ自分で構築します。Tensorflowなどのライブラリを使わないので、これらのライブラリの中身がどうなっているかということも学べます。機械学習をブラックボックスではなくしっかり理解したい人向けです。technology.。