画像をどうやってデータに変換するか?
さて、今回の記事では妄想を現実に落とし込むためにどうすればいいか?ということを記録します。
いちいち過去試合のデータを入力するかわりに ”データとして画像を使う” というアイデア。次の具体的ステップは画像をアルゴリズムが認識できるように変換することです。
ディープラーニングによくあるチュートリアルでは、すでに用意されているデータセットをそのまま使うパターンがほとんどであり、”自作データを用いた” やり方についてはあんまり情報がないです。
つまり どういったデータで、どういう形式で与えればいいのか?といった部分の説明がほとんどない。チュートリアルなんかやっても実際の問題解決にはまったく役に立たないんですね。まあ、それを自分の問題に応用できればいいだけの話なんですけど。
画像処理について調べてみた
さて、”画像からデータへ” ということで自分なりにいろいろ検索かけて調べてみました。現在のところ ”imageJ ” というソフトが候補にあります。
詳細は・・
ですね。つべこべ言うより見てみろと。
もともと画像を分析する目的でつくられたもののようで、かなり高機能の印象があります。ひょっとして医学的目的なのかなあ?まあ上のリンクの 日本語情報サイト もあるので導入の敷居はそれほど高くはありません。(本家サイトは英語)無料ですし、お試しした感触ではサクサク動く。
んで、とりあえず僕が必要としている機能ってのは、画像を ”とにかくcsv形式の数値データにする” ってこと。画像の違いをデータ(数値)として認識できればいいんですね。(もしかして数値じゃなくてもいいかもしれない・・名義属性でもいいか?)H2Oのディープラーニングを使うことを前提としているので。
それで、どの機能を使えば画像を数値データ(数値か名義)として変換できるのか?ってことを考えました。
今現在の候補としては・・・
1、ヒストグラムを使って識別する
んー。。以下に実際に出力させたものをサンプルとして挙げてみます。
右側の表・・これがヒストグラムをCSVとして出力させたものになります。
確かにデータによって数値は変化する。いくつか対戦カードを変えて観察してみました。ものすごく似たような結果にはなるけれども微妙に違うというか・・これでちゃんと違いを読み取ってくれるのか疑問があります。
根本的に ”画像が示すデータの質” が違う?
さて、大事なことなんですが・・
画像の持つデータの質にはタイプがあります。ちょっと整理してみましょう。
1、グラフ
2、風景などの写真、FACEも含む。
3、モノ、動物など (モノそのもの?)
・・・その他いろいろあるよね。
大きな分類方法として次のように考えてみました。
1、基本的に他の方法でも表現できるもの
これはグラフなどが当てはまりますね。座標でもいいし、数値でも表現できます。逆に風景などはピクチャー以外の表現方法は思いつきません。
2、画像でしか表せないもの
これは人物の顔とか、やっぱり風景、そして動物などの形態とか あるモノの特徴とかですね。。そういうのは画像では一瞬で判断できますが、言葉や数値では表現しにくい。というか普通に考えてふさわしくないことはすぐに理解できます。
さて、では僕が取り上げた ”サッカーのフォーメーション” はどうでしょうか?
これはどちらかというと ”基本的に画像以外でも表現できる” 性質ですね。。たとえば ”誰が、どのポジションに” というような ”文字情報” として表現できます。ただフォーメーションについては ”画像の方が分かりやすい”
言い換えるとサッカーにおけるフォーメーション画像は・・選手名のような ”文字情報、テキスト情報” と 画像による ”位置情報” が組み合わさった形となっていて、通常の写真データとはちょっと性質が異なっているように思えます。
そして ”ホットゾーン” のようなデータは ”色の濃さ” によって表現されているので、より絵的であり、たとえば色彩番号とか、あるいは色彩の密度?(といってよいのか、よく分からないけれども、)そういう尺度で表現するのに適しているかもしれません。しかしこれも数値とか名義尺度でもじゅうぶん表現することは可能ですね。
たとえば ゾーンにナンバーを付けて、そして色の濃さについても数値、あるいは漢字の ”強” とか ”弱” とか、英語でもOKだし、はたまた記号でも区別できます。
いかに簡単に良いデータセットをつくるか?
問題のポイントはこれだと思います。
なんでこんなことをやってるのか?といえば、まさに 簡単に、確実に、精度が良い データを得るためです。
いかに手数をかけずにデータをつくるか。まあ手間を惜しまなければデータは作れるんですが、なにせ時間が掛かる。。そのうえに作ったデータが役に立つかどうかは試してみなければわからない・・
これはまったく効率が悪い。。
愚痴を言っても始まらないのでアイデアを書こう。
さて、対戦前に分かる事前情報として以下のものを使うと仮定します。
1、レーダーチャート
2、ホットゾーン
3、フォーメーション予想図
これらの画像を毎回記録する。たぶんリーグ戦だけになると思いますが。んで、結果も記録します。試合後のフォーメーション図ってのは、予想時には ”ない” 情報なので当然ですが使うことはできません。ただデータとしては利用価値はある。
データ構成としては ”すべて試合前” のデータのみを扱う。例外はレーダーチャートとホットゾーンということになるかと。なぜならそれらは過去試合結果から導かれた結果だからね。
問題点としては ”時間が無さ過ぎること”
上に挙げたヤフースポーツのデータ更新は、おそらく試合前日。翌日にはもう試合ですから前日の夜にしかデータを収集できません。ちょっときついですね。
J2第5節の予想をすこし・・・
さあ、最後に J2第5節予想結果を載せておきましょう。使ったデータはフォーメーション図です。レーダーチャートやホットゾーンは使っていません。
まあダメ元なんでね。。たぶんメチャクチャな予想になるとは思うけど結果を見てみたい。
追記 J2第5節の予想結果の評価は?
うっすらと期待してみましたが・・・やはりダメでしたね。。
3/11 の正解率・・わずか3試合しか正解していません。まだまだ評価できる段階ではありませんが、ちょっと凹むなあ。
色つきが正解枠ね。右数字はゴールと失点。
もっと続けてみないと何とも分からないなあと。ただデータ構成についてはいろいろ変えてみたい。というか増やさないと意味が無いようなので。
ディープラーニングでは特徴抽出は機械的に行われるはずなので、こちら側が属性を選択する必要はないはず。ただできるだけ多くの属性を与えて予測結果の精度をみればいいのではないかと思ってる。
まだまだこれからだ。
コメント