SlideShare a Scribd company logo
Mobility Technologies Co., Ltd.
MediaPipe の紹介
2022/10/06 AI技術共有会
Ryosuke Kamesawa
Mobility Technologies Co., Ltd.
MediaPipeとは
入門
Mobility Technologies Co., Ltd.
MediaPipeとは
- ML solutions
- cross-platform
- customizable
- for live and streaming
- Demo: https://viz.mediapipe.dev/demo/face_detection
https://google.github.io/mediapipe/
Mobility Technologies Co., Ltd.
https://google.github.io/mediapipe/solutions/solutions
Solutions
Mobility Technologies Co., Ltd.
- Android
- AAR / native build
- iOS
- native build
- デスクトップ(Linux/MacOS)
- Python (pip)
- C++ (native build)
- ブラウザ(Chrome/Safari)
- JavaScript(NPM, Solutionごと)
- Coral dev board(EdgeTPU, 組み込みLinux)
プラットフォーム対応
https://google.github.io/mediapipe/getting_started/building_examples.html
Mobility Technologies Co., Ltd.
最初から用意されているパイプライン(solution)を実行する場合
使い方: Ready-to-use solutions (Python)
import cv2
import mediapipe as mp
mp_face_detection = mp.solutions.face_detection
with mp_face_detection.FaceDetection(
model_selection=1, min_detection_confidence=0.5) as face_detection:
image = cv2.imread( "image.png")
# Convert the BGR image to RGB
# and process it with MediaPipe Face Detection.
results = face_detection.process(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
Mobility Technologies Co., Ltd.
パイプラインのカスタマイズ
拡張
Mobility Technologies Co., Ltd.
- パイプラインをグラフとして定義
- ノードはCalculatorと呼ばれ実際の処理を行う
- ノード間にストリーミングデータが流れる
- Protocol buffer (text format) で記述
- Calculatorは動的にスケジューリングされ、スレッドプール上で実行される
- Calculatorの実装はC++
- 組み込みのCalculator
- 前処理(画像フォーマットの変換、FPSの制御)
- 推論(TFLite, Tensorflow)
- 後処理(NMS, 画像へ結果のオーバーレイ)
- and more https://github.com/google/mediapipe/tree/master/mediapipe/calculators
パイプライン
Mobility Technologies Co., Ltd.
Python: CalculatorGraph API
import mediapipe as mp
# Define pipeline graph
config_text = """
input_stream: 'in_stream'
output_stream: 'out_stream'
node {
calculator: 'PassThroughCalculator'
input_stream: 'in_stream'
output_stream: 'out_stream'
}
"""
# Create CalculatorGraph, set callback, and start execution
graph = mp.CalculatorGraph(graph_config=config_text)
output_packets = []
graph.observe_output_stream(
'out_stream',
lambda _, packet: output_packets.append(
mp.packet_getter.get_str(packet)))
graph.start_run()
# Feed string
packet1 = mp.packet_creator.create_string(
'abc').at(0))
graph.add_packet_to_input_stream(
'in_stream', packet1)
# Feed image
rgb_img = cv2.cvtColor(cv2.imread(
'image.png'),
cv2.COLOR_BGR2RGB)
packet2 = mp.packet_creator.create_image_frame(
image_format=mp.ImageFormat.SRGB, data=rgb_img).at(1))
graph.add_packet_to_input_stream(
'in_stream', packet2)
# Destruct CalculatorGraph
graph.close()
Mobility Technologies Co., Ltd.
例: https://viz.mediapipe.dev/demo/face_detection
Protobuf: https://github.com/google/mediapipe/blob/master/mediapipe/framework/calculator.proto
グラフ定義
Mobility Technologies Co., Ltd.
拡張 Calculatorの追加
Mobility Technologies Co., Ltd.
- 実装がC++
- Pythonを含むスクリプト言語は使えない
- クロスプラットフォームを謳っているため?
- mediapipe自体のビルドから行う必要がある
- Github: https://github.com/google/mediapipe
- Example
- https://google.github.io/mediapipe/framework_concepts/calculators.html
- 既存のCalculatorも豊富なので自分で実装することは稀
- 想定された使い方の場合
Calculator
Mobility Technologies Co., Ltd.
CalculatorBaseから次の4つのメソッドをoverride
- GetContract(CalculatorContract* cc)
- 入出力の型の制約
- Open(CalculatorContext*)
- 初期化
- Process(CalculatorContext* cc)
- 実際の処理を記述
- 入力: cc->Inputs().Index(n).Get<T>()
- 出力: cc->Outputs().Index(n).Add(packet)
- Close(CalculatorContext* cc)
- 終了処理
Calculatorを実装する
https://google.github.io/mediapipe/framework_concepts/calculators.html
Mobility Technologies Co., Ltd.
中身どうなってる?
仕組み
Mobility Technologies Co., Ltd.
構成
Framework / C++
Calculator / C++
Android
Java/C++
TFLite Preprocess Postprocess OpenGL
iOS
Swift/ObjC
Python
JavaScript
wasm
C++
API
Framework
Mobility Technologies Co., Ltd.
- Calculator Graph
- 実行するグラフを保持する。入力を与えたり、出力を取得したりできる
- Calculator
- グラフのノード、実際の処理を行う
- Packet
- ノード間を流れるデータの実体+タイムスタンプ
- Input / Output Stream
- ノード間を繋ぐキュー
- Stream上を流れるPacketのタイムスタンプは単調増加
- Scheduler Queue
- Calculatorの実行を管理する。CalculatorGraphが少なくとも一つ持つ
- デフォルトでスレッドプールで実行される
- Input Stream Handler
- Calculatorを実行する条件 (Input Policy) を保持する
概念(登場人物)
Mobility Technologies Co., Ltd.
Calculator Graph
Calc. Node / Context
Calc. Node / Context
概観図
Scheduler Queue
Scheduler Queue
Packet
Calc. Node
Calculator
Output Stream Handler
Input Stream Handler
Calc. Context
Inputs
Outputs
Mobility Technologies Co., Ltd.
- mediapipeではタイムスタンプを明示的に扱う(Packet生成時に指定する)
- タイムスタンプに起因する再現性の問題がなくなる
(特に複数入力がある場合)
- 実行のタイミングはInput Policyで制御
- Input policyはパイプライン定義で設定可能
- デフォルトのInput policy
- 同じタイムスタンプの入力Packetは同時に処理される
(実際の到着時刻には無関係)
- 全てのPacketは処理される
→実行時に複数入力の一部しか与えられない場合がある
その他のInput policy
- 全ての入力が揃った時のみ実行
- タイムスタンプと関係なく到着したらすぐに実行
Input Policy
Mobility Technologies Co., Ltd.
- Solutions
- 既に用意されているパイプラインで簡単に使える
- https://google.github.io/mediapipe/solutions/solutions.html
- パイプラインのカスタマイズ
- Calculatorを組み合わせることで様々な処理ができる
- Calculatorの追加
- mediapipeに実装を追加しビルドする必要があって難易度は上がる
まとめ

More Related Content

What's hot

GAN(と強化学習との関係)
GAN(と強化学習との関係)GAN(と強化学習との関係)
GAN(と強化学習との関係)
Masahiro Suzuki
 
動作認識の最前線:手法,タスク,データセット
動作認識の最前線:手法,タスク,データセット動作認識の最前線:手法,タスク,データセット
動作認識の最前線:手法,タスク,データセット
Toru Tamaki
 
実装レベルで学ぶVQVAE
実装レベルで学ぶVQVAE実装レベルで学ぶVQVAE
実装レベルで学ぶVQVAE
ぱんいち すみもと
 
Action Recognitionの歴史と最新動向
Action Recognitionの歴史と最新動向Action Recognitionの歴史と最新動向
Action Recognitionの歴史と最新動向
Ohnishi Katsunori
 
[DL輪読会]Vision Transformer with Deformable Attention (Deformable Attention Tra...
[DL輪読会]Vision Transformer with Deformable Attention (Deformable Attention Tra...[DL輪読会]Vision Transformer with Deformable Attention (Deformable Attention Tra...
[DL輪読会]Vision Transformer with Deformable Attention (Deformable Attention Tra...
Deep Learning JP
 
[DL輪読会]GLIDE: Guided Language to Image Diffusion for Generation and Editing
[DL輪読会]GLIDE: Guided Language to Image Diffusion  for Generation and Editing[DL輪読会]GLIDE: Guided Language to Image Diffusion  for Generation and Editing
[DL輪読会]GLIDE: Guided Language to Image Diffusion for Generation and Editing
Deep Learning JP
 
FastAPIを使って 機械学習モデルをapi化してみた
FastAPIを使って 機械学習モデルをapi化してみたFastAPIを使って 機械学習モデルをapi化してみた
FastAPIを使って 機械学習モデルをapi化してみた
Sho Tanaka
 
【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models
cvpaper. challenge
 
Android/iOS端末におけるエッジ推論のチューニング
Android/iOS端末におけるエッジ推論のチューニングAndroid/iOS端末におけるエッジ推論のチューニング
Android/iOS端末におけるエッジ推論のチューニング
Deep Learning Lab(ディープラーニング・ラボ)
 
深層学習の不確実性 - Uncertainty in Deep Neural Networks -
深層学習の不確実性 - Uncertainty in Deep Neural Networks -深層学習の不確実性 - Uncertainty in Deep Neural Networks -
深層学習の不確実性 - Uncertainty in Deep Neural Networks -
tmtm otm
 
【メタサーベイ】Video Transformer
 【メタサーベイ】Video Transformer 【メタサーベイ】Video Transformer
【メタサーベイ】Video Transformer
cvpaper. challenge
 
深層生成モデルと世界モデル(2020/11/20版)
深層生成モデルと世界モデル(2020/11/20版)深層生成モデルと世界モデル(2020/11/20版)
深層生成モデルと世界モデル(2020/11/20版)
Masahiro Suzuki
 
Tensorflow Liteの量子化アーキテクチャ
Tensorflow Liteの量子化アーキテクチャTensorflow Liteの量子化アーキテクチャ
Tensorflow Liteの量子化アーキテクチャ
HitoshiSHINABE1
 
MLflowで学ぶMLOpsことはじめ
MLflowで学ぶMLOpsことはじめMLflowで学ぶMLOpsことはじめ
MLflowで学ぶMLOpsことはじめ
Kenichi Sonoda
 
semantic segmentation サーベイ
semantic segmentation サーベイsemantic segmentation サーベイ
semantic segmentation サーベイ
yohei okawa
 
分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~
Hideki Tsunashima
 
畳み込みニューラルネットワークの研究動向
畳み込みニューラルネットワークの研究動向畳み込みニューラルネットワークの研究動向
畳み込みニューラルネットワークの研究動向
Yusuke Uchida
 
Semi supervised, weakly-supervised, unsupervised, and active learning
Semi supervised, weakly-supervised, unsupervised, and active learningSemi supervised, weakly-supervised, unsupervised, and active learning
Semi supervised, weakly-supervised, unsupervised, and active learning
Yusuke Uchida
 
PRML学習者から入る深層生成モデル入門
PRML学習者から入る深層生成モデル入門PRML学習者から入る深層生成モデル入門
PRML学習者から入る深層生成モデル入門
tmtm otm
 
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII
 

What's hot (20)

GAN(と強化学習との関係)
GAN(と強化学習との関係)GAN(と強化学習との関係)
GAN(と強化学習との関係)
 
動作認識の最前線:手法,タスク,データセット
動作認識の最前線:手法,タスク,データセット動作認識の最前線:手法,タスク,データセット
動作認識の最前線:手法,タスク,データセット
 
実装レベルで学ぶVQVAE
実装レベルで学ぶVQVAE実装レベルで学ぶVQVAE
実装レベルで学ぶVQVAE
 
Action Recognitionの歴史と最新動向
Action Recognitionの歴史と最新動向Action Recognitionの歴史と最新動向
Action Recognitionの歴史と最新動向
 
[DL輪読会]Vision Transformer with Deformable Attention (Deformable Attention Tra...
[DL輪読会]Vision Transformer with Deformable Attention (Deformable Attention Tra...[DL輪読会]Vision Transformer with Deformable Attention (Deformable Attention Tra...
[DL輪読会]Vision Transformer with Deformable Attention (Deformable Attention Tra...
 
[DL輪読会]GLIDE: Guided Language to Image Diffusion for Generation and Editing
[DL輪読会]GLIDE: Guided Language to Image Diffusion  for Generation and Editing[DL輪読会]GLIDE: Guided Language to Image Diffusion  for Generation and Editing
[DL輪読会]GLIDE: Guided Language to Image Diffusion for Generation and Editing
 
FastAPIを使って 機械学習モデルをapi化してみた
FastAPIを使って 機械学習モデルをapi化してみたFastAPIを使って 機械学習モデルをapi化してみた
FastAPIを使って 機械学習モデルをapi化してみた
 
【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models
 
Android/iOS端末におけるエッジ推論のチューニング
Android/iOS端末におけるエッジ推論のチューニングAndroid/iOS端末におけるエッジ推論のチューニング
Android/iOS端末におけるエッジ推論のチューニング
 
深層学習の不確実性 - Uncertainty in Deep Neural Networks -
深層学習の不確実性 - Uncertainty in Deep Neural Networks -深層学習の不確実性 - Uncertainty in Deep Neural Networks -
深層学習の不確実性 - Uncertainty in Deep Neural Networks -
 
【メタサーベイ】Video Transformer
 【メタサーベイ】Video Transformer 【メタサーベイ】Video Transformer
【メタサーベイ】Video Transformer
 
深層生成モデルと世界モデル(2020/11/20版)
深層生成モデルと世界モデル(2020/11/20版)深層生成モデルと世界モデル(2020/11/20版)
深層生成モデルと世界モデル(2020/11/20版)
 
Tensorflow Liteの量子化アーキテクチャ
Tensorflow Liteの量子化アーキテクチャTensorflow Liteの量子化アーキテクチャ
Tensorflow Liteの量子化アーキテクチャ
 
MLflowで学ぶMLOpsことはじめ
MLflowで学ぶMLOpsことはじめMLflowで学ぶMLOpsことはじめ
MLflowで学ぶMLOpsことはじめ
 
semantic segmentation サーベイ
semantic segmentation サーベイsemantic segmentation サーベイ
semantic segmentation サーベイ
 
分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~
 
畳み込みニューラルネットワークの研究動向
畳み込みニューラルネットワークの研究動向畳み込みニューラルネットワークの研究動向
畳み込みニューラルネットワークの研究動向
 
Semi supervised, weakly-supervised, unsupervised, and active learning
Semi supervised, weakly-supervised, unsupervised, and active learningSemi supervised, weakly-supervised, unsupervised, and active learning
Semi supervised, weakly-supervised, unsupervised, and active learning
 
PRML学習者から入る深層生成モデル入門
PRML学習者から入る深層生成モデル入門PRML学習者から入る深層生成モデル入門
PRML学習者から入る深層生成モデル入門
 
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
 

Similar to MediaPipeの紹介

Android Studioの魅力
Android Studioの魅力Android Studioの魅力
Android Studioの魅力
Keiji Ariyama
 
Azure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionAzure IoT Edge で Custom Vision
Azure IoT Edge で Custom Vision
Yoshitaka Seo
 
Wasm blazor and wasi 2
Wasm blazor and wasi 2Wasm blazor and wasi 2
Wasm blazor and wasi 2
Takao Tetsuro
 
2013.01.18 G*Workshop GGX 2012 Report
2013.01.18 G*Workshop GGX 2012 Report2013.01.18 G*Workshop GGX 2012 Report
2013.01.18 G*Workshop GGX 2012 Report
Yu Sudo
 
Titanium Mobile
Titanium MobileTitanium Mobile
Titanium MobileNaoya Ito
 
Flex with Google App Engine for Java
Flex with Google App Engine for JavaFlex with Google App Engine for Java
Flex with Google App Engine for Java
Takeya Waki
 
NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#
Yoshifumi Kawai
 
20130315 abc firefox_os
20130315 abc firefox_os20130315 abc firefox_os
20130315 abc firefox_os
Tomoaki Konno
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
Yuta Matsumura
 
初めてのPadrino
初めてのPadrino初めてのPadrino
初めてのPadrino
Takeshi Yabe
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
ThinReports
 
Microsoft Graph API Library for Go
Microsoft Graph API Library for GoMicrosoft Graph API Library for Go
Microsoft Graph API Library for Go
yaegashi
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputing
Noboru Irieda
 
cocos2d-xハンズオン勉強会 in 名古屋
cocos2d-xハンズオン勉強会 in 名古屋cocos2d-xハンズオン勉強会 in 名古屋
cocos2d-xハンズオン勉強会 in 名古屋Tomoaki Shimizu
 
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
Drecom Co., Ltd.
 
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsPL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
Kohei KaiGai
 
Smart tag firststep
Smart tag firststepSmart tag firststep
機械学習 / Deep Learning 大全 (5) Tool編
機械学習 / Deep Learning 大全 (5) Tool編機械学習 / Deep Learning 大全 (5) Tool編
機械学習 / Deep Learning 大全 (5) Tool編
Daiyu Hatakeyama
 
Airflowを広告データのワークフローエンジンとして運用してみた話
Airflowを広告データのワークフローエンジンとして運用してみた話Airflowを広告データのワークフローエンジンとして運用してみた話
Airflowを広告データのワークフローエンジンとして運用してみた話
Katsunori Kanda
 
Redmineosaka 20 talk_crosspoints
Redmineosaka 20 talk_crosspointsRedmineosaka 20 talk_crosspoints
Redmineosaka 20 talk_crosspoints
Shinji Tamura
 

Similar to MediaPipeの紹介 (20)

Android Studioの魅力
Android Studioの魅力Android Studioの魅力
Android Studioの魅力
 
Azure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionAzure IoT Edge で Custom Vision
Azure IoT Edge で Custom Vision
 
Wasm blazor and wasi 2
Wasm blazor and wasi 2Wasm blazor and wasi 2
Wasm blazor and wasi 2
 
2013.01.18 G*Workshop GGX 2012 Report
2013.01.18 G*Workshop GGX 2012 Report2013.01.18 G*Workshop GGX 2012 Report
2013.01.18 G*Workshop GGX 2012 Report
 
Titanium Mobile
Titanium MobileTitanium Mobile
Titanium Mobile
 
Flex with Google App Engine for Java
Flex with Google App Engine for JavaFlex with Google App Engine for Java
Flex with Google App Engine for Java
 
NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#
 
20130315 abc firefox_os
20130315 abc firefox_os20130315 abc firefox_os
20130315 abc firefox_os
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
 
初めてのPadrino
初めてのPadrino初めてのPadrino
初めてのPadrino
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
 
Microsoft Graph API Library for Go
Microsoft Graph API Library for GoMicrosoft Graph API Library for Go
Microsoft Graph API Library for Go
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputing
 
cocos2d-xハンズオン勉強会 in 名古屋
cocos2d-xハンズオン勉強会 in 名古屋cocos2d-xハンズオン勉強会 in 名古屋
cocos2d-xハンズオン勉強会 in 名古屋
 
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
 
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsPL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
 
Smart tag firststep
Smart tag firststepSmart tag firststep
Smart tag firststep
 
機械学習 / Deep Learning 大全 (5) Tool編
機械学習 / Deep Learning 大全 (5) Tool編機械学習 / Deep Learning 大全 (5) Tool編
機械学習 / Deep Learning 大全 (5) Tool編
 
Airflowを広告データのワークフローエンジンとして運用してみた話
Airflowを広告データのワークフローエンジンとして運用してみた話Airflowを広告データのワークフローエンジンとして運用してみた話
Airflowを広告データのワークフローエンジンとして運用してみた話
 
Redmineosaka 20 talk_crosspoints
Redmineosaka 20 talk_crosspointsRedmineosaka 20 talk_crosspoints
Redmineosaka 20 talk_crosspoints
 

More from emakryo

Customizing cargo for cross compiling
Customizing cargo for cross compilingCustomizing cargo for cross compiling
Customizing cargo for cross compiling
emakryo
 
Feature Store in DRIVE CHART
Feature Store in DRIVE CHARTFeature Store in DRIVE CHART
Feature Store in DRIVE CHART
emakryo
 
Feature StoreをRustで実装した話
Feature StoreをRustで実装した話Feature StoreをRustで実装した話
Feature StoreをRustで実装した話
emakryo
 
なぜRustか?
なぜRustか?なぜRustか?
なぜRustか?
emakryo
 
rustdef: Rust on jupyter notebook
rustdef: Rust on jupyter notebookrustdef: Rust on jupyter notebook
rustdef: Rust on jupyter notebook
emakryo
 
Cargo makeを使ってみた話
Cargo makeを使ってみた話Cargo makeを使ってみた話
Cargo makeを使ってみた話
emakryo
 
Machine Learning on Graph Data @ ICML 2019
Machine Learning on Graph Data @ ICML 2019Machine Learning on Graph Data @ ICML 2019
Machine Learning on Graph Data @ ICML 2019
emakryo
 
Neural networks for Graph Data NeurIPS2018読み会@PFN
Neural networks for Graph Data NeurIPS2018読み会@PFNNeural networks for Graph Data NeurIPS2018読み会@PFN
Neural networks for Graph Data NeurIPS2018読み会@PFN
emakryo
 

More from emakryo (8)

Customizing cargo for cross compiling
Customizing cargo for cross compilingCustomizing cargo for cross compiling
Customizing cargo for cross compiling
 
Feature Store in DRIVE CHART
Feature Store in DRIVE CHARTFeature Store in DRIVE CHART
Feature Store in DRIVE CHART
 
Feature StoreをRustで実装した話
Feature StoreをRustで実装した話Feature StoreをRustで実装した話
Feature StoreをRustで実装した話
 
なぜRustか?
なぜRustか?なぜRustか?
なぜRustか?
 
rustdef: Rust on jupyter notebook
rustdef: Rust on jupyter notebookrustdef: Rust on jupyter notebook
rustdef: Rust on jupyter notebook
 
Cargo makeを使ってみた話
Cargo makeを使ってみた話Cargo makeを使ってみた話
Cargo makeを使ってみた話
 
Machine Learning on Graph Data @ ICML 2019
Machine Learning on Graph Data @ ICML 2019Machine Learning on Graph Data @ ICML 2019
Machine Learning on Graph Data @ ICML 2019
 
Neural networks for Graph Data NeurIPS2018読み会@PFN
Neural networks for Graph Data NeurIPS2018読み会@PFNNeural networks for Graph Data NeurIPS2018読み会@PFN
Neural networks for Graph Data NeurIPS2018読み会@PFN
 

Recently uploaded

ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
0207sukipio
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 

Recently uploaded (14)

ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 

MediaPipeの紹介

  • 1. Mobility Technologies Co., Ltd. MediaPipe の紹介 2022/10/06 AI技術共有会 Ryosuke Kamesawa
  • 2. Mobility Technologies Co., Ltd. MediaPipeとは 入門
  • 3. Mobility Technologies Co., Ltd. MediaPipeとは - ML solutions - cross-platform - customizable - for live and streaming - Demo: https://viz.mediapipe.dev/demo/face_detection https://google.github.io/mediapipe/
  • 4. Mobility Technologies Co., Ltd. https://google.github.io/mediapipe/solutions/solutions Solutions
  • 5. Mobility Technologies Co., Ltd. - Android - AAR / native build - iOS - native build - デスクトップ(Linux/MacOS) - Python (pip) - C++ (native build) - ブラウザ(Chrome/Safari) - JavaScript(NPM, Solutionごと) - Coral dev board(EdgeTPU, 組み込みLinux) プラットフォーム対応 https://google.github.io/mediapipe/getting_started/building_examples.html
  • 6. Mobility Technologies Co., Ltd. 最初から用意されているパイプライン(solution)を実行する場合 使い方: Ready-to-use solutions (Python) import cv2 import mediapipe as mp mp_face_detection = mp.solutions.face_detection with mp_face_detection.FaceDetection( model_selection=1, min_detection_confidence=0.5) as face_detection: image = cv2.imread( "image.png") # Convert the BGR image to RGB # and process it with MediaPipe Face Detection. results = face_detection.process(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
  • 7. Mobility Technologies Co., Ltd. パイプラインのカスタマイズ 拡張
  • 8. Mobility Technologies Co., Ltd. - パイプラインをグラフとして定義 - ノードはCalculatorと呼ばれ実際の処理を行う - ノード間にストリーミングデータが流れる - Protocol buffer (text format) で記述 - Calculatorは動的にスケジューリングされ、スレッドプール上で実行される - Calculatorの実装はC++ - 組み込みのCalculator - 前処理(画像フォーマットの変換、FPSの制御) - 推論(TFLite, Tensorflow) - 後処理(NMS, 画像へ結果のオーバーレイ) - and more https://github.com/google/mediapipe/tree/master/mediapipe/calculators パイプライン
  • 9. Mobility Technologies Co., Ltd. Python: CalculatorGraph API import mediapipe as mp # Define pipeline graph config_text = """ input_stream: 'in_stream' output_stream: 'out_stream' node { calculator: 'PassThroughCalculator' input_stream: 'in_stream' output_stream: 'out_stream' } """ # Create CalculatorGraph, set callback, and start execution graph = mp.CalculatorGraph(graph_config=config_text) output_packets = [] graph.observe_output_stream( 'out_stream', lambda _, packet: output_packets.append( mp.packet_getter.get_str(packet))) graph.start_run() # Feed string packet1 = mp.packet_creator.create_string( 'abc').at(0)) graph.add_packet_to_input_stream( 'in_stream', packet1) # Feed image rgb_img = cv2.cvtColor(cv2.imread( 'image.png'), cv2.COLOR_BGR2RGB) packet2 = mp.packet_creator.create_image_frame( image_format=mp.ImageFormat.SRGB, data=rgb_img).at(1)) graph.add_packet_to_input_stream( 'in_stream', packet2) # Destruct CalculatorGraph graph.close()
  • 10. Mobility Technologies Co., Ltd. 例: https://viz.mediapipe.dev/demo/face_detection Protobuf: https://github.com/google/mediapipe/blob/master/mediapipe/framework/calculator.proto グラフ定義
  • 11. Mobility Technologies Co., Ltd. 拡張 Calculatorの追加
  • 12. Mobility Technologies Co., Ltd. - 実装がC++ - Pythonを含むスクリプト言語は使えない - クロスプラットフォームを謳っているため? - mediapipe自体のビルドから行う必要がある - Github: https://github.com/google/mediapipe - Example - https://google.github.io/mediapipe/framework_concepts/calculators.html - 既存のCalculatorも豊富なので自分で実装することは稀 - 想定された使い方の場合 Calculator
  • 13. Mobility Technologies Co., Ltd. CalculatorBaseから次の4つのメソッドをoverride - GetContract(CalculatorContract* cc) - 入出力の型の制約 - Open(CalculatorContext*) - 初期化 - Process(CalculatorContext* cc) - 実際の処理を記述 - 入力: cc->Inputs().Index(n).Get<T>() - 出力: cc->Outputs().Index(n).Add(packet) - Close(CalculatorContext* cc) - 終了処理 Calculatorを実装する https://google.github.io/mediapipe/framework_concepts/calculators.html
  • 14. Mobility Technologies Co., Ltd. 中身どうなってる? 仕組み
  • 15. Mobility Technologies Co., Ltd. 構成 Framework / C++ Calculator / C++ Android Java/C++ TFLite Preprocess Postprocess OpenGL iOS Swift/ObjC Python JavaScript wasm C++ API Framework
  • 16. Mobility Technologies Co., Ltd. - Calculator Graph - 実行するグラフを保持する。入力を与えたり、出力を取得したりできる - Calculator - グラフのノード、実際の処理を行う - Packet - ノード間を流れるデータの実体+タイムスタンプ - Input / Output Stream - ノード間を繋ぐキュー - Stream上を流れるPacketのタイムスタンプは単調増加 - Scheduler Queue - Calculatorの実行を管理する。CalculatorGraphが少なくとも一つ持つ - デフォルトでスレッドプールで実行される - Input Stream Handler - Calculatorを実行する条件 (Input Policy) を保持する 概念(登場人物)
  • 17. Mobility Technologies Co., Ltd. Calculator Graph Calc. Node / Context Calc. Node / Context 概観図 Scheduler Queue Scheduler Queue Packet Calc. Node Calculator Output Stream Handler Input Stream Handler Calc. Context Inputs Outputs
  • 18. Mobility Technologies Co., Ltd. - mediapipeではタイムスタンプを明示的に扱う(Packet生成時に指定する) - タイムスタンプに起因する再現性の問題がなくなる (特に複数入力がある場合) - 実行のタイミングはInput Policyで制御 - Input policyはパイプライン定義で設定可能 - デフォルトのInput policy - 同じタイムスタンプの入力Packetは同時に処理される (実際の到着時刻には無関係) - 全てのPacketは処理される →実行時に複数入力の一部しか与えられない場合がある その他のInput policy - 全ての入力が揃った時のみ実行 - タイムスタンプと関係なく到着したらすぐに実行 Input Policy
  • 19. Mobility Technologies Co., Ltd. - Solutions - 既に用意されているパイプラインで簡単に使える - https://google.github.io/mediapipe/solutions/solutions.html - パイプラインのカスタマイズ - Calculatorを組み合わせることで様々な処理ができる - Calculatorの追加 - mediapipeに実装を追加しビルドする必要があって難易度は上がる まとめ