機械学習でよくわからないまま画像識別して遊んでみる その4
前回までの結果ではAccord.NET使えねーとなってしまいそうですが使えないのは私です。
機械学習において大事なのは訓練用のデータだとどこかで読みました。 多分Bingの結果をそのまま渡したらダメなんだと思います。
とりあえずBingから持ってきたデータから明らかにダメそうなのを消してもう一度学習させました。 ついでに学習用データの1割くらいをテスト用データとしてとっておいて(学習には使わずに)あとで一気にテストして答え合わせまで自動でやらせてみました。
正解率が75%超えているとかすごい子じゃないですか! 学習用の画像を渡すと100%正解しちゃう(これでいいの?)ので、同じ画像は使わないようにしているつもりですが目視でなんとなく消しただけなので怪しいです。
それでも思ったより正解率が高くて安心しました。
まともなデータで挑戦
学習用データをしっかり準備しておけばもっとすごい結果を出してくれそうなので挑戦します。
学習用データはオックスフォード大学が公開しているペットの画像データを使います。
Visual Geometry Group: Oxford-IIIT Pet Dataset
ソースをいじって学習用画像フォルダにあるフォルダをグループとして動的にグループを作るように変更しました。 これでフォルダを入れたり消したりするだけでいろいろなテストができそうです。(フォルダの数を変えたら学習しなおさないといけませんが)
ペットの画像データは37種類の犬猫画像なので種類ごとにフォルダを作って学習させます。
学習中はこんな感じになるので64bitプロセスで動かさないと即死でした・・。
そして1時間後・・・
アプリはそっと息を引き取りました。
猫だけで学習させる
データが多すぎたみたいです。もう一度試す気にもならなかったので猫の種類当てにしてみます。
がんばれー
・・・
犬猫判別をさせる
猫の種類なんて私が見てもよくわからないので答えが合っているのかも分かりませんでした。ということで犬と猫を区別させてみます。 画像データから適当に何種類かの犬猫写真をコピーして学習させます。
例外が発生しても少しは画面に出せるようにしました・・(震
InnerExceptionを見てみると
Convergence could not be attained. Please reduce the cost of misclassification errors by reducing the complexity parameter C or try a different kernel function.
パラメーター変えるかカーネル変えろ、と・・。
Cパラメーター(?)を自動で求めるようにして挑戦。
ツライ・・・
2016/3/18追記
学習用データを減らして(合計400枚くらい)もう一度学習させました。
私ののうみそではこの辺が限界みたいです。
ここまでのソースはGitHubに反映してあります。