ラベル Teachable Machine の投稿を表示しています。 すべての投稿を表示
ラベル Teachable Machine の投稿を表示しています。 すべての投稿を表示

2021年12月19日日曜日

画像の深層学習はどのような領域に着目しているのか

【what is this】ディープラーニングを用いた画像認識は、小学生による体験から実用レベルまで、利用が広がっています。そうなってくると、次の段階は、「どうやって認識しているのか」が気になるはずです。それに答えるのは簡単ではありませんが、少なくとも「画像のどこに着目して認識しているか」を示してくれれば、かなり良いです。簡単な原理でそれを実現する(子供向けの)Scratchプロジェクトがありました。大人でも試してみると楽しい!

■ 認識対象の例とTeachable Machineによる深層学習 
 画像認識の対象として、図1に示した4種の木製の小さな置物を取り上げます。それぞれを300枚程度、Webカメラの位置を変えたり、傾けたりしながら撮影します。それらにラベルをつけて学習させることは容易です。例えば、Google Teachable Machineを利用すれば誰にでもできます。
 その学習結果のモデルに対して、別途撮影した画像を入力した場合、それが4種類のどれであるかは、どの置物でも、99%程度の確かさ(conf = cofidence)で判別できます。

■ 深層学習では画像のどの領域に着目しているか 
 こんなに高いconfidenceで認識されても...  深層学習は画像のどの部分に注目して判断しているのでしょうか?それを調べるための簡単な原理が、Scratch3のプロジェクト「Explainable AI」に示されています。これは、子供向けのAIを開発しているML4K (Machine Learning for Kids) が公開しているものです。

 さっそく試してみましょう。図2(a)はAppleですが、適当なサイズの(紫色の)ブロックで、適当な領域を隠して撮影しています。「へた」の部分を隠した画像に対しての認識では、confidenceはほとんど変わらず99.5%でした。ところが、「中央」を隠した場合は、confidenceが50.1%まで大幅に低下しました。この観察から、「へた」よりも「中央の膨らみ」の方が、より重視されていると推定されます。


 図2(b) は、Salmonですが、「口先」よりも、「エラと腹部」が重要のようです。


 図2(c) は、Bearですが、「尻」よりも、「頭部」が重視されていることが分かります。これは、人間の感性からも納得できます。

■ 注目領域を自動的に検出して表示する 
 ここまでは、画像を隠す小さなブロックの位置を適当に手動で移動させながら調べました。それをもっと組織的にやってみましょう。そのやり方もこの「Explainable AI」に示されていますが、基本的には、手動で調べたのと同じ原理です。

 画像をメッシュにして、その各ブロック部をひとつづつ隠して行き、confidenceの低下を調べます。低下の度合いが大きい(すなわち、重要であった)部分ほど明るくすればよいのです。図3は、Bearの場合ですが、手動で調べた図2(c) のとおり、「目と耳の領域」を最も重視して認識していることが分かりました。こんな簡単な方法なのに素晴らしい!

子供向けのScratchプロジェクトだが、学生などにも有用 
 上に述べたとおり、この方法は図4のScratchプロジェクトで実現されています。主に子供を対象としたものですが、かなり高度な内容と言えそうです。実際、図3を眺めていると、自然言語処理などでも注目されているアテンション(Attention)に通ずるように思います。

 この「Explainable AI」では、TensorFlowをラップして使いやすくしたTeachable Machineの学習結果を取り込みます。そして、それを使った予測(prediction)のための基本的なブロックが用意されていますので、図3のような解析と表示が簡単にできるようになっています。学生や大人にも十分有用だと思います。


2020年3月7日土曜日

Ideas into Reality

 あるシンポジウムで、短い口頭発表を行う予定でしたが、新型コロナウィルスの影響でそれは中止になりました。そこで、中止発表当日に!完成したスライド16枚とその説明をここに掲載したいと思います。Web自主発表?です。(オンライン発表ではないですが。)

[末尾に、参考資料を追記しました。2020-3-10]

    AIの適用が拡大しています。そして、個人のニーズと嗜好の多様化に伴い、個人的な面でもそれは拡大しています。その背景として、AI活用の容易化、そして、AIはブラックボックス的でもあるが使える!という機運の高まりがあります。ここでの目的は、「Ideas into Realityの推進」にあります。具体的には、AIを活用した数例のアイディアを検討し、それを高レベルの開発環境で迅速にプロトタイピングできることを示します。それをさらに多様なAIアプリケーションの開発力向上に繋げて行きたいと思います。

    そのAIアプリケーション開発ですが、開発環境を概観した図がこちらです。様々な環境に包まれていますが、ここでは、緑色で示した「高レベル学習モデル作成」と「スマホアプリ開発環境」、それといくつかの従来型プログラミング言語とライブラリを使って行きます。

    これまでに、AIを活用したいくつかのアイディアを発案し、それを実装してきました。あまり難しいものはありませんが、こちらに示すようなものです。今回はそのうち、(1)ニューロンをmicro:bitで実装、(2)綺麗な風景の自動認識、の2つについてお話します。

    最初のアイディアは「Neural Networkのニューロンの動作をmicro:bit[1]を使って実感したい!」です。こちらは、手書き数字認識をDepp Learningで学習している例[2]です。ここにあるニューロンひとつづつを、1台のmicro:bitで実装したいということです。しかしながら、そのためには、この例は明らかに複雑過ぎますので、非常に簡単な例を考えます。意味のある最も単純な例としてのXORの認識[3]です。ですが、根幹となるバックプロパゲーション[4]は実装します。それが肝なのですから。ところで、なぜこのような原始的な実装をするのか?それは、そうすることで、実感を持って理解が深まること、そして、なによりも楽しい!からです。

    こちらは、7台のmicro:bitの連携でXORを学習しているところです。論理的な結線を書いてありますが、実際には結線はありません。全て無線通信でデータをやりとりしています。先ほどのバックプロパゲーションですが、この手書きの式にしたがって、Pythonで20行ほどの短いプログラムとしてmicro:bitに組み込みました。なお、micro:bitは性能が低いので、学習を加速させるため、こちらのNetLogo[5]で予め辺の重みの大まかな値(近似値)を求めておき、それを使って出発させます。

 こちらは、その動作状況のビデオの一部です。バックプロパゲーションのフェーズから示していますが、次にフォーワードプロパゲーションになると、出力Zに結果の数値が(一桁づつ)表示されます。正解と出力Zの差が一定値以下になると学習が終わったことになります。この画面では、x=1, y=1に対して、出力Z= 0を学習した状態です。

    このビデオはYouTubeで公開[6]しているのですが、それが図のとおり、micro:bitの公式Twitterで紹介されました。micro:bitは主に学校向けでありますから、通常はこのような使い方はしないのですが、これが取り上げられたということは、研究成果も教育へ還元して行こう、という姿勢の表れではないかと考えています。

    次に2番目のアイディアです。曇りがちだが、晴れると美しい山があります。しかし、いつそうなるか分かりませんので、綺麗に見える時にスマホへ自動通知する、というものです。具体的には、北海道の北部に利尻岳があります。島になっています。隣の礼文島からこれを写しているライブカメラ[7]がありますので、それを利用します。ここが海峡になっていることもあり、通常は曇っていて、unluckyな状況ですが、時々、goodな風景になります。そして希に、山全体が見えるexcellentになります。このexcellentになった時に、スマホに自動通知し、さらに先ほどのmicro:bitに大きな山のイメージを表示します。

 こちらは、作成したスマホアプリです。動かしてみます。最初は、曇っているがgoodな風景です。次に、excellentなのが出てきます。最後の画面では、confidence 0.99でexcellentと認識されています。

    この場合の画像の学習は、Google Teachable Machine2[8]で行いました。ブラウザで行えます。すなわち、excellent, good, unluckyな画像をそれぞれ30枚以上用意すると、すぐに学習を実行できます。学習が終われば、ここに新たな画像を与えると、3つのうちのどれに該当するかが判定されます。これらの操作はブラウザだけで閉じて行えます。しかし、ここでは、Androidアプリで利用するため、後で、この学習済みモデルを取り出します。

    ところで、このTeachable Machineは非常に高レベルの開発環境なのですが、それを完全なブラックボックスとせずに、システムからのフィードバック情報に基づいた調整が必要です。すなわち、学習の進行に伴う誤差の低減状況や、ラベル毎の正解率が得られますので、それを見ながら、入力画像の適合性や枚数の調整、さらに、こちらにある学習用ハイパーパラメータの調整を行うべきです。

    Androidアプリケーションとして作成するためのファイルの構成がこちらの図です。先ほどの学習済みモデルはこちらですが、具体的には3つのファイルで構成されています。それを操作するための、短い、JavaScript, HTMLを作成して、それらを、AndroidのローカルWebサーバへ配置します。それを動かすための制御プログラムは、MIT App Inventor[9]で作成しました。

    この図が、そのApp Inventorプログラムです。明解なブロック型のプログラム構造になっていることが分かります。すなわち、(1)ライブカメラから分類すべき画像を得る。(2)その画像を取得できたら認識を開始する。(3)先ほどの学習済みモデルを使って認識を実行する。(4)認識が終わると最後のブロックが呼び出されるので、そのなかで、分類結果がexcellentであればnotifyする。という流れです。

    ここ1、2年で、大学などを中心に、AIやデータサイエンスの教育研究が急速に盛んになってきました。ここに挙げたのは一部に過ぎませんが、例えば、神奈川工科大学の研究ブランディング事業でAIシステム[10]というのもあります。これらの取り組みのなかでも、今回のようなIdeas into Realityの実践は重要になっていくのではないかと思います。

    まとめです。AIを活用したいくつかのアイディアとそのスマホ等での実現についてお話しました。そのなかで、高レベルな開発環境とPythonの併用、さらに、App InventorとJavaScriptとの連携の強みを確認できました。今後の課題としては、例題に留まらない、実用レベルでのAIの活用をさらに蓄積して行く必要を感じます。一方、AIが出した結果に従うことに慣れてしまう怖さも感じます。例えば、サラリーマン川柳に、「AIに 営業スマイル 審査され」[11]というのがあります。これは、ちょっと考えさせられる句ではないでしょうか。最後に、高レベルの開発であっても、原理、動作、結果を的確に把握して行くという姿勢が重要と考えます。

Thank you for your attention

参考資料
[1] Micro:bit Educational Foundation
https://microbit.org/
https://twitter.com/microbit_edu
[2] Deep Neural Networks and Dropout
http://modelingcommons.org/browse/one_model/4445#model_tabs_browse_info
[3] 高卒でもわかる機械学習 (3) 多層パーセプトロン
http://hokuts.com/2015/12/04/ml3-mlp/
[4] 高卒でもわかる機械学習 (6) 誤差逆伝播法 その2
http://hokuts.com/2016/10/09/bp2/
[5] Artificial Neural Net - Multilayer
https://ccl.northwestern.edu/netlogo/models/ArtificialNeuralNet-Multilayer
[6] BackPropagation in Neural Network with an Example (XOR) Using Multiple Micro:bits
https://www.youtube.com/watch?v=tsYr01lQ_HY
[7] 礼文町 ライブカメラ
http://www.town.rebun.hokkaido.jp
[8] Teachable Machine2
https://teachablemachine.withgoogle.com/
[9] MIT App Inventor
http://appinventor.mit.edu/
[10] 神奈川工科大学 私立大学研究ブランディング事業
https://www.kait.jp/topics/branding/
[11] 第33回サラリーマン川柳 優秀100句
https://event.dai-ichi-life.co.jp/company/senryu/

2020年1月1日水曜日

2重螺旋に描いた「行く年来る年」

 明けましておめでとうございます。

新年にあたって作成したイラスト
 年末に、「行く年来る年」のイラストを何か作りたいと考えました。思い付いたのが、サボテン等に見られる2重螺旋の利用です。さっそくですが、その小作品をご覧下さい。マルチエージェントモデリング用のNetLogo3D[1]を利用して作成しました。下図のとおり、令和元年(2019年)は、螺旋に沿って何処かへ引き込まれ去って行きます。さようなら、その節はお世話になりました。一方、新年令和2年(2020年)は、中央から力強く外へ進出しようとしています。私もこうなりたいものです。


サボテンの2重螺旋の利用
 ところで、上図では、矢印を示してあるので、時計回りの螺旋(中心へ向かうものと出てくるもの)が確認できます。しかし、よく目を凝らしていると、それらとは別の(反時計回り)螺旋も見えてきませんか?実は、このイラストは、下図に示すサボテンの2重螺旋[2]の上に2019年と2020年を載せたものなのです。実際、左右の図の螺旋構造は同一であり、両者の違いは見せ方にあります。サボテンを上から見た場合に中心から外へ向かう方向で突起を辿ると、時計回りに8本、反時計回りに13本の螺旋が確認できます。8と13は、生物界によく出現するフィボナッチ数列の部分列であることも知られています。これらは、学校の理科に出てきたはずですが、大人になるとほとんど忘れているようです。

l

2重螺旋をAIで認識
 次に思い付いたことは、AI(人工知能)は、時計回りと反時計回りの螺旋を識別(認識)できるか、ということです。しかし、上図でも矢印がなければ、両方向の螺旋が見えて交錯しそうです。そこで、方向を示す赤い小さな三角形を各要素に付して、「こちらの図では時計回りに見る」「この図では反時計回りに見る」とした多数のスクリーンショットをAIに学習させました。こんな時には、GoogleのTeachable Machine2[3]が最適です。コーディングしなくてもブラウザだけでAI実験できました。必要ならば、コーディングして、自分用にカスタマイズすることも難しくないです。

An example of emphasizing a clockwise spiral


 結論から言いますと、上図に示すとおり、AIにより時計回りと反時計回りの螺旋は、簡単に学習させて認識できることが分かりました。このような、誰でもサーッと使えるAIがさらに発展することを期待したいと思います。WordやExcelを使うのと同じような感覚でAIを利用できる、そんな時代になりつつあるのかも知れない。特に、言語自動翻訳はまさにそうなっており、画像認識等もその段階に入りつつあるのではないかと思います。

雑感 - AI
 本題から外れるかも知れませんが、最後にひと言。情報工学科の学生であれば、ニューラルネットワーク(誤差逆伝播法や畳み込み等を含む)の基本概念とそのプログラミングはマスターすべきでしょう。その知識が、正しい学習のさせ方と得られた結果の的確な理解に繋がることは明らかです。でも、それよりも先に、上記のTeachable Machineなどを利用してその素晴らしさを実感するのもよいでしょう。本格勉強は、それからでも遅くありません。むしろ、その体験によって勉学意欲が湧くこともあるでしょう。

参考資料
[1] NetLogo, NetLogo3D
https://ccl.northwestern.edu/netlogo/
https://ccl.northwestern.edu/netlogo/docs/3d.html
[2] サボテンに関する記事(情報工学科ブログ、2013年)
http://blog.cs.kanagawa-it.ac.jp/2013/02/netlogod.html
http://blog.cs.kanagawa-it.ac.jp/2013/01/blog-post_14.html
[3] Google Teachable Machine 2
https://teachablemachine.withgoogle.com
https://teachablemachine.withgoogle.com/faq#Saving-&-Exporting

2019年11月27日水曜日

利尻山の画像認識をTeachable Machine2とApp Inventorで行う

 前回の記事では、MIT App InventorからGoogleのTeachable Machine2を使って画像認識する例を書きました。今回、それを少し進めたアプリを作成しました。

 北海道の北部にある利尻山(島全体が利尻山になっている)の状況をリアルタイムに認識するスマホアプリを作成しました。まずは、どんなものかをご紹介します。色々な造り方はあるでしょうが、ここでは、App InventorとTeachable Machine2を使って、如何に簡単に、美しい(?)AIアプリを作るかに主眼があります。何かのご参考になれば幸いです。

 このアプリは、参考資料[1]に示した利尻町役場のライブカメラの画像を適宜引用して、その画像を学習させています。その学習はTeachable Machine2で行います。その学習済みモデルを使って、以下のアプリ(App Inventorによる)は動きます。

 Fig.1では、現時点の利尻山のライブカメラ画像を読み込み、その画像を認識させようとしています。


 画像の認識が終わった状態が、Fig.2です。この場合の画像認識は、Fig.4に示す4つのカテゴリ(ラベル)のどれに該当するかを言うことです。この例では、幸いにも"よく晴れて山頂までみえる”という認識結果でした。間違いありません!そして、このカテゴリに該当した場合に限り、予め登録してあるメールIDあてに、この画像を添付して自動メール送信します。右側の図は、メールが届いた場面です。滅多に、"よく晴れて山頂までみえる”場面に遭遇しないので、この自動メールは有り難いはずです!


 他の場面の認識結果も示しておきます。Fig.3は、"曇っているが中腹は見える"場合と、"夜になり真っ暗なのでおやすみ!”の認識例です。いずれも妥当です。


 学習には、Fig.4に示す4つのカテゴリを設けました。それぞれに十数枚の画像を集めて学習させました。なかでも、"Clear enough to se the top"(よく晴れていて山頂までみえる)場面になかなか出会うことができず、予想外に作業時間がかかってしまいました。


 今後も、このような、比較的簡単に作成できるが、ちょっと光る(?)アプリを心がけます。

参考資料
[1] ライブカメラが掲載されている利尻町役場のホームページ
http://www.town.rishiri.hokkaido.jp/rishiri/

2019年11月12日火曜日

スマホを音/画像/ポーズの識別器にする

 先日(2019年11月初旬)に発表されたGoogleのTeachable Machine 2.0 [1]はちょっと衝撃的でした。バージョン1.0は2017年に発表されていたのですが、今回のバージョン2.0は著しく進歩しています。”Teachable Machine 2.0 makes AI easier for everyone”のキャッチフレーズの通りだと感じます。

 このTeachable Machineの特徴は、ブラウザのもとで動くTensorflow.jsを使っており、学習も認識もローカルマシンできてしまうことです。学習は今のところPCでしかできないようですが、学習済みのモデルは、スマホへ組み込めるので、スマホでリアルタイムに、音/画像/ポーズの識別ができてしまいます!ここで特筆すべきは、コーディング不要であり、例えば以下のようなスマホ用の音識別器は、全体で15分くらいでできてしまうことです!

 ここでは、図1に示した5つの音源を扱うことにします。(画像やポーズ認識もこの後やってみます。)


 まず、ブラウザで、周辺雑音と5種類の音をスマホへ入力して(各々20秒程度)、図2の中央にあるTraining(学習)ボタンを押します。数十秒で学習が完了します。恐らく、転移学習モデルが背後にあるため、こんなに速く終わるのだと思います。次に、スマホで学習済モデルを使うために、これをexportします。


 スマホ側では、この学習済みモデルのURLをブラウザから開くだけです。すなわち、これだけで、スマホが、音の識別器になってしまいました。図3と図4には、スマホに新たにテスト用入力音を与えた場合のリアルタイム識別結果を示します。5種類とも、かなり高い確度で認識に成功しています。




 この学習モデルは、JavaScriptとJsonで示されているので、スマホ側で、認識結果を使った何らかのアプリケーションを作ることもできるはずです。その場合は、JavaScriptプログラミングの基礎知識などは必要になりますが。

参考資料
[1] Teachable Machine 2.0 makes AI easier for everyone
https://blog.google/technology/ai/teachable-machine/