2015年8月12日水曜日

ULTIMATE GAMING MACHINE

夏休みに、画像処理プログラムの開発を進めようと思い、新しいノートパソコンを買いました。


画像処理を高速に行うために、NvidiaのGPUが入っているモデルにしました。つまりゲーミングマシンですね。
名目はプログラムの開発なわけですが、当然ギャモンもします。XGの解析速度がどれくらい速くなったか、これまで使っていたパソコンと比べてみました。

これまでは2010年モデルのiMacに、bootcampでWindows 8を入れて使ってました。これでも十分速いと思ってました。CPUはCore i5 2.8GHzです。


新しいノートPCは、ざっくりこれの2倍くらいの速さです。XG Roller++の解析なら、パソコンのファンが少しうなりを上げるとすぐに終わります。今時のCPUは速いですね。


最近の対戦で気になったポジションがあったのでロールアウトしました。
5ポイントマッチのオープニングゲームで、白の私からダブルしました。黒が4ポイントにアンカーしている形はよくあると思うのですが、それがブロットだとどう判断したものか、よく分かりませんでした。


ロールアウト結果は以下の通りで、勝率80%以上の大パスでした。こちらには悪い目は無いし、相手としては、せいぜい分の悪いランニングに持ち込むくらいしか勝ち目がないのだなと思いました。

処理時間は、これまで使っていたパソコンと比べて、やっぱり2倍くらい高速でした。XGの解析がGPUで高速化できるとしたら、ぜひ対応してもらいたいです。

XGID=--A-aCE-C---dC---bbbb---b-:0:0:1:00:0:0:0:5:10

X:mkisono   O:uco
Score is X:0 O:0 5 pt.(s) match.
+13-14-15-16-17-18------19-20-21-22-23-24-+
| X           O  O |   | O  O           O |
| X           O  O |   | O  O           O |
| X                |   |                  |
|                  |   |                  |
|                  |   |                  |
|                  |BAR|                  |
|                  |   | X                |
| O                |   | X                |
| O           X    |   | X  X             |
| O           X    |   | X  X             |
| O           X    |   | X  X  O     X    |
+12-11-10--9--8--7-------6--5--4--3--2--1-+
Pip count  X: 110  O: 127 X-O: 0-0/5
Cube: 1
X on roll, cube action

Analyzed in Rollout
No double
  Player Winning Chances:   80.29% (G:14.16% B:0.07%)
  Opponent Winning Chances: 19.71% (G:1.50% B:0.03%)
Double/Take
  Player Winning Chances:   80.91% (G:14.46% B:0.07%)
  Opponent Winning Chances: 19.09% (G:1.65% B:0.06%)

Cubeless Equities: No Double=+0.722, Double=+1.504

Cubeful Equities:
       No double:     +0.982 (-0.018)
       Double/Take:   +1.356 (+0.356)
       Double/Pass:   +1.000

Best Cube action: Double / Pass

Rollout:
  1296 Games rolled with Variance Reduction.
  Moves: 3-ply, cube decisions: XG Roller
  Confidence No Double: ± 0.004 (+0.979..+0.986)
  Confidence Double:    ± 0.010 (+1.346..+1.366)

  Double Decision confidence: 100.0%
  Take Decision confidence: 100.0%

  Duration: 3 minutes 08 seconds (新しいPC)


  Duration: 5 minutes 35 seconds (これまでのPC)

eXtreme Gammon Version: 2.10, MET: Kazaross XG2

2015年8月11日火曜日

偽リファレンスに気を付けろ

先日の日野くんの対戦より。
7ポイントマッチのオープニングゲーム。私はバックマンを11ポイントへ進めていましたが、日野くんが5ゾロを振ってブリッツの体勢です。

ダブルされた私は、景山さんの本に書いてある「リファレンス」と比較して局面を判断しました。

  1. 相手のインナーにあるブロットが攻撃される(2,5,4の目中心に)
  2. (リファレンスには存在しない)アウターのブロットが攻撃される(3の目を中心に)

ということでリファレンスではテイクの状況だったとしても、この局面はより悪いと思ってパスしたのでした。

ところが、上記の考察には大きな間違いがあって、本に書いてあるリファレンスはスプリットしているインナーのバックマンがアタックされる形なので、自分のコマはオンザバーなのでした。
オンザバーとアウターにブロットがあるのでどちらがよいのか? 当然盤上にいる方がましなのでした。すぐに危ない出目が多いとはいえ、アタックをしのいでアンカーを取れれば十分に戦えるはずです。よってここはテイクが正解でした。

XGID=-aa---E-C-A-dD-Aaa-c-Ab-b-:0:0:-1:D:0:0:0:7:10

X:hinognu   O:mkisono
Score is X:0 O:0 7 pt.(s) match.
+13-14-15-16-17-18------19-20-21-22-23-24-+
| X     O     O    |   | O           X  X |
| X           O    |   | O                |
| X           O    |   | O                |
| X                |   | O                |
|                  |   | O                |
|                  |BAR|                  |
|                  |   |                  |
| O                |   |                  |
| O                |   | X                |
| O                |   | X        X     X |
| O     O  X  X    |   | X     O  X     X |
+12-11-10--9--8--7-------6--5--4--3--2--1-+
Pip count  X: 142  O: 152 X-O: 0-0/7
Cube: 1
X on roll, cube action

Analyzed in XG Roller++
Player Winning Chances:   61.27% (G:33.82% B:1.04%)
Opponent Winning Chances: 38.73% (G:8.70% B:0.49%)

Cubeless Equities: No Double=+0.488, Double=+1.022

Cubeful Equities:
       No double:     +0.591 (-0.122)
       Double/Take:   +0.713
       Double/Pass:   +1.000 (+0.287)

Best Cube action: Double / Take

eXtreme Gammon Version: 2.10, MET: Kazaross XG2





2015年8月2日日曜日

Backgammon dice detection with OpenCV

最近、仕事でOpenCVというツールの使い方を少し覚えました。OpenCVというのは、コンピュータビジョン用のライブラリで、様々な画像処理を行うことができます。OpenCVにはいろんな機能があるので、全部分かったなんてことは全く無いのですが、とりあえず使えるようになった機能だけでも、そこそこ役に立つものができそうな雰囲気になってきたので、バックギャモンに応用してみました。


ご覧の通り、ダイスを検出して拡大表示するプログラムです。最近のバックギャモンのネット中継は高画質なので、ダイスの目まではっきり見えます。ただし問題は自分の目が悪いこと。ダイスだけ拡大してくれたらなぁ、と思ったことが多々あるので、自分でやってみました。

現在のプログラムは「背景差分法」というアルゴリズムを使っています。バックギャモンの動画では、ボードが固定されており、動いているのはプレイヤーの手やチェッカー、それと今回検出したい「ダイス」です。背景差分法を使うと、これらの動いている物がどこにあるか検出することができます。それらの物体の中から、ダイスの動きの特徴をするものを取り出す処理を書きました。
「ダイスの動きの特徴」を観察すると、プレイヤーの手やチェッカーに比べて小さい物体が動いてきて、最後には「止まる」ことが分かりました。というのはバックギャモンプレーヤーなら誰でも知っていますが、コンピューターのプログラムにはいちいち教えてやらないといけません。面倒ですね。

これくらいのプログラムでも、ネット中継のエクスペリエンス向上にはちょっと役い立つだろうと思います。
ついでに、今後の開発ロードマップも明らかにしておきましょう。

  1. 検出したダイスの目をコンピュータで認識して、きれいな画像で表示する(現在は動画から切り出して拡大表示)。
  2. タイムラプス動画でもダイスを認識できるようにする

とりあえずここまでです。そうすれば、私の棋譜入力ライフがだいぶ改善するはずです!

やってみて分かったのですが、この処理は計算量が多いので、動画をリアルタイムで処理できません。GPUで処理させればもっと高速に処理できると期待できるのですが、うちにはGPU搭載のパソコンが無いのでした。Macはオシャレ過ぎて役に立た無いことが分かったので、ここはWindowsの”ゲーミングマシン"でも新調しようかと思います。そうすれば、XGの解析もあっという間に終わるんじゃ無いかな。そろそろWindows 8パソコンが投げ売りになってたりするとうれしいのですが。

ダイス画像からの出目認識は、今をときめくDeep learningでやってみようと思います。これが有名な手段の目的化ですね。実際のところ、今回試作したプログラムは、ダイス画像を収集するためのツールとして作ろうと思い立ちました。Deep learningでは学習用に大量のデータが必要だと聞きました。ダイスくらい簡単なものならそれほどデータはいらないのかもしれませんが、所詮Deep learningをやってみたいだけなので気にしないでください。

Deep learningでダイスが判別できるようになれば、背景差分法をタイムラプス動画に適用した場合でも、差分を手当たり次第認識させることでダイス認識がうまくいくんじゃないかと考えています。