![見出し画像](https://assets.st-note.com/production/uploads/images/30863097/rectangle_large_type_2_2453f1b777a27922a82095549803a4fb.png?width=1200)
ML2Scratchでじゃんけんを学習させる手順(CoderDojo港北NTの初めての機械学習用として)
こんにちは、K研究員です。
次回はAI回ということでじゃんけんを画像認識させるのをやってみようかと思います。そこで、やり方を書いておきます。
とはいえ実際には本家のこちらで十分詳しいのであくまで個人の備忘録という感じです。
0.機械学習って何?なんでじゃんけんを機械学習するの?
皆さんは、じゃんけんのグー、チョキ、パーをどうやって見分けていますか?もしかしたらグーは立てた指がゼロ本、チョキは2本、パーは5本というように見ているかもしれません。あるいはそんなことは全然考えていなくてなんとなくわかるかもしれません。
でもプログラミングは、なんとなくではできません。そこで、じゃんけんを見分けようと思ったときに指の数を数えることを考えてみましょう。でも画像には顔が映っているかもしれないし、背景が映っているかもしれないですね。手もまっすぐ立てる場合もあれば横に寝かせる場合もあるかもしれない、いろいろなことを考えて、指の数を数えるプログラムを書くとすごく難しいです。
そんな時は機械学習の出番です。機械学習はグーの画像とチョキの画像、パーの画像をたくさん覚えさせると、まるで人間が学習するように、グーとチョキとパーを見分けるプログラムを作ってくれます。
もう少し詳しく言うと、画像は機械の中で数字として扱われます。その数字から自動的にじゃんけんを見分けるのに便利な特徴を探し出して、それを元に登録していないじゃんけんの画像でも見分けることができるようになります。
とはいえ、機械学習は人間のように何でもできるわけではなく、人間が工夫して覚えさせる必要があります。例えば、覚えさせる画像は多いほうがいいし、いろいろな場所や角度で手を出したほうが、見分けるときにもいろいろな場所や角度対応できます。
1.ML2Scratchにアクセスする
実際にやってみましょう。こちらからアクセスできます。
Webブラウザはchromeが推奨環境とのことです。そうは言ってもEdgeでも動くのかなと思いましたが動きませんでした。chromeを事前にインストールしておきましょう。
ちなみにこのScratch環境は普段のScratchとは違います。なのでオンラインでデータを保存する機能などはありません。Scratchはライセンスにより個人で改良して公開することが許されています。
今回使うML2Scratchも作者の石原淳也さんの開発した独自の環境ということになります。ありがたいですね。
2.拡張機能をONにする
左下青いアイコンをクリックして拡張機能を追加します。
ML2Scratchをクリック。
カメラとマイクを許可するかというメッセージが出るので、許可をクリックすると、上の画面のように、緑の拡張ブロックと右側にカメラの映像がでるはずです。
このとき、TV会議ツールzoomなどでカメラがすでに使われていると、カメラの映像が出てこないことがあります。このような場合は、カメラが使われているアプリをすべて消して、ブラウザの再読み込みボタンを押してもう一度、拡張機能を入れなおしましょう。
3.準備
上の画面のように「カメラの画像を学習/判定する」を持ってきて、一度クリックします。(周りに黄色い枠がつくと実行されています。何回やってもOK)。これをしておくと、カメラの映像のみを機械学習に使用するようになります。逆に「カメラ」を「ステージ」に変えると右に出ている画像すべて、例えば猫なども含めて機械学習に使用されます。
次に左側のラベル1の枚数~ラベル4の枚数にチェックを入れます。これをすると今何枚の画像を登録したかわかります。右の画像にラベル1~4の枚数が表示されるはずです(今は全部0)。
4.学習させる
全部学習させるまでに飽きちゃうと困るのでまずは、「何も手を出していないとき」と「グー」を学習させてみましょう。
まずは「ラベル1を学習する」というブロックを持ってきて、何も手を出さずに押してみます。
「最初の学習にはしばらく時間がかかるので、何度もクリックしないでください」というメッセージがでます。OKボタンを押してしばらく待ちます。右に出ている「ラベル1の枚数」が1になって、映像が動くようになったら、ちょっと首を振ってみたりして、20回ぐらいいろいろな何もしていない状態で「ラベル1を学習する」をクリックして登録します。
右の画面でラベル1の枚数が20くらいになっているでしょうか。30でも40でも大丈夫です。
次に「ラベル2を学習する」を持ってきます。いろいろなグーを出しながら同じようにポチポチします。いろいろな角度やいろいろな場所のグーを出しながら20枚ぐらいポチポチしましょう。もちろん20をちょっと超えていても大丈夫です。
いろいろなグーを登録。
5.判定してみる
さて、コンピューターはグーと何も出していない状態を学習することができたでしょうか。
図のように左から「ラベル11を受取ったとき」を持ってきて、11の部分を1と2に変えます。そして、「ラベル2を受け取ったとき」の下に「こんにちはと2秒言う」ブロックをつけて、こんにちはを「ぐー」に変えてみます。
1、つまり何もしていない状態と判断されると「ラベル1を受け取ったとき」が動きます。グーと判断されると「ラベル2を受け取った時が動きます」。
さて、グーを出した時だけ、グーと言ってくれるでしょうか。もしそうでなかったら次に書いてある感じで画像を増やします。完璧にするのは難しいので時間を決めていろいろ試してみましょう。
何も出していなくてもグーと言う
この場合は、何もしていない画像をもっと登録するとよくなるかもしれません。あるいは背景が複雑すぎたりiPadなどを使っていて背景がいろいろ動いてしまってうまくいかないかもしれません。何もしていない画像を増やしてもダメなら白い壁の前に移動してみたり、自分が映らないように手を出すといいかもしれません。
グーを出しても何も言わないときがある
この場合は、グーが足りないのかもしれません。いろいろなグーを増やしてみると改善するかもしれません。逆に諦めて今日は画面右上だけにグーを出すと決めてしまうのもうまく判定しやすくするコツです。
6.チョキとパーも学習する
ある程度うまくいって来たら、チョキとパーを学習してみましょう。
左側から、「ラベル3を学習する」と「ラベル4を学習する」のブロックを持ってきます。で、3を押しながらチョキを出します。最初はチョキを出していてもグーと言われるのですが、構わずやります。だんだん言われなくなってきます。
次にパーを学習させます。
7.判定してみる
グーと同じように判定のブロックを作ります。
グーの時のブロックをコピーして貼り付けし、2のところを3と4に、グーのところをチョキとパーに変えてあげると楽です。
うまく判定できるでしょうか。もしかしたらグーが判定できなくなっているかもしれません。なかなか難しいですが、5の時と同じ要領で判定できないものの画像を追加していきます。
例えば、右上でチョキを出すとがパーになっちゃうとしたら、右上でチョキを出しながら「ラベル3を学習する」を押すというようなことを繰り返していきます。
完璧にするのはたぶん難しいですが、全部50ぐらいまで行くとなんとなくうまくいくことが多くなると思います。
8.学習するときの注意
コンピューターは与えられた画像だけを見て学習を行います。人間ならじゃんけんと言えば手が大切と思うところですが、コンピューターは手だけに注目してくれるわけではありません。例えば、グーを覚えさせているときは背筋を伸ばして座っていたけど、チョキを覚えさせるころにはぐったりして寝っ転がっていたら、コンピューターは「グーって言うのはちゃんと座っていることで、チョキって言うのは寝てるってことなのかな」と学習してしまいます。寝ている画像も座ってる画像もグーチョキパー全部で学習させればいいかもしれないですが、それは大変なので、今回は同じ姿勢で行いましょう。
9.学習結果を保存しよう
せっかく学習させたので、「学習データをダウンロード」のブロックで保存してみます。「数字.json」というファイルが保存されるので、学習データをアップロード次回使えるようになります。
10.応用してみよう
せっかくじゃんけんが認識できるようになったので、じゃんけんゲームを作ってみるのもいいでしょう。
下のような感じで、2から4までの乱数を作ります。それが相手(猫)の手に相当します。2ならグー、3ならチョキ、4ならパーを出したとしてメッセージを出してみます。
これをグーチョキパー全部につけて、メッセージを変えれば、じゃんけんゲームになります。
あるいは、全然別のものを認識できるようにしてみるのも面白いです。
例えば、お父さんと、自分の顔を学習させてみる、新幹線のプラレールを見せると何の新幹線か教えてくれるというようなこともできます。
いろいろ工夫して自分のアイデアで認識してみましょう。
11.機械学習は奥が深い
さて、今回体験した機械学習はニューラルネットワークという技術を使用しています。しかし、機械学習はニューラルネットワークだけでなく、いろいろなものが存在します。何を認識するか、どのぐらい学習するためのデータがあるかなどいろいろな条件で一番いい機械学習のやり方は変わってきます。つまりいろいろな方法を知っている方が応用が利くということです。
また、機械学習を応用するには機械学習だけでなく、それ以外のプログラミングも必要になってきます。より間違わないじゃんけん認識をするにはどうしたらいいでしょうか。例えば、赤い四角を出してそこに入るように手を出してねと言うと、より安定して認識を行うことができます。
あるいは、2回続けてグーと判定されたらグーとするなどもより安定させるための常とう手段です。
まとめ
今回は、機械学習でじゃんけんを認識してみました。普通のプログラミングでは難しい画像の認識も機械学習ならできるようになります。実際に、我々の身の回りでもいろいろな機械学習が動いています。みなさんのカメラにも顔を認識してそこにフォーカスを当てる機能が入っているかもしれません。
みなさんのなかには将来、機械学習で動くシステムを作ることを仕事にする人も出てくるかもしれません。そうでなくても、これは機械学習しているかなという目で世の中を見てみるといろいろ違って見えるかもしれません。
身近な例を探してみると面白いかもしれないですね。
無料のプログラミングクラブCoderDojoを運営するにあたり寄付を受け付けています。お金は会場費・Wifiの費用・教科書に使用します。