2021年4月29日木曜日

ゴールデンウィークだが、家で山の景色を楽しむ

今年も、5月のゴールデンウィークが始まりました。本来であれば、山へでも出かけたいところですが、このコロナ禍では、遠くへの旅行もかないません。しばし、家にいて、自作のAndroidアプリで懐かしい山の姿を(ほぼリアルタイムに)見て、気を紛らわせています。本日(4月29日)は、こちらはあいにくの雨模様ですが、北海道北部は晴れ渡っているようです。そこへ行って、空気を吸いたい。

利尻島-沓形から(残雪が美しい)

対岸の礼文島から(雲や霧が多いので、頂上まで見えるのは希)


2021年4月24日土曜日

国立国語研究所 学術情報リポジトリに論文が登録されました

以前のブログ記事にも書きましたが、国立国語研究所の「言語資源活用ワークショップ2020」で発表した以下の論文が、同所学術情報リポジトリに登録され,DOIが付与されました。(ワークショップ講演論文集全体がリポジトリに登録された結果、そうなったにすぎませんが。)

山本富士男:植物に関する自由形式説明文からのJSON形式テキストの自動生成

https://repository.ninjal.ac.jp/records/3167

(info:doi/10.15084/00003151)

小生は元々、コンピュータソフトウェアなどを専門としてきましたが、近年の自然言語処理(特に機械学習を用いた)に興味を持ち、基本的な事項を学んできました。本論文は、その過程で得た知見に基づいて纏めたひとつの拙論ですが、これを機にさらに深めて行きたいと考えています。


2021年4月17日土曜日

口形から「あ/い/う/え/お/閉」を識別(補足)

先の記事の補足です。

「あ、い、う、え、お、X」の6種類の口形が、awbcwaという2つの特徴量によって、かなり明確に分離できるという実験結果を先に示しました。今回は、これをより明確にリアルタイムに確認するために、アプリを若干改訂しました。詳しくは、下図の中の説明文をご覧下さい。

(1)上段のボタンを押す、(2)「続行」を押す、(3)その母音を発話、(4)自動プロット

(注)本件は、母音の単独の口形を識別するものであり、単語の発話での連続口形の認識について述べたものではありません。

2021年4月12日月曜日

ML4K(Machine Learning for Kids)で学習済みモデルを利用

  【what is this】ML4K(Machine Learning for Kids)は、機械学習を利用したアプリケーションの作成を容易にするものです。このブログでもいくつかご紹介してきました。今回は、その後のさらなる発展状況の短いサーベイです。

Kidsは大学生も含む?ので、遠慮なく使おう!
 ML4KのKidsというのは、小学校低学年くらいと思っていました。しかし、ちょっとレベルが高いのでは?という内容も含まれています。では、Kidsって、何歳までなのか?調べて見ると、実は一般に、子供、若者、初心者の意味で使われており、親しみを込めて(あるいは少し見下げて)若者を指すらしい。もちろん、大学生も含むようです。実際に、"英辞郎on the web Pro"には、以下のような例文もありました。

    He is still acting like a college kid. ->あの子は行動がまだ大学生のようですね。
    too expensive for college kids ->学生には高過ぎる
    As kids reach high school, college, and so on ->高校、大学、社会人と成長するにつれ

 ですから、大学生も、自分に必要なAIアプリを簡単に作りたい場合は、遠慮なく利用してはどうでしょうか。それで研究が促進できれば素晴らしいです。

ML4Kで使えるScratch3用のAI拡張機能(学習済みモデル)
 ML4Kは、もともと、IBM WatsonのAI機能をラップして使えるようにしていました。最近はさらに進化して、図1に示すように、色々なAI関連の学習済みモデルをScratch3で使えるようにしています。すなわち、顔や手や身体の状態と動作を認識するFace, Hand, Pose detectionなどが含まれます。
 また、自然言語処理分野では、Toxicity(好ましくない、不適切な表現)の認識などもあります。さらに、Pythonをある程度できる人は、TensorFlowを使った自分用のモデルを作成してここで使えるようにもできます。Pythonを使わなくても、GoogleのTeachable Machineで非常に簡単に独自モデルを作成することも含まれています。


Hand detectionを使って指の折り方で数値を認識する
 上記のように、利用できる学習済みモデルは多いのですが、ここでは、「Hand detectionを使って指の折り方で数値を認識」をやってみます。実は、この課題は、Media Pipe Handsを利用してPythonでやったものです。それと同じことを、ML4Kの使い勝手を確認するために行いました。ただし、Pythonの場合は、0〜31まででしたが、今回は簡単にして、0, 1, 2だけにしてあります。もちろん、31までやることも可能ですが。
 図2は、これを実現したScratch3プログラムの主要部です。学習と予測(認識)の両方が含まれています。

 学習に必要なラベル付きデータは図3のようなものです。内容は、親指の先端と付け根、人差し指の先端と付け根などのポイントの座標値の組を収集したものになっています。例えば、親指だけを折った場合は、ボタン"1"を押すことで、図2のプログラム中のラベル1に対するブロックが反応して、図3のラベル"1"の枠に、その時点の指の座標値が自動的に格納されます。このように各ラベルのデータが揃ったところで、あるボタンを押すと(自動的に IBM Watsonが働き)学習が行われます。

 学習が済んだ後に、改めてカメラに向かって指を折り、図1の「予測(認識)」ブロックを起動させます。すると、図4に示すような認識結果がえられました。図では、"1"と"2"がそれぞれ正しく認識されています。



感想 
 AIの教育を支える環境は種々あると思いますが、このML4Kは、大学生レベルの人にも、すばやく自分のアイディアを実現するプロトタイピングに大いに役立つのではないでしょうか。その後、本格的な課題に取り組む場合は、ここでの経験が生きるはずです。また、低学年のAI教育において、少しでも各自のアイディアを取り入れた演習をしやすくなるように思われます。

2021年4月7日水曜日

Identify the position from the key point number in Facemesh

This article is a sequel to "Using the MIT App Inventor Facemesh Extension". In Facemesh, the key points of the face are numbered from 1 to 450, and the map that associates the number with the position in the face is provided by Google on GitHub. However, at present, this map does not show the correct position in the face (probably due to version upgrade). Therefore, I made a tool to get the correspondence between the number and the actual position.

Most desirable is to get that number by touching a Facemesh key point. However, there are 450 points in total, including dense parts, so even if it is enlarged, it is difficult to operate it on the screen of the smartphone. Therefore, as a second method, I decided to search for the necessary key points while increasing or decreasing the number. In this case, a partial map that is already known (like the handwritten map in Fig. 1) is useful.

In the Fig.1, start from the specified value (255 in the figure), and increase or decrease the number with the "+" and "-" buttons. This makes it easy to search around 255, for example. In this example, the red dot for number 256 is clearly visible among the green keypoints. This app also uses the Facemesh extension from MIT App Inventor. Fig.2 shows the main parts of the program. I won't explain it in detail, but it's fairly easy to make because it uses Ball, which is an animation function of App Inventor.

In fact, in the "mask wearing" shown in the previous task [Exercise-1], the key points that form the periphery of the mask were acquired by the above method.

2021年4月5日月曜日

口形から「あ/い/う/え/お/閉」を識別

 【what is this】MIT App Inventor のExtension利用の続編です。今回は、口形から、「あ/い/う/え/お/閉」を識別することを試みました。口の周りを含む、顔の多数のキーポイントがリアルタイムに得られるので、口形パタンの画像をdeep learningさせることなく、簡単な計算で識別します。

[Exercise-4] 顔のキーポイントを利用して口形から「あ/い/う/え/お/閉」を識別
 これは、前回記事に続く、練習問題です。スマホで撮影した顔から口形を認識して、それが、「あ/い/う/え/お/閉」のいずれであるかを、リアルタイムに識別するアプリを作成しましょう。

 図1の上段は、これらの母音を発話した時の顔のキーポイント(全450点)の状況です。一方、その下段は、口の周りの6点だけで口形を扱うために考えたフレームモデルです。どの発話なのかを判断するために、このフレームから、ある2つの特徴量(awb, cwa)を定義します。これらの特徴量は、口の開き具合や角度を反映するように、簡単な計算で決めました。



 各発話について、32回の試行を行い、これら2つの特徴量(awb, cwa)の相関を示したものが図2です。この結果から、6種類の口形が、余裕をもって、分類(分離)できることが分かりました。また、「あ」と「え」は比較的近いことが分かります。実感と合致します。一方、「う」と「閉」は、フレームでは似ていますが、図2によればかなり明確に分離されているのが面白い。


 それならば、ということで、これらの口形をリアルタイムに認識するデモアプリを作成しました。下図は、「あ-え-い-お-う-い-閉」の順に発話した場合です。ほぼ良好に6種の口形を識別できているようです。



 むやみに、画像を沢山用意して、それをdeep learningさせる前に、ちょって待て。何とか特徴量を見つけて、それらの関係を観察し、それに基づく簡単なプログラムで識別できる場合もある。今回は、そのような一例のように思います。

2021年4月2日金曜日

MIT App Inventorの公式Twitterで紹介されました

 MIT App Inventorで公開されたFacemesh Extension(顔認識用の拡張機能)を使って書いたこの記事ですが、App Inventor公式Twitterでご紹介いただきました。(2021年4月1日)