手と物体とのInteractionを検出する
アプリケーションの開発
インターンシップ最終報告会 山本航輝
1
目次
1. 開発背景
2. Webアプリケーション概要
3. 手と物体の検出・分類
4. 文の出力
5. Webアプリケーションの実装
6. 改善点・課題
2
目次
1. 開発背景
2. Webアプリケーション概要
3. 手と物体の検出・分類
4. 文の出力
5. Webアプリケーションの実装
6. 改善点・課題
3
Vision-Languageデータセットの拡充
大規模pre-trained + fine-tuning
用のデータが必要
データセットのアノテーションコスト問題
VLデータセットにおける情報の不足
大規模なVLデータセットの多くは画像(動画)+キャプション
ex) Ego4D(7TBのデータセット https://ego4d-data.org/)
domain-specificなタスク(料理動画からのレシピ生成等)には不十分
手と物体の関係を自動で検出できればrichな情報を持つ
データセットが作れる
4
imgae: https://ego4d-data.org/
目次
1. 開発背景
2. Webアプリケーション概要
3. 手と物体の検出・分類
4. 文の出力
5. Webアプリケーションの実装
6. 改善点・課題
5
アプリケーション概要 6
手と物体のInteractionを文として出力
入力:画像 or 動画
出力:アノテーションされた画像
手の状態を表すテンプレート文
手と物体の検出:Hand Object Detector
物体の分類:EfficientNet
言語モデルによる文章生成までは至らなかった…
目次
1. 開発背景
2. Webアプリケーション概要
3. 手と物体の検出・分類
4. 文の出力
5. Webアプリケーションの実装
6. 改善点・課題
7
MediaPipeによる手の検出
最初の戦略
手を検出するモデル+物体を検出するモデル
各モデルの出力を利用
MediaPipe Hand Tracking
https://mediapipe.dev/
Googleが公開しているMLフレームワークの一種
手の追跡・各pointの検出(三次元)
バラバラのモデルでは厳しい
各モデルの出力をどう利用するのか
物体の三次元座標取得が難しい
8
出典:
https://google.github.io/mediapipe/
solutions/hands
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; テーブルなど)
9
画像:https://github.com/ddshan/hand_object_detector
システム概要
Faster RCNN(FRCNN) + Lossの追加による学習
RCNN: Region based Convolutional Neural Networks
10
出典:https://github.com/ddshan/hand_object_detector
Loss追加による学習
Loss追加によって学習を回す
FRCNNの出力に全結合層を2つ追加
𝒔 ∈ 𝑹𝟐
: 手の左右を表す2次元ベクトル
𝒄 ∈ 𝑹𝟓: Contactの状態を表す5次元ベクトル
それぞれのクロスエントロピー誤差𝑳𝒔𝒊𝒅𝒆, 𝑳𝒔𝒕𝒂𝒕𝒆を最小化するよう学習
𝑳𝒔𝒊𝒅𝒆 𝒔′, 𝒔 = − 𝒊 𝒔′ 𝒊 𝒍𝒐𝒈 𝒔 𝒊 , 𝒔’は教師ベクトル
学習の詳細
データセット: DOH100
Backbone: ResNet-101
Batch size: 1
Epoch: 8
11
EfficientNetによる物体の分類
検出されたObject ⇒ 物体名
軽量かつ高精度なEfficientNetを使用
MMClassification
様々な画像分類モデルが公開されている
生成モデルやトラッキングも
12
Class: BasketBall
Score: 49.0%
EfficientNet
画像:https://www.gettyimages.co.jp/editorial-images
目次
1. 開発背景
2. Webアプリケーション概要
3. 手と物体の検出・分類
4. 文の出力
5. Webアプリケーションの実装
6. 改善点・課題
13
手の状態を文として出力
モデルの出力からテンプレート文を作成
テンプレート:
{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
目次
1. 開発背景
2. Webアプリケーション概要
3. 手と物体の検出・分類
4. 文の出力
5. Webアプリケーションの実装
6. 改善点・課題
15
Web開発フレームワークの選定
Streamlit
HTML, CSSの知識が必要ない
機械学習を利用したWeb appに用いられることが多い
Flask
Streamlitよりも自由度が高い
HTML, CSSの知識は必要
Django
データベースや認証機能に強い
学習コストは高め
16
Streamlit
導入コストが低い
https://streamlit.io/
pipによるインストールだけで使える
(仮想環境は必須??公式はpipenv推奨)
学習コストが低い
Webアプリに必要な機能が簡単に書ける
HTML, CSSの知識を必要としない
⇒ 学習状況の把握やモデルのデモに最適
17
ディレクトリ構成 18
Hand Object Detector用のフォルダ
EfficientNet用のフォルダ
Streamlitが呼び出すプログラム
実際の画面 19
画像をアップロード
アノテーションされた画像
を表示
手の状態を文章で出力
Streamlitを触ってみて
デモ用のUI開発が早い
とりあえずデモを見せるのによさそう
各機能の実装が簡単
Pythonだけで書ける(HTML, CSS不要)
色々な機能があらかじめ容易されている
デプロイも容易(らしい)
https://streamlit.io/cloud
Streamlit Cloudへの登録とGithubで出来る
20
目次
1. 開発背景
2. Webアプリケーション概要
3. 手と物体の検出・分類
4. 文の出力
5. Webアプリケーションの実装
6. 改善点・課題
21
言語モデルによる文生成
Occlusion問題
物体の全体を検出できない
⇒ 前フレームの情報を使う?
テンプレート文 ⇒ 柔軟な文の生成
テンプレート文では『手が何をしているか』はわからない
Right Hand: Contacting with pen.
⇒ Right Hand: Writing paper.
フレームレベルではなく動画レベルでの生成
動作の情報が必要
CopyNetを活用?(https://arxiv.org/abs/1603.06393)
Object + State + verb ⇒ Transformer + CopyNet
22
インターンシップを通して
「課題 ⇒ 手法の検討 ⇒ 実装 ⇒ 公開」の体験
課題 ⇒ 手法の検討の部分が重要
Vision-Languageの知識不足
単純なComputer Vision + 自然言語処理ではない
Computer Vision, 自然言語処理に関する幅広い知識ももちろん欠かせない
機械学習の知識だけではダメ
ライブラリの依存関係やメモリ効率などコンピューターサイエンスの
知識は重要
コードは綺麗に書きましょう(自戒も込めて
23

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