2024年4月29日
スタックチャン(ここも参照)を使って対話ロボットを作ります。ChatGPTのAPIを利用した対話システムの作り方を学びます。さらに、RAG(Retrieval-Augmented Generation:検索拡張生成)を使いこなして、 (ChatGPTだけでは対応できない)求人情報などに基づく受け答えを可能にしましょう。
by Takao(mongonta555)
アールティ版のスタックチャンが対応しているのは、stackchan-arduinoライブラリを利用している下記のソフトです。
stack-chan-tester https://github.com/mongonta0716/stack-chan-tester
AIスタックチャンEx https://github.com/ronron-gh/AI_StackChan_Ex/
stackchan-bluetooth-simple https://github.com/mongonta0716/stackchan-bluetooth-simple
ただし、設定ファイルがない場合はPWMサーボとして動くので設定ファイルが必要です。 SDカード上にyaml/SC_BasicConfig.yamlというのを作成して、対応サーボに"DYN_XL330"と指定すると動くようになります。(その他servoの設定はファイルを見てください。) 使い方や設定パラメータについてはGitHubに記載しています。 https://github.com/stack-chan/stackchan-arduino
by starf
SC_BasicConfig.yamlファイルの設定を画像で添付いたしました(下に掲載)。参考にしてみてください。 また、どうしてもうまく動かない場合、ちょっと古い(昨年12月時点でのものになります)のですが、私の方でRT版のテスト用にフォークしたソースコードもあります。
https://github.com/starf555/stack-chan-tester.git のブランチのRT-version-test
https://github.com/starf555/AI_StackChan2_FuncCall/tree/RT-version-test のブランチのRT-version-test です。
上が @Takao(mongonta555) さんのstack-chan-tester相当のもの
下が、 @motoh さんのAIStackchan2相当のものになります。 設定の参考にしていただけるかなと思います。
設定の際、DYN_XL330だとだめなんです、RT_DYN_XL330と指定する必要があります。(例の0度360度問題のところで、回転防止用のコードが入ってるので……)
by starf
何をやってみたいかによると思いますが、おしゃべりを試したいならば、Arduino版のAI StackchanExをbuildして入れるのがよいかと思います。また、Arduino版のプログラミングを試したい場合は、stack-chan-testerがシンプルなので、ちょこっと変えたりして試すのによいかと思います。 新しいセンサつないでみたいとかだとUIFlowが手軽に試せるのかなと思いますが…… @Takao(mongonta555) さんが書いていらっしゃるようにサーボ関連のところがネックになるかもなので、今回のすりみんさんの用途にはstack-chan-testerのプログラムを見てみるのがよいのではないかと。
by motoh
RT版+Arduinoのサポートが課題に… 私もRT版のハードは持ってませんが...AIスタックチャンExの修正要望があればできる範囲で対応します
by starf
今のところ、RT版の違いは、stackchan-arduinoのライブラリで吸収されているので、特に問題はないかと。頭は結局CoreS3なので、サーボ側まわりが吸収できればよいはずなので…… あとはREADMEにRT版の設定方法を書き加えさせてもらえれば、ぐらいですかね?(yamlファイルのコメントのところにも足させていただく?) あ、そうか、あと、私が最新版のBuildテストをコツコツすればよいという話だったりします……
by Takao(mongonta555)
RT版はさらに初期設定が違うという、、、(´・ω・`)
この後の有用な情報は、discordのStack-chanサーバの「気軽に質問」チャンネルの、2025年7月1日以降のやりとりを参照下さい。「aiスタックチャン」チャンネル、「アールティ版キット」チャンネルも参照。
2024年2月12日
ポーズ・ランドマーク検出の応用システムとして企画・開発。元にするコードはこれ。解説はここやここやここ。←英語が苦手な人は翻訳して読みましょう。ダンスのお手本はたとえばこんな感じ。
動画ファイルに対してポーズランドマークを検出し、それを重畳した動画をファイルに保存するプログラム(旧モデル)←GPT4を使用して作成;プログラム(新モデル対応:人数指定可;座標検出;後ろから/上から機能も)
カメラ入力に対してポーズランドマークを検出し、それを重畳して表示するプログラム(旧モデル);プログラム(新モデル対応:人数指定可)
ダンスステップチュータの仕様の例:
お手本とユーザのダンスを比べて採点する
ついていけないのをAIが検出して、お手本の再生スピードを落としたり、できないところを繰り返し再生してくれたりする
合わないのを検出したら、この動画みたいに「キック、歩いて・歩いて、着いて、キック、トントン」ってAIが声を出してくれる
Q: ダンスの練習をすべきですか?
A: 本番のデモで踊る人が数人はいると思います。上手な人と初心者の両方がいる方がいいかな。人前で踊らないとしても、開発するデモシステムの動作確認をするには踊ってみる必要がきっとあります。また、どのようなシステムが欲しいか必要かは、自分で踊ってみるとよく分かります。たとえば、上記のようについていけないときゆっくり再生して欲しいとか、「キック、歩いて」とか声で指示してくれると踊りやすいとか。
2025年4月8日
新体操への応用に向けて検討すべき点(竹澤先生との相談内容をメモ):
スマホやPCでスロー再生して、うまくいったとき/いかなかったとき、あるいは、トップレベル選手/初級者を見比べる、という現状と比べて、どのような機能があると練習に役立つか?/便利か?/欲しいか?
ランドマーク検出における、画面上(上下方向と左右方向)の位置の精度と奥行方向の位置の精度(ある動作が「うまくいったとき/いかなかったとき」を比較して、演技者が違いを自覚できるために必要な精度があるか?)→1台のカメラでは奥行方向は精度が落ちる(このことが分かる動画の例:仮想的に上から見た動画を作っているので、奥行き方向の推定位置が可視化されている。奥行方向は腰の位置を原点とした相対座標)。
90度の角度で配置した2台のカメラで正面から/側面から撮影し、2台分のデータを統合すると、3次元座標の精度を向上できそう。検出したランドマークは例えば「左ひざ」のようなラベルが付いているため、2台分のデータを統合し、3次元の精度を高めるのは課題はいろいろあるが可能だと思う。基本的には、奥行方向の座標を、もう1台のカメラの左右方向の座標で置き換えればよいはず。課題は以下の通り:何らかの手段で2台分の映像の時刻合わせをする必要がある。2台のカメラの角度をできるだけ正確に90度にする必要がある。2台のカメラの被写体への距離(映像上の被写体の大きさ)をできるだけ揃える必要がある(揃ってなければ拡大/縮小)。正面からの映像/側面からの映像に対して、ランドマーク検出すると、検出したランドマークの位置がずれている可能性あり。片方で検出失敗とかもありえる。
奥行方向は精度の問題以外に、相対座標になってしまい、絶対座標が分からないという問題もある。奥行方向の絶対座標が必要な場合は、2台のカメラを使わざるを得ないだろう。(あるいは、深度センシングカメラを使う手もあるかもしれないが、それとランドマーク検出を組み合せる方法が必要)
バランス(直立から足を上げる、体を反らせるなど)、ジャンプ、ターン、それぞれの解析に必要な奥行方向の精度は?まずは1台のカメラで試すとしたら、奥行き方向の精度が悪くても解析結果が有用そうなのは、「バランス」「ジャンプ」「ターン」の順だろう。
「うまくいったとき/いかなかったとき」「トップレベル選手/初級者」の違いは、どこに注目するとよいか(どのような可視化をするとよいか)→タイミング?、速度?、関節角度?、関節を曲げる順序/速度?、地面との角度?、地面からの高さ?、フープを投げる前の手を引く?タイミング/強さ?、強さは何かから(速度からとか?)ある程度推定できる?
他の競技(例:空手の型)への応用も検討
視線分析の応用としては、選手の視線に加えて、審判の視線(レベルによる視線の違い)も応用対象。
2024年2月12日
深層学習により、豚の画像から健康状態や餌や掃除のタイミングを推定。技術的には、まずはここに載せてある「学習済みのResNet50モデルによる画像認識」あたりが出発点で、これを正解ラベル付きの豚画像でファインチューニングする方向。ファインチューニングするにはどうすればよいかは、Colab AIで尋ねてみたり、ネット検索で調べてみたりしましょう。正解ラベル付きの豚画像が準備できるまでの間は、練習用に何か適当な正解ラベル付き画像(アニメのキャラクターの名前を当てるとか、ラーメンの画像からラーメン屋を当てるとか)を用意して試してください。その後、さらに、新しい技術も試みましょう。
Google Colaboratoryの使い方(他にも「google colab 使い方」などで検索するといろいろ解説がある)
深層学習の勉強を兼ねて、「手書き数字の認識(深層学習)(GPT-4) → 対話前半部分のプログラム(Colab) → 対話後半部分のプログラム(Python: ローカルで実行)」←こちらも試すとよいと思います。後半部分は、Colabではできないので、ローカルでPythonとVisul Studio Codeをインストールしましょう。Pythonのインストールはたとえばここを参照。Visual Studio Codeのインストールは、たとえばここを参照。ここも参考になると思います。この後、さらに、GitHub Copilotを使えるようにしておけば無敵。
2023年9月23日
今年度はもう間に合いませんが、来年度に向けて準備を始めましょう。本格的なプログラム開発無しで参加することもできますが、その場合は、以下を見ると対話システムを作ってみることができます。
https://dialog-system-live-competition.github.io/dslc3/lecture.html の講習会動画
対話システムにおけるシナリオ作成の秘訣について(動画4本)
対話システム作成講習(動画5本)
ライブコンペ6のキックオフの動画 https://sites.google.com/view/dslc6/キックオフ?authuser=0
以上1.,2.の視聴には2~3時間程度かかります。
xAIML SUNABAの利用にはGoogle アカウントが必要になります。
xAIML SUNABAの利用はブラウザ(最新版のGoogle Chrome)を通して行います。
SUNABAを使った対話システムの構築方法、SUNABAから ChatGPTを呼び出す方法については下記を見て下さい。ChatGPT APIの利用は有料(従量制)です→相談に応じます(岡)。
2023年7月23日
ここを参照。2023年7月23日時点の掲載項目:重回帰分析、k-means法、潜在的ディリクレ配分法(Latent Dirichlet Allocation)で分類し、word cloudで可視化
2023年7月23日
学習済みのResNet50モデルを使って、画像認識するプログラムを書こう。
次の段階に進もう:
大量のいろいろな画像で学習済みのモデル(これを自分たちで作るのは大変なので、公開されているものを利用;今回利用したResNet50はその1つ)を元にして、自分が認識させたいものを手軽に学習させる方法を、調べてみよう。
2023年7月2日
深層学習モデル(畳込みニューラルネットワーク:CNN)を構築し、MNISTデータセットで学習させよう。学習済みのモデルを使って、画面上で手書きした数字を認識させよう。
(まだの人は)まず、PythonとVisual Studio Codeをインストール → 「ビデオゲームを作ろう」を参照
続いて、tensorflow, keras, numpyをインストール(ついでに、pandas, sklearnもインストール)→たとえば、ここを参照。さらに、Pillowをインストール(たとえば、ここを参照)。matplotlibもインストール(たとえば、ここを参照)。
ChatGPTに相談(この例はGPT-4)
ChatGPTが教えてくれたプログラムをコピペすると、CNNの構築、学習、評価までは、Google Colabで実行可能。
画面上で数字を手書きして、それを認識させるのは、Colabではできないので、ChatGPTが教えてくれたプログラムをローカルで実行。
深層学習に興味が沸いたら、ChatGPTにいろいろ尋ねたりして勉強しよう。
次の段階に進もう:
認識精度を上げるには、どのような方法があるだろうか?いろいろな方法を実際に試してみよう。
数字だけでなく、いろいろな画像を認識するには、どうしたらいいだろうか?ChatGPTに尋ねたり、検索して調べたりしてみよう。
2023年5月20日
Pythonでビデオゲームを作りましょう。人同士で遊ぶ簡単なピンポンゲームから始めて、人と対戦するNPC (non-player character)、学習するNPC、・・・と進めていきましょう。pygameライブラリを使います。
まず、PythonとVisual Studio Codeをインストールして下さい。たとえば、ここを参照。この他にも、「python vscode インストール」「python インストール」「vscode インストール」などと検索すると有用なサイトがいろいろあります。パソコン内にすでにPythonがインストールされていた人は、ここも参照して下さい。Pythonインストール時の注意:自動で環境変数にパスを追加するため、「Add Python x.x to PATH」にチェックを入れ、「Install Now」をクリックします。
続いて、pygameをインストールします。たとえば、ここを参照。この他にも、「pygame インストール」で検索すると有用なサイトがいろいろあります。
このプログラム(←このサイトのプログラムを改変したものです)から始めて、いろいろ拡張しよう。プログラム中のコメントが英語なので分かりにくい人は、機械翻訳するか、ChatGPTに頼んで日本語のコメントにしてもらいましょう→この結果のプログラム。拡張例を以下に示す:
ラケットやボールの色・大きさ・位置・速さを変える
得点条件を決めてスコア表示(後ろの壁に当たったら得点とか、ラケットに当たったら得点とか。ラケットの裏で打つと高得点とかも面白そう。どこかに的があって、それに当てると得点というのもありますね。ブロック崩しみたいな感じ)→ スコア表示するプログラムの例 → GPT4に頼んでさらにコメントを増やしてもらいました。どこをどう変えるとどうなるか分かりやすくなったはず。
どんな条件で1ゲームとするかを決める(例:10点でゲームオーバーとか)
効果音をつける
ダブルスにする
ラケットを前後左右に動かせるようにする
ラケットを前後に動かしながら打つとそれに応じたボールの速度になるようにする
ラケットを傾けられるようにして、打球の方向を変えられるようにする
ラケットを自動で動かすプログラムを書く
ラケットの動かし方をお手本に合わせて覚えるプログラムを書く(教師あり学習)
高得点が得られるようにラケットの動かし方を学習するプログラムを書く(強化学習)
相手のレベルに応じてプレーしてくれるNPC (non-player character)
ダブルスでうまく連携するNPC
声でラケットを動かせる/学習させられるようにする(上、下、よし、逆、止まって、頑張れ、・・・)
最初は声をかけられても分からないが、赤ちゃんのようにしだいに言葉の意味が分かってくる
・・・
2023年5月16日
糊やクリップなどは使わず、A4の紙だけで、できるだけ高い構造物を作るチーム戦を実施しました。必要な機能の洗い出し、それを実現する手段の考案など、今後、AIシステムの試作や卒業研究を進めていくための、楽しい練習になったと思います。糊やクリップが使えないので、「留める」機能の実現が鍵になりましたね。各チームからの、どのような機能をどんな手段で実現したかのレポートを楽しみにしています。「支える」機能も重要でした。手段は、折る、切る、ちぎる、巻く、丸める、挟む、重ねる、差し込む、・・・いろいろありましたね。
各グループの最高到達
紙を安定するために使用した部品たち
ChatGPT (GPT-3.5) でプロジェクトの内容を相談してみました。(2023.4.12)↓
Bing Chatでも同じ質問をしてみました。(2023.4.13)↓