手と物体とのInteractionを検出するアプリケーションの開発

>100 Views

January 11, 23

スライド概要

https://techblog.morphoinc.com/entry/2023/01/11/100219

profile-image

モルフォは“画像処理×AI技術”の研究開発型企業として、ソフトウェア事業をグローバルに展開しています。テックブログにて画像処理・AIに関する情報をお届けしています。 ・コーポレートサイト:https://www.morphoinc.com/ ・テックブログ:https://techblog.morphoinc.com/

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

(ダウンロード不可)

関連スライド

各ページのテキスト
1.

手と物体とのInteractionを検出する アプリケーションの開発 インターンシップ最終報告会 山本航輝 1

2.

目次 1. 開発背景 2. Webアプリケーション概要 3. 手と物体の検出・分類 4. 文の出力 5. Webアプリケーションの実装 6. 改善点・課題 2

3.

目次 1. 開発背景 2. Webアプリケーション概要 3. 手と物体の検出・分類 4. 文の出力 5. Webアプリケーションの実装 6. 改善点・課題 3

4.

Vision-Languageデータセットの拡充 大規模pre-trained + fine-tuning 4 imgae: https://ego4d-data.org/ 用のデータが必要 データセットのアノテーションコスト問題 VLデータセットにおける情報の不足 大規模なVLデータセットの多くは画像(動画)+キャプション ex) Ego4D(7TBのデータセット https://ego4d-data.org/) domain-specificなタスク(料理動画からのレシピ生成等)には不十分 手と物体の関係を自動で検出できればrichな情報を持つ データセットが作れる

5.

目次 1. 開発背景 2. Webアプリケーション概要 3. 手と物体の検出・分類 4. 文の出力 5. Webアプリケーションの実装 6. 改善点・課題 5

6.

アプリケーション概要 手と物体のInteractionを文として出力 入力:画像 or 動画 出力:アノテーションされた画像 手の状態を表すテンプレート文 手と物体の検出:Hand Object Detector 物体の分類:EfficientNet 言語モデルによる文章生成までは至らなかった… 6

7.

目次 1. 開発背景 2. Webアプリケーション概要 3. 手と物体の検出・分類 4. 文の出力 5. Webアプリケーションの実装 6. 改善点・課題 7

8.

MediaPipeによる手の検出 8 最初の戦略 手を検出するモデル+物体を検出するモデル 各モデルの出力を利用 MediaPipe Hand Tracking https://mediapipe.dev/ Googleが公開しているMLフレームワークの一種 手の追跡・各pointの検出(三次元) バラバラのモデルでは厳しい 各モデルの出力をどう利用するのか 物体の三次元座標取得が難しい 出典: https://google.github.io/mediapipe/ solutions/hands

9.

Hand Object Detectorによる検出 手の状態と物体を検出 Understanding Human Hands in Contact at Internet Scale Hand Side, Hand State, Bounding Boxを付与 N: 接触なし(No Contact) S: 自身に触れている(ex: 胸に手を当てる) O: 他人に触れている P: Portableな物体に触れている F: Portableでない物体に触れている (ex; テーブルなど) 画像:https://github.com/ddshan/hand_object_detector 9

10.

システム概要 10 Faster RCNN(FRCNN) + Lossの追加による学習 RCNN: Region based Convolutional Neural Networks 出典:https://github.com/ddshan/hand_object_detector

11.

Loss追加による学習 Loss追加によって学習を回す FRCNNの出力に全結合層を2つ追加 𝒔 ∈ 𝑹𝟐 : 手の左右を表す2次元ベクトル 𝒄 ∈ 𝑹𝟓 : Contactの状態を表す5次元ベクトル それぞれのクロスエントロピー誤差𝑳𝒔𝒊𝒅𝒆 , 𝑳𝒔𝒕𝒂𝒕𝒆 を最小化するよう学習 𝑳𝒔𝒊𝒅𝒆 𝒔′ , 𝒔 = − 𝒊 𝒔′ 𝒊 𝒍𝒐𝒈 𝒔 𝒊 , 𝒔’は教師ベクトル 学習の詳細 データセット: DOH100 Backbone: ResNet-101 Batch size: 1 Epoch: 8 11

12.

EfficientNetによる物体の分類 12 検出されたObject ⇒ 物体名 軽量かつ高精度なEfficientNetを使用 MMClassification 様々な画像分類モデルが公開されている 生成モデルやトラッキングも EfficientNet 画像:https://www.gettyimages.co.jp/editorial-images Class: BasketBall Score: 49.0%

13.

目次 1. 開発背景 2. Webアプリケーション概要 3. 手と物体の検出・分類 4. 文の出力 5. Webアプリケーションの実装 6. 改善点・課題 13

14.

手の状態を文として出力 モデルの出力からテンプレート文を作成 テンプレート: {Hand Side} Hand: {Hand Statusに応じた文} No Contact ⇒ No Contact Self Contact ⇒ Self Interaction Other person ⇒ Contacting with another person Portable Object ⇒ Contacting with {EfficientNetによる分類結果} Stationary Object ⇒ Contacting with stationary object Stationary Objectの分類はうまくいかない (ほとんどのStationary Objectは見切れている) 14

15.

目次 1. 開発背景 2. Webアプリケーション概要 3. 手と物体の検出・分類 4. 文の出力 5. Webアプリケーションの実装 6. 改善点・課題 15

16.

Web開発フレームワークの選定 Streamlit HTML, CSSの知識が必要ない 機械学習を利用したWeb appに用いられることが多い Flask Streamlitよりも自由度が高い HTML, CSSの知識は必要 Django データベースや認証機能に強い 学習コストは高め 16

17.

Streamlit 導入コストが低い https://streamlit.io/ pipによるインストールだけで使える (仮想環境は必須??公式はpipenv推奨) 学習コストが低い Webアプリに必要な機能が簡単に書ける HTML, CSSの知識を必要としない ⇒ 学習状況の把握やモデルのデモに最適 17

18.

ディレクトリ構成 18 Hand Object Detector用のフォルダ EfficientNet用のフォルダ Streamlitが呼び出すプログラム

19.

実際の画面 19 画像をアップロード アノテーションされた画像 を表示 手の状態を文章で出力

20.

Streamlitを触ってみて デモ用のUI開発が早い とりあえずデモを見せるのによさそう 各機能の実装が簡単 Pythonだけで書ける(HTML, CSS不要) 色々な機能があらかじめ容易されている デプロイも容易(らしい) https://streamlit.io/cloud Streamlit Cloudへの登録とGithubで出来る 20

21.

目次 1. 開発背景 2. Webアプリケーション概要 3. 手と物体の検出・分類 4. 文の出力 5. Webアプリケーションの実装 6. 改善点・課題 21

22.

言語モデルによる文生成 Occlusion問題 物体の全体を検出できない ⇒ 前フレームの情報を使う? テンプレート文 ⇒ 柔軟な文の生成 テンプレート文では『手が何をしているか』はわからない Right Hand: Contacting with pen. ⇒ Right Hand: Writing paper. フレームレベルではなく動画レベルでの生成 動作の情報が必要 CopyNetを活用?(https://arxiv.org/abs/1603.06393) Object + State + verb ⇒ Transformer + CopyNet 22

23.

インターンシップを通して 「課題 ⇒ 手法の検討 ⇒ 実装 ⇒ 公開」の体験 課題 ⇒ 手法の検討の部分が重要 Vision-Languageの知識不足 単純なComputer Vision + 自然言語処理ではない Computer Vision, 自然言語処理に関する幅広い知識ももちろん欠かせない 機械学習の知識だけではダメ ライブラリの依存関係やメモリ効率などコンピューターサイエンスの 知識は重要 コードは綺麗に書きましょう(自戒も込めて 23