COSUMIのプレイ実況動画

COSUMIを始めた頃だったでしょうか、「アメリカでは若者世代のYouTube視聴時間がテレビ視聴時間を抜いた」というニュースを見て、本当にひっくり返りそうなぐらいびっくりしたのを、今でもよく覚えているのですが、気がつけば、私の家にはテレビは無く、暇があったらYouTubeをずっと観ている毎日になってしまいました。そんなみんな大好きYouTubeに、COSUMIとの対局のプレイ実況動画を上げてくださる方が少しずつ増えてきて、すごくうれしく思っています。

囲碁ブラウザゲーム COSUMI
https://www.cosumi.net/

今回はその中からいくつか紹介していきたいと思います。

まず最初はVTuber。オドロキノシロサ(笑)。 それにしてもこの子、将棋する人だからでしょうか? 入門者にしては異常にセンスが良いですね…

もう一人VTuber。最後は熱いですねえ。ほんとCOSUMIはクソザコやろーです(笑)。

強い方も打ってくださいました。当然COSUMIは勝てないのですが、この2局はレベルの割に上手できれいに打てていると思うので、正直うれしいです。

政光さんも、純碁の紹介にCOSUMIを使ってくださいました。

上の5つの動画はすべて、今現在、視聴回数がものすごく少なくてなんだか悲しいので、試しに、COSUMIの対局ページにパソコンからアクセスした時、ランダムに選択して右下の空いているスペースに埋め込むことにしました。ささやかですが、COSUMIからの恩返しです。でも、意外と視聴回数伸びるかもしれませんよ。ちなみに、今現時点では上から順に、36回、44回、377回、403回、233回です。

私は、自分の目の前で誰かがCOSUMIと対局しているのを見たことが、今の今までただの一度も無く(もっと言うと、リアルな間柄で私のことを中の人だと知っている人も一人もいない…)、昔、こういうプレイ実況動画を初めて見た時に、「ああ、本当に対局しているユーザがいるんだ」と変に感動した覚えがあります。あと、COSUMIの話をしている人もリアルでは見たことがなく、「COSUMIって声に出して読むとそういうイントネーションなんだ」とかは、今でもよく思ったりします(笑)。

COVID-19とCOSUMI

ここ最近、COSUMIへのアクセスがかなり多い状態が続いています。

囲碁ブラウザゲーム COSUMI
https://www.cosumi.net/

説得力のあるデータは出せませんし、私も決して断言する訳ではありませんが、これは新型コロナウイルス感染症の流行のみでほぼ説明できると、自分の中では確信しています。

今年に入ってからのCOSUMIが一日に負けた数の推移です。寒さの厳しい時期の話でもありますので、比較対象として前々年と前年もグラフに加えました。

以前からここでも何度か書いていますが、COSUMIは雨や雪が降ると、アクセスが増える傾向があります(これは、他のオンラインゲームなどでも同じようです)。COSUMIへのアクセスの約1/4は海外からで、さらにその内訳に韓国や中国など東アジアが占める割合が多いというのが計算を難しくしますが、とりあえず直近見られる28,000+という数字は、仮に日本全国で大雨が降ったとしても、特別な他の要因が無ければなかなかいくことのない、非常に大きな値です。新型肺炎による健康被害が最終的にどれぐらいのものになるのかは、現時点では私にはよくわかりませんが、もしも実際に、それほどまでに人の外出が抑えられているのならば、経済的な影響についてはすでに甚大なものなのではないでしょうか?

中国でオンラインゲームや動画アプリの利用急増、新型肺炎で – ロイター
https://jp.reuters.com/article/china-health-online-idJPKBN1ZY109

しかし、こんな時ですので、外出を控えること自体はとても良いことだと思います。実はCOSUMIでは、この春、3台あるサーバを2台に減らす予定だったのですが、これについてはとりあえず当面の間、延期します。サーバの負荷が高い時間帯が続いて申し訳ありませんが、あと一か月ほどでwhite shadeをかなり強くできそうなので、そのあたりでそちらへの誘導を強めます。しばらくお待ちください。

ナニゴケをアップデートしました (Ver. 1.3.0)

ナニゴケのNNを新しくしました。

ナニゴケ – 苔の種類を判別します
https://www.nanigoke.net/

今回は、結構大きめのアップデートになっています。まず、判別可能な種に、「エダウロコゴケモドキ」、「クビレケビラゴケ」、「ケゼニゴケ」、「スギバゴケ」、「ヒメジャゴケ」、「リボンゴケ」が追加されました。また、12600枚だったTrainのデータ数は、16400枚になっています。さらに、ネットワークの構造もいくらか改良しました。その中で、特に性能の改善が著しかったのが、通常のSENetとは別に独立して、Average Poolingで1×1ではなく2×2にするSE-blockを用意して、それも併せて両方いっしょにメインの出力と掛け合わせるというやつで、これがかなり汎化性能を上げました。で、そのあたりを頼りに、パラメータ数が増える形でネットワークを大きくもしました。さらにPredictを全体で1回だけではなく、中央を中心とした少し狭い範囲での2回目も行い、2つの結果を平均したものを、判別結果として表示するようにもしました。そして、TensorFlow.jsのバージョンも上げました。

ということで、もろもろかなり良い改善になっていると思います。判別可能な種の数は、なかなか増やしていくことができなくてちょっと辛いのですが、データ数には少し余裕が出てきました。5月6月の苔シーズンまでには、何とかある程度納得いく形にしたいと、自分で言うのもなんですが、今、結構頑張っています。

私の住む所の周りでは、コバノチョウチンゴケがすでにかなり目立つようになりました。春はすぐそこですね。

white shade使ったベンチマークテストを作ってみました

white shadeを強くしようと、時間のある時に少し手を動かしてはいたのですが、なかなかなかなか強くなりません。もう、真面目に探索しないと、レベル6は難しいですかね? で、なかなかなかなか強くならないのがつまらないので、今回はwhite shadeを利用したベンチマークテストを作ってみました。

囲碁ベンチマーク – 囲碁ブラウザゲーム COSUMI
https://www.cosumi.net/benchmark.html

ひたすらwhite shadeに手を打たせて、速度を測るというやつです。もちろん、こんなのはまともなベンチマークテストではなく、ただのネタにしかすぎませんので、真面目に使おうとはしないでくださいね。

今現在は、white shadeとの対局はレベル4までしかできませんが、今回のベンチマークはレベル5相当の強さになっています。手元のPython版での計測では、13路盤でGNU Go Level 10に、勝率95.2%、平均42.6目勝つぐらいなのですが、地たくさん勝つ割には、勝率が低くて、なんか安定性がないですね。めいいっぱいの設定にしても、勝率は98%に届かない感じ。でも、この強さでも対局できるように、ここらで一度、対局ページの方も後日アップデートしておきます。

このベンチマーク、私のiPhone 8だと速くて4手/秒ぐらい、GTX 1060(ブラウザが使ってくれているみたい)が載っているPC+google chromeで速くて10手/秒ぐらいになります。それだけ速いのならば、もう少したくさん考えさせてもいいのかもしれませんが、私のクソコードで、ユーザのバッテリーを無駄に消費することになるのは、どうも気が咎めるんですよね…(笑) もうしばらく、シンプルな形で強くならないか、探ってみます。

今回のこのプロダクトを、味気ないベンチマークに飽きた囲碁クラスタに贈ります。とんでもない手も多いですが、そこも含めてお楽しみください。後、これから寒さが厳しくなっていって、スマホをカイロ代わりにしたくなった時にも便利にお使いいただけると思いますので、ぜひお試しください(笑)。

ナニゴケをアップデートしました (Ver. 1.2.0)

ナニゴケのNNを新しくしました。

ナニゴケ – 苔の種類を判別します
https://www.nanigoke.net/

今回は、判別可能な種に、「キヒシャクゴケ」、「シモフリゴケ」、「フジノマンネングサ」が追加されました。また、11100枚だったTrainのデータ数は、12600枚になっています。

先日、白駒の池にまた行ってきました。もう二度と行かなくてもいいようにと、かなり気合入れて向かったのですが、なにからなにまで、もうどこまでいっても終わりのない感じで、軽く絶望しながら戻ってきました。今更ながら、とんでもないこと始めちゃったかもしれない…(笑) まあ、ぼちぼちがんばります。

ナニゴケをアップデートしました (Ver. 1.1.0)

ナニゴケのNNを新しくしました。

ナニゴケ – 苔の種類を判別します
https://www.nanigoke.net/

今回は、判別可能な種に、「チャボヒラゴケ」と「ヒメシノブゴケ」が追加されました。また、10300枚だったTrainのデータ数は、11100枚になっています。TensorFlow.jsも最新のバージョンにアップデートしておきました。NNの構造などは、基本的に何も変えていません。

つい最近、世の中には「標本同定会」と呼ばれる、とっても素敵な催し物(笑)があることを知りました。ただ、夏休みの8月に開かれることが多いみたいで、うーん、また一年後ですね…

形勢を目数で返すNNを公開します

囲碁の局面の形勢を、目数で返すNNを公開します。ここ最近も改良しようといろいろと試していたのですが、ほとんど進歩が無かったので、今回公開するのは最新のバージョンですが、数か月前に作成した、今現在white shadeで使っているものと性能はほとんど同じです。

http://www.perfectsky.net/misc/whiteshade_vn-20190902.h5

white shade – 囲碁ブラウザゲーム COSUMI
https://www.cosumi.net/whiteshade.html

13路盤より大きな碁盤サイズには対応していませんが、それより小さい碁盤サイズは、特になにも問題はないと思います(12路盤、10路盤、8路盤とかもOK)。公開するのは、KerasのHDF5形式のファイルですが、TensorFlow.jsのコンバータも私の環境では問題なく通ります。このNNを使っても、そんなに強い思考エンジンは作れないと思いますが、目数で形勢を返すNNは比較的珍しいと思うので、だれかが何か面白いものを作ってくれたら嬉しいです。

以下、使い方を簡単に説明していきます。わたしも本当によく分かっていないので、難しいこと聞かれても、どうせちゃんとお答えできませんので、この説明で分からなかったら、もう諦めちゃってください(笑)。

入力は「盤上」・「次の手番の石」・「相手の石」・「コウで打てない場所」の4面です。「次の手番の石」・「相手の石」は、「黒石」・「白石」ではないので注意してください。出力は「次の手番から見た目数単位での形勢(中国ルール・コミは無いとして)」です。「黒から見た目数単位での形勢」ではないので注意してください。入力は当てはまる所は1、そうでない所は0です。

例えば次の局面の形勢を知りたい場合は、

次のようなコードになります。

# score.py

from keras.models import Model, load_model
import numpy as np

MODEL = load_model('whiteshade_vn-20190902.h5')

TURN       = 'WHITE' # or 'BLACK'
BOARD_SIZE = 9

BOARD = [
    [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], 
    [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], 
    [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], 
    [' ', ' ', 'W', 'B', ' ', ' ', ' ', ' ', ' '], 
    [' ', 'W', 'B', 'K', 'B', ' ', 'B', ' ', ' '], 
    [' ', ' ', 'W', 'B', ' ', ' ', ' ', ' ', ' '], 
    [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], 
    [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], 
    [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
]

NUM_PREDICT     =  1
MAX_BOARD_SIZE  = 13
NUM_INPUT_LAYER =  4

ON_BOARD = 0
MY_STONE = 1
YR_STONE = 2
KO       = 3


################################################################################


predict_input = np.zeros((NUM_PREDICT, MAX_BOARD_SIZE, MAX_BOARD_SIZE, NUM_INPUT_LAYER))

for i in range(BOARD_SIZE):
    for j in range(BOARD_SIZE):

        predict_input[0][i][j][ON_BOARD] = 1

        if BOARD[i][j] == 'B':
            if TURN == 'BLACK':
                predict_input[0][i][j][MY_STONE] = 1
            else:
                predict_input[0][i][j][YR_STONE] = 1
        elif BOARD[i][j] == 'W':
            if TURN == 'BLACK':
                predict_input[0][i][j][YR_STONE] = 1
            else:
                predict_input[0][i][j][MY_STONE] = 1
        elif BOARD[i][j] == 'K':
            predict_input[0][i][j][KO] = 1

predict_output = MODEL.predict(predict_input)

if TURN == 'BLACK':
    score = predict_output[0][0]
else:
    score = -(predict_output[0][0])

if score > 0:
    print('B+' + str(score))
else:
    print('W+' + str(abs(score)))

$ python ./score.py 2>/dev/null
B+18.516293

13路盤より小さい碁盤は、13×13のどこに描いても大丈夫だと思っていたのですが、四隅のどれかにぴたっとくっつけたデータでしか学習してなかったせいか、例えば9路盤を13×13のど真ん中に描いてpredictさせると、ちょっと精度が悪くなるような気がします。まあ普通に、0の0から使ってください。

このNNは、まず座標ごとにどちらの地になりそうなのかを予測し、それを集計したような構造になっています。これは、そういうふうにした方が、評価関数として性能が良かったからそうしただけなのですが、結果的にその集計前の途中の出力を、副産物として利用することも一応は可能です。ただ、本当に一応ですね。例えば9路盤をpredictさせると、盤外の座標にもスコアがしっかり付いていて(!)、でもどちらかに偏らないようになっていたりと、13×13全体で上手にバランスをとっている感じなので、まあ参考程度に見てください。例えば、次のようなコードで使えます。activation_103っていう名前のレイヤーの出力を使ってください。

# territory.py

from keras.models import Model, load_model
import numpy as np

OUTPUT_LAYER_NAME = 'activation_103'

MODEL   = load_model('whiteshade_vn-20190902.h5')
MODEL_2 = Model(inputs  = MODEL.input,
                outputs = MODEL.get_layer(OUTPUT_LAYER_NAME).output)

TURN       = 'WHITE' # or 'BLACK'
BOARD_SIZE = 9

BOARD = [
    [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], 
    [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], 
    [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], 
    [' ', ' ', 'W', 'B', ' ', ' ', ' ', ' ', ' '], 
    [' ', 'W', 'B', 'K', 'B', ' ', 'B', ' ', ' '], 
    [' ', ' ', 'W', 'B', ' ', ' ', ' ', ' ', ' '], 
    [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], 
    [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], 
    [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
]

NUM_PREDICT     =  1
MAX_BOARD_SIZE  = 13
NUM_INPUT_LAYER =  4

ON_BOARD = 0
MY_STONE = 1
YR_STONE = 2
KO       = 3


################################################################################


predict_input = np.zeros((NUM_PREDICT, MAX_BOARD_SIZE, MAX_BOARD_SIZE, NUM_INPUT_LAYER))

for i in range(BOARD_SIZE):
    for j in range(BOARD_SIZE):

        predict_input[0][i][j][ON_BOARD] = 1

        if BOARD[i][j] == 'B':
            if TURN == 'BLACK':
                predict_input[0][i][j][MY_STONE] = 1
            else:
                predict_input[0][i][j][YR_STONE] = 1
        elif BOARD[i][j] == 'W':
            if TURN == 'BLACK':
                predict_input[0][i][j][YR_STONE] = 1
            else:
                predict_input[0][i][j][MY_STONE] = 1
        elif BOARD[i][j] == 'K':
            predict_input[0][i][j][KO] = 1

predict_output = MODEL_2.predict(predict_input)

for i in range(MAX_BOARD_SIZE):
    for j in range(MAX_BOARD_SIZE):

        if TURN == 'BLACK':
            darkness = predict_output[0][i][j][0]
        else:
            darkness = -(predict_output[0][i][j][0])
        
        if darkness > 0.9:
            print ('B', end='')
        elif darkness > 0.5:
            print ('b', end='')
        elif darkness > -0.5:
            print ('.', end='')
        elif darkness > -0.9:
            print ('w', end='')
        else:
            print ('W', end='')
    
    print ('\n', end='')

$ python ./territory.py 2>/dev/null
bw.bBBBBBBWBB
.WWw...wBBWWB
WWwbBBBbBBWWB
WWwbBBBBBBWWB
WWwbBBBBBBWWB
WWwbBBBBBBWWB
WWw.BBBbBBWWB
WWWw...wBBWWB
b..bBBBBBBWWB
BBBBBBBBBBWWB
WBBBBBBBBBBBB
WWWWWWWWWWWWB
WWWWWWWWWWWWW

盤上は、左上の9×9なんですけどね。盤外がなんだか凄まじいことに…(笑)

white shadeの方は、NNの入力に「ダメの数」追加するか、少し深く探索した方が良さそうです。そういったことは無しでも、レベル5までは問題なくいけるのですが、できればレベル6が作りたい…

六十秒英単語テストで六十問以上正解する人がいるらしい…

Twitterでたまたまこんなツイートを見つけました。

六十秒英単語テスト
https://www.60byo.net/

問題作った私でも、50問がかなり難しいのですが、63問って…(絶句) この1問/秒以上っていうのは、人間にはちょっと無理ではないかなと、今まで私は思っていました。どんな反射神経しているんでしょうね。本当にすごいです。しかし、さらに調べたところ(ちなみに、調べたデータは8月30日までの分)、なんと64問が1人だけおられました(!)。その次が先ほどの63問で、さらにその次は59問の1人まで結構飛びます。

いい機会なので、テスト結果が上位何パーセントに位置するのかのデータも、久しぶりにアップデートしました(使ったデータはここ1年の分にあえて限定しています)。40問正解で上位10%、43問正解で上位5%、48問正解で上位1%に入れるようです。全体的に数字が上がってきていますね。神の領域に居られる方々の励みになればと、1%より数字が小さくなる時は、小数点以下3桁まで表示するようにもしました。また少し時間を空けて、アップデートします。

あと、一昨日からアクセスがかなり多くなっています。タイミングなどから言って、先ほどの方が何度かツイートしてくださった影響のように感じられます。

ってここまで書いてから、もう一度Twitterをチェックしていたら、こんな方が…

さすがにここまで来てしまうと、特定の環境で動作がおかしいのではと、自分の書いたコードを疑い始めてしまいます(笑)。

[追記 2019/9/1]

うわーやらかしてる! できるだけ早く修正したバージョンをリリースします。

[追記 2019/9/2]
「kidney」が「肝臓」になっていたのを修正した、新しいバージョン1.1をリリースしました。このバージョンでは、テスト結果が上位何パーセントに位置するのかは、データがある程度集まるまで、表示されません。英単語と日本語訳のペアの誤りは、操作ミスや、問題作成時に使っていたいろいろなスクリプトのバグなどでも起こりうるので、最初にリリースした時は、無いわけないだろうと思ってましたが、その後、1年以上経過しても誰にも何も言われないので、大丈夫だったんだと思ったらこれです。

[追記 2019/9/12]
Ver. 1.1でも、テスト結果が上位何パーセントに位置するのかが、表示されるようにしました。まだデータが少ないので、できるだけこまめにアップデートしていくようにします(自動は危険なのでやりません)。ついでにVer. 1も、アップデートしました。こちらのバージョンは、今後アップデートすることはもうありません。

晴耕雨棋

つい先日も、台風10号がやって来るなど、今年もまさに台風シーズンを迎えた日本列島ですが、今日は雨と囲碁の関係についてです。

以前にも少し書いたことがありますが、雨や雪の日は、COSUMIへのアクセスが大幅に増えます。きちんとしたデータを出すのはあまり簡単ではないので、ここではそれは控えますが、ざっくりと言って、「日本全国でしっかりと雨が降ると、日本からのアクセスが約25%増える」という感覚を私は持っています。そしてこれはおそらく、「どこかでしっかりと雨が降ると、その場所からのアクセスが約25%増える」ということだと思っています。

囲碁ブラウザゲーム COSUMI
https://www.cosumi.net/

雨と囲碁っていうと、「笠碁」という落語の演目を思い出す方が多いかもしれません。調べてみると、元は江戸時代からある話のようですね。その時代においての雨は、仕事をできなくして対局を増やすことの方が多かったのか、それとも、碁敵の所に行くのを阻んで対局を減らすことの方が多かったのか、私にはちょっとわかりませんが、少なくとも現代では、雨が囲碁の対局を増やすものなのは、まず間違いが無さそうです。

苔とWeb

ナニゴケ作ったので、Web上の苔にまつわるもろもろを調べて、一度ブログ記事にしてみます。こういうのを書き残しておけば、何年か後に見返した時に役に立つだろうという当初の意図だったのですが、結果的には、ここにしか残らなそうな内容は特に含まれていません。

ナニゴケ – 苔の種類を判別します
https://www.nanigoke.net/

まず、Googleで「苔」という単語を検索した時の、検索結果件数(って言うのかな?)ですが、検索する条件などにもよるのでしょうが、私の環境では「約 38,500,000 件」となります。この数字の大きさを理解するために、私は反射的に「囲碁」という単語と比較してしまうのですが(笑)、そちらは「約 40,100,000 件」となり、まあだいたい似たような規模のワードようです。そして、検索結果の上位には苔の販売業者のサイトが多く並んでいて、これはちょっと「囲碁」とは様相が違いますね(こういう比べ方もなんですが、碁盤碁石を販売するサイトが上から並ぶことはないですからね)。分かりやすいところでは、楽天が5番目に私の環境では来ます。私は苔を自分で育てるということに興味が無い人ですし、ましてや買うとか発想にも無いですが、世の中的にはそんなものみたいです。こういうの、正直、私は最近まで知りませんでした。それにしても、上の方のサイトもそんなにリンクを集めている感じはないですね。「囲碁」だと日本棋院という強敵もいるのですが(笑)、そんなのも無いし、これは意外とスカスカかな? なんとか一気にぶち抜きたいですね。そして、上位のサイト見ている限り、「苔」はけっこうしっかりと蘚苔類のことみたいです。

次に時系列で見るために、Google Trendsでも調べてみました。最初は「苔」。


まず気が付くのは、季節性があるということですね。ピークは5月6月みたいです(ナニゴケもう少し早くリリースしたかった…(笑))。そして、長いスパンで見ると、右肩上がりの傾向も見て取れます。「最近、若い女性に苔が人気で…」とか聞くと、「また言ってるよ」って正直思っていたのですが、どうやらまんざら嘘でもないようです。で、この最近の苔人気の中心は、苔テラリウムとか苔玉など、観賞用に少量の苔を屋内で育てたいという需要にある気がします。「苔 テラリウム」だとこんな感じ。


他の植物と同じく、苔を観察し愛でる人はいつの時代もどこの国にもいるし、日本だと庭など屋外で苔を積極的に育てるということは昔からあったと思いますが、「屋内」というのが新しいところでしょうか? ちなみに、Google Trendsでの「苔」が蘚苔類のことなのかどうかは、当然のことながらかなり微妙です。

私も普段から、苔についてWebで調べることが多いですが、まあ嘘が多いです。「どんな分野でもそんなもの」って声が聞こえてきそうですが、かなりはっきりと相対的に不正確な情報が多いと感じています。理由はいくつか考えられるようにも思いますが、これといった説明を一言でするのはちょっと難しいですね。Googleの画像検索で〇〇ゴケを検索した時も、コンテンツの不正確さに、ウェブサイトの論理構造のまずさと、Googleのバカさ(笑)が相まって、かなり酷いことになってるんですが(でも、今見てみると以前よりだいぶましな気も…)、これがナニゴケを作ろうとした動機のひとつだったりもします。

そんな感じで、本当に役に立つサイトが少ないなと感じている私が、いつも勉強させていただいている、おすすめサイトをひとつ紹介します。

そよ風のなかで Part2
https://soyokaze2jp.blogspot.com/

おそらく中の人はごりごりの蘚苔類の専門家ではないはずですが、根拠のない断定とかするような方ではなく内容も信頼できますし、このブログが無かったら、ナニゴケももっと酷いものにしかならなかったと本当に思います。で、このブログの中の人、 左木山祝一さんが、つい最近、「コケの国のふしぎ図鑑」という書籍を出されました。たくさんお世話になったお礼に、私もできるだけ早く購入させていただきます。おまいらも買え!

次は苔の図鑑についてのブログ記事を書くかもしれないし、書かないかもしれないし、やっぱり書くかもしれない。

ナニゴケをアップデートしました (Ver. 1.0.2)

ナニゴケのNNを新しくしました。

ナニゴケ – 苔の種類を判別します
https://www.nanigoke.net/

9400枚だったTrainのデータ数を10300枚に増やしました。それ以外は何も手を入れていませんあと、TensorFlow.jsのバージョンを上げました。

先日、自宅のすぐそばに、ものすごい「フロウソウ」スポットを見つけてびっくりしました。灯台下暗しとはまさにこのこと…

[追記 2019/8/3]
最終的にはデータを10万枚にするのが目標なので、だとしたらここが一合目ですかね。先は長いですが、必ず登り切りたいと思います。でも、8月は本当に外に出たくないよ。こんなことを言ってて、去年もこの時期の写真ほとんど撮れなかったのですが…

ナニゴケをアップデートしました (Ver. 1.0.1)

ナニゴケのNNを新しくしました。

ナニゴケ – 苔の種類を判別します
https://www.nanigoke.net/

8400枚だったTrainのデータ数を9400枚に大急ぎで増やし、その他もろもろ細かい修正を入れて学習し直したので、精度が少し上がったと思います。

2週間後ぐらいまでにもう一度、ある程度しっかりした修正を行い、そこから先はゆっくりしたペースで、改良を続けたいと思います。使ってくれる方が少ない間に、目立つ欠点はさっさと直してしまいたい…

苔の種類を判別するWEBアプリを作ってみました

苔(コケ植物/蘚苔類)の種類を判別するWEBアプリを作ってみました。

ナニゴケ – 苔の種類を判別します
https://www.nanigoke.net/

かなり以前からずっと作ってたやつで、できることなら、もう少しまともなものができてからリリースしたかったのですが、それを言っていると、どこまでいっても、もう本当にきりがないので、ここらで一旦、区切りをつけて、一回、表に出したいと思います。

中身はTensorFlow.jsを使ったよくある画像分類で、学習データはすべて私がデジカメで撮った写真です。労力の8割以上(将来的にはおそらく9割以上になると思う)は、この学習データを用意するところに掛かっています。写真は全部で、約13,700枚撮りましたが、結局、実際に学習に回せたのは8,700枚ほど。ある程度正確にいこうとすると、まあこんなもんですね。特に、最初の頃撮っていた分が、かなりの量ゴミになりました。ただ、今はもう、学習データ作成のコツを掴んだというか、やり方が定まってきて、だいぶいい感じにいろんな作業ができるようになりました。

先ほど、一番最初に撮った写真のタイムスタンプを確認しましたが、2017年4月でした。てっきり、さらにもう1年前だったような気がしていたので、うまく言えませんが、なんかちょっとほっとしました。もちろん、それでも時間が掛かりすぎなのは間違いないのですが… 実は去年の今頃、白駒の池に泊りがけで行ってきたんですよ。このナニゴケの為だけに(笑)。あれから一年ですか… 本当になにをしていたんでしょうね? ちなみに、もう一度今年中に白駒の池に行く予定にしてたりします。

スマホでもPCでもちゃんと動いてほしいと思っているこのWEBアプリですが、iOSはちょっと大き目なNNのモデル使うと、特に2回目以降のpredictでよく固まります。これはSafariだけではなく、Chromeでも同じなのでiOSの問題に思えるんですが、意外と情報少ないです(なんでなんだろう?)。ちゃんと動けばかなり速いので、逆に余計いらつくんですよね(笑)。以前、white shadeでも同じような感じだったのですが、あっちは今は大丈夫そうだし、よくわかりません。リリース直前になって、急遽かなりサイズの小さいモデルを作って、それを使うことにしたのですが、iOSの端末に全体の足を引っ張られるのはちょっとなんなので、もうiOSだけフォールバックさせるかもしれません。ちなみに、[ 設定 > Safari > 詳細 > Experimental Features > WebGL 2.0 ]がONになっていると、固まらなくなるような気がしますが、代わりにそこそこ遅くなります。Androidは、よくわかりません。安価で今どきな端末を、ひとつ買ったほうがいいかな? とりあえず、アクセスログ見て適当に判断してみます。

肝心の判別精度は、正直、現時点ではちょっとあれなんですが、とりあえず1か月以内にある程度はなんとかします。そして、1年後までには、十分な実用性が出せるように、ちょっと真剣に頑張ってみたいと思います。今すぐに冬の写真を、というわけにもいかないので、1年ください。そしてそして、このナニゴケ、できれば自分の人生かけたライフワークにしたいと考えていて、せめて10年後には、本当に良いものにしたいと思っています。COSUMIはいつまで続けるのか、私自身もよく分かりませんが、こっちは最期の日まで止めるつもりはありません。今現在、「判別できる種の数78・Trainに使用したデータ8,400枚」なのですが、1年後の目標は、「判別できる種の数120・Trainに使用したデータ20,000枚」、最終的な目標は、「判別できる種の数200・Trainに使用したデータ100,000枚」、これでいきたいと思います。そこまでいったら、日本で撮影した苔の写真を世界で一番たくさん持っていることになりそうですね(笑)。今は何番目ぐらいなのでしょうか?

それにしても、ここ最近このWEBアプリに掛かりっきりで頑張っていたので、さすがにちょっと疲れました。机の上に散乱している大量の苔たちも、一度片付けたいと思います(笑)。何種類あるのかも、もうよくわからんけど、20はあるな… 顕微鏡の覗き過ぎで、目を悪くした気がして、とってもやな感じのこの頃です。

この文章を読んでくださっている方の大半は、おそらく苔なんて興味ないと思うのですが、苔はいいよ! ぜひ、ナニゴケ使えるスマホを持って、家の周りの苔を探してみてください。私も実際に外で使ってみましたが、予想以上に面白かったです。

[追記 2019/7/3]
ナニゴケ作っている時に気づいたのですが、ブラウザによってNNの出力が結構変わってきますね。white shadeのレベル設定があれになるので、もう見なかったことに…(笑)

white shadeで11路盤と13路盤の対局ができるようになりました

今まで9路盤しか無かったwhite shadeで、11路盤と13路盤の対局ができるようになりました。

white shade – 囲碁ブラウザゲーム COSUMI
https://www.cosumi.net/whiteshade.html

少し前にできるようになっていたのですが、ブログ書くの忘れてました… 11路盤なら6子、13路盤なら8子まで石を置くことができます。前にも書きましたが、white shadeの9路盤のレベルごとの強さは、「レベル1はGNU GoのLevel 7に勝率60%、レベル4はFuego1.1の7000playoutに勝率50%、それ以外のレベルは、1レベル違いの自己対戦の勝率が同じ」に合わせていますが、11路盤と13路盤は、「9路盤の同じレベルに勝率50%の人間が勝率50%になるぐらいに」というふわっとした感じに定義しておきたいと思います。通常版の強さと少しずれていくかもしれませんが、とにかくこれでいきたいと思います。

使用した学習データにはほとんど含まれていない碁盤サイズですが、7路盤でもほぼ問題なく打つようなので、これは今度追加するかもしれません。

今回のアップデートでは、動作も大幅に高速になって、ほとんどの環境でサクサクだと思います(もし極端に遅い場合は何かおかしい可能性が高いです)。貴重なバッテリーを大切に使うようになりました。そして、打つ手自体も全体的にかなりきれいになったと思います。石をたくさん置いた時にも、こう打ってほしいなと私が考える理想に近い、個人的に好感もてる打ち方をするようになりました。今現在の一番の問題点は、シチョウがだめなのと、大石のアタリをうっかりする(というか、平たく言うと大石の攻め合いがかなりあやしい)ことですね。でもまあ、これから何とかできそうな気もします。そして、それが本当になんとかなれば19路盤も考えるのですが…

NNのモデルは、碁盤サイズにかかわらず同一のものを使っています。いろいろ考慮するとこれが一番良さそうかなと思いました。もうあと一回、VNとPN作り直して、次のアップデートでレベル6はいけるのではないかと… それで無理なら、少し深く探索してみます。そしてできれば、次のバージョンのVNは一度だけ、自由に使ってもらえるように公開したいなと考えています。13路盤以下だけですが碁盤サイズを選ばず、出力が目数単位のスコアなのは、結構使いやすいと思います。それを使って、だれかが何か素敵なのを作ってくれたりはしないかな?

最初は「とりあえず作ってみました」って感じだったwhite shadeですが、今現在はすでにかなり実用的だと思います。通常版と比較しても、特に大きく劣る点も無い気がしますし、実際、「こっちのほうが好き」って方も多いはず。ぜひ一度、試しに遊んでみてください。

完全にwhite shadeがオフラインでも動くようになりました

COSUMIのwhite shadeは、思考エンジン自体はクライアントサイドで動いているので、今までもオフラインでも対局することができたのですが、そもそもオフラインだとウェブページにアクセスして開くことができなかったので、あまり意味はありませんでした。それを、今まで一度でもオンラインの時にwhite shadeのページにアクセスしたことがあれば、次に開こうとした時に、それが仮にオフラインであっても、ちゃんとページが開けて対局もできるようにしました。

white shade – 囲碁ブラウザゲーム COSUMI
https://www.cosumi.net/whiteshade.html

自分で書いててもどういうことだよって感じで、なんだかとても摩訶不思議なのですが、そういうことができるみたいです。時代の進歩って本当に凄いですね。スマホのホーム画面にwhite shadeのページのアイコンを出しておけば、もうほとんどネイティブアプリと同じように使えます。

私は、Service Workerとか言われても、もうよくわかりませんので、今回はUpUpというライブラリをありがたく使わせてもらいました。ひとつだけ注意点として、オフラインでは対局のリプレイは見れませんので、そこだけはご容赦ください(これは今となっては、まあまあ面倒なんです…)。

今後は、空の旅のお供に、もしくは秘境においてのエクストリーム囲碁の対局相手として(笑)、white shadeをぜひご活用ください。