SlideShare a Scribd company logo
1 of 22
Swiftで姿勢推定
インフォコム株式会社
技術企画室
@mb_otsu
自己紹介
• 大津 学 @mb_otsu
• R&Dに所属
• 最近はAR/VR/IoT/AIの調査や開発
• Swiftは去年(2017年)始めました
RICOH THETA x IoT
デベロッパーズコンテスト最優秀受賞
過去の作例
Interop Tokyo2017展示 バーチャルテレポート
AI使ってますか?
CoreML
• AppleがWWDC17で発表したAIのフレームワーク
• それから1年後のQiita
2018/06/14
単眼カメラで姿勢推定
• OpenPose
単眼カメラで大勢をリアルタイムに姿勢推定する
2017年のエポックメイキングな技術
論文ではnVidia GTX-1080で
19人を8.8fpsで処理
引用: http://github.com/CMU-Perceptual-Computing-Lab/openpose
何がすごいのか?
• 単眼カメラで実現
• Kinect等の測域センサ
• ウェアラブルなセンサ
• 画像から姿勢推定
• 2014年 HeatmapとDeep Learningを用いた姿勢推定が登場
引用: https://arxiv.org/abs/1406.2984
最近になりディープラーニングの登場や、ハードウェアの発展により
画像から大勢をリアルタイムに姿勢推定が可能になった
論文によると、
GPUを搭載したコモディティレベルのPCで
リアルタイムに近い速度(100ms)
SwiftOpenPose
• 設計図共有サイトで公開
• https://github.com/infocom-tpo/SwiftOpenPose
実際に姿勢推定を
iPhoneでやってみた
姿勢を推定するには?
AI
AIの入力に人物の画像を渡すと
PCM (Part Confidence Maps)とPAF (Part Affinity Fields)を出力
入力 出力
引用: https://arxiv.org/abs/1611.08050
Swiftでヒートマップ
PCM (Part Confidence Maps)を
ヒートマップで表示
ヒートマップ
モデルをDL&インポート
• ダウンロードURL
• https://s3-ap-northeast-
1.amazonaws.com/swiftopenpose/MobileOpenPose.mlmodel
ここではtf-pose-estimationのモデルをCoreML用に再学習したモデルを利用
(8MB)
オリジナルではなく、
軽量なモデル
オリジナルのOpenPoseは
処理に時間がかかる
手元のMacで30秒、iPhoneで4秒
プロジェクトにImportすると
ヘッダーファイルが作成され、
関数としてコールできます
別途ライブラリを利用
• CoreMLHelpers
• CoreMLを使うときに便利なライブラリ
• https://github.com/hollance/CoreMLHelpers
• UIImage -> CVPixelBuffer
• 画像をメモリにバッファ
• MLMultiArray -> UIImage
• 浮動小数点から画像の生成
PCMをヒートマップで表示
public func openPoseHeatMapTest(){
let model = MobileOpenPose()
let uiImage = UIImage(named: "runner.png")!
let loop = Array(0..<19)
if let pixelBuffer = uiImage.pixelBuffer(width: 368,height: 368) {
if let prediction = try? model.prediction(image: pixelBuffer) {
heatMapView(prediction.net_output,loop: loop)
}
}
}
画像を読み込み、CVPixelBufferに変換
入力の画像からCoreMLで推論
CoreMLの推論結果(行列)を表示に渡す
CoreMLの処理への組み込みは数行
先程のモデル
func heatMapView(_ p : MLMultiArray, loop: Array<Int>){
// MultiArray (Double 57 x 46 x 46)
let shape = [p.shape[1],p.shape[2]]
let width = p.shape[1].intValue , height = p.shape[2].intValue
let m = try! MLMultiArray(shape: shape, dataType: .double)
for j in loop {
let n = j * m.count
for i in 0..<m.count {
m[i] = p[i+n]
}
let img = UIImageView(image: m.image(offset: 0, scale: 255))
img.frame = CGRect(
origin: CGPoint(x: width*zoom*(j%turn), y:
height*zoom*Int(j/turn)),
size: CGSize(width: width * zoom, height: height * zoom)
)
self.view.addSubview(img)
}
}
結果の行列: 57の内PCMが19、PAFが36
46x46のブロックで初期化
46x46の行列(中身は浮動小数点)を
0~255の範囲に変換し、ヒートマップを生成
PCMをヒートマップで表示
AI入力 出力
PCM: 19x46x46
PAF: 36x46x46
368x368
SwiftでAIが動くことが視覚的に確認できました
Nose Neck Rshoulder RElbow
RWrist LShoulder LElbow LWrist
RHip
RKnee RAnkle
LHip
LKnee LAnkle
REye LEye
REar LEar
46x46
姿勢の推定
• PCMとPAFをBipartite Matchingで繋ぎ合わせ姿勢を推定
引用: https://arxiv.org/abs/1611.08050
ここの処理は長いので割愛
まとめ
• 画像から姿勢の推定がAIで出来る
• 技術の進歩(ハードウェアや深層学習)により出来る事が増えた
• CoreMLで姿勢推定が出来る
• PCMからヒートマップを作成
Stickman Animator (AppStoreで公開中)
https://itunes.apple.com/jp/app/stickman-animator/id1337589939?mt=8
他にもこんなコードを公開しています
• PoseNet-CoreML
• https://github.com/infocom-tpo/PoseNet-CoreML
• PoseNet-Unity
• https://github.com/infocom-tpo/PoseNet-Unity
ご清聴ありがとうございました
https://lab.infocom.co.jp/
lab@infocom.co.jp
03-6866-3370
References
• Joint Training of a Convolutional Network and a Graphical Model
for Human Pose Estimation
• https://arxiv.org/abs/1406.2984
• OpenPose
• http://github.com/CMU-Perceptual-Computing-Lab/openpose
• Realtime Multi-Person 2D Pose Estimation using Part Affinity
Fields
• https://arxiv.org/abs/1611.08050
• tf-pose-estimation
• https://github.com/ildoonet/tf-pose-estimation
• CoreMLHelpers
• https://github.com/hollance/CoreMLHelpers
公開先リンク
• Tec Blog
• https://lab.infocom.co.jp/
• SwiftOpenPose
• https://github.com/infocom-tpo/SwiftOpenPose
• Stickman Animator
• https://itunes.apple.com/jp/app/stickman-animator/id1337589939?mt=8
• PoseNet-CoreML
• https://github.com/infocom-tpo/PoseNet-CoreML
• PoseNet-Unity
• https://github.com/infocom-tpo/PoseNet-Unity

More Related Content

What's hot

What's hot (19)

Smart lock
Smart lockSmart lock
Smart lock
 
データで散らかった製造業界における最高の翻訳機 Node-RED
データで散らかった製造業界における最高の翻訳機 Node-REDデータで散らかった製造業界における最高の翻訳機 Node-RED
データで散らかった製造業界における最高の翻訳機 Node-RED
 
SIGGRAPH 2019レポート
SIGGRAPH 2019レポートSIGGRAPH 2019レポート
SIGGRAPH 2019レポート
 
AITCオープンラボ 2018年5月度(3)
AITCオープンラボ 2018年5月度(3)AITCオープンラボ 2018年5月度(3)
AITCオープンラボ 2018年5月度(3)
 
AndroidのAR最新動向
AndroidのAR最新動向AndroidのAR最新動向
AndroidのAR最新動向
 
TreasureData Solution Architectの挑戦
TreasureData Solution Architectの挑戦TreasureData Solution Architectの挑戦
TreasureData Solution Architectの挑戦
 
Rosecar
RosecarRosecar
Rosecar
 
ロボットサービス開発の現場から
ロボットサービス開発の現場からロボットサービス開発の現場から
ロボットサービス開発の現場から
 
WeDX Flow Hands-on
WeDX Flow Hands-onWeDX Flow Hands-on
WeDX Flow Hands-on
 
Io t,ai時代のソフトウェア
Io t,ai時代のソフトウェアIo t,ai時代のソフトウェア
Io t,ai時代のソフトウェア
 
Spring I/O 2018 報告 RESTDocs RAML, Cloud Contract
Spring I/O 2018 報告 RESTDocs RAML, Cloud ContractSpring I/O 2018 報告 RESTDocs RAML, Cloud Contract
Spring I/O 2018 報告 RESTDocs RAML, Cloud Contract
 
Azure Video Analyzer IoT活用セミナー - 概要
Azure Video Analyzer IoT活用セミナー - 概要Azure Video Analyzer IoT活用セミナー - 概要
Azure Video Analyzer IoT活用セミナー - 概要
 
Azure による AI on Edge 解説
Azure による AI on Edge 解説Azure による AI on Edge 解説
Azure による AI on Edge 解説
 
Node-REDなら、DIYで産業用センサ・コントローラを繋いで見える化
Node-REDなら、DIYで産業用センサ・コントローラを繋いで見える化Node-REDなら、DIYで産業用センサ・コントローラを繋いで見える化
Node-REDなら、DIYで産業用センサ・コントローラを繋いで見える化
 
Enocean無線センサー用ノード開発事例
Enocean無線センサー用ノード開発事例Enocean無線センサー用ノード開発事例
Enocean無線センサー用ノード開発事例
 
Android Things play in Xamarin World.
Android Things play in Xamarin World.Android Things play in Xamarin World.
Android Things play in Xamarin World.
 
Wg for ai_dev_ops_20180713
Wg for ai_dev_ops_20180713Wg for ai_dev_ops_20180713
Wg for ai_dev_ops_20180713
 
第3回 The Things Network(TTN)勉強会向け、Microsoft Azure IoT紹介
第3回 The Things Network(TTN)勉強会向け、Microsoft Azure IoT紹介第3回 The Things Network(TTN)勉強会向け、Microsoft Azure IoT紹介
第3回 The Things Network(TTN)勉強会向け、Microsoft Azure IoT紹介
 
GitLab で実現する Ansible コードの管理
GitLab で実現する Ansible コードの管理GitLab で実現する Ansible コードの管理
GitLab で実現する Ansible コードの管理
 

Similar to Swift for pose-estimation

Nervesが開拓する「ElixirでIoT」の新世界
Nervesが開拓する「ElixirでIoT」の新世界Nervesが開拓する「ElixirでIoT」の新世界
Nervesが開拓する「ElixirでIoT」の新世界
Hideki Takase
 
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
CData Software Japan
 

Similar to Swift for pose-estimation (20)

AITCオープンラボ IoTx総まとめ これまでのふりかえり
AITCオープンラボ IoTx総まとめ これまでのふりかえりAITCオープンラボ IoTx総まとめ これまでのふりかえり
AITCオープンラボ IoTx総まとめ これまでのふりかえり
 
IoT案件を70件やってみて分かった事
IoT案件を70件やってみて分かった事IoT案件を70件やってみて分かった事
IoT案件を70件やってみて分かった事
 
クラウドを用いるIoT開発における実費レポート
クラウドを用いるIoT開発における実費レポートクラウドを用いるIoT開発における実費レポート
クラウドを用いるIoT開発における実費レポート
 
Nervesが開拓する「ElixirでIoT」の新世界
Nervesが開拓する「ElixirでIoT」の新世界Nervesが開拓する「ElixirでIoT」の新世界
Nervesが開拓する「ElixirでIoT」の新世界
 
続・Kinect v2を通してMicrosoft技術を考える
続・Kinect v2を通してMicrosoft技術を考える続・Kinect v2を通してMicrosoft技術を考える
続・Kinect v2を通してMicrosoft技術を考える
 
GitHub Actionsを使ってAPI外部公開時の作業を自動化した話
GitHub Actionsを使ってAPI外部公開時の作業を自動化した話GitHub Actionsを使ってAPI外部公開時の作業を自動化した話
GitHub Actionsを使ってAPI外部公開時の作業を自動化した話
 
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
 
IoTの技術的課題と実現のポイント~実装例・エンジニアリングのヒント
IoTの技術的課題と実現のポイント~実装例・エンジニアリングのヒントIoTの技術的課題と実現のポイント~実装例・エンジニアリングのヒント
IoTの技術的課題と実現のポイント~実装例・エンジニアリングのヒント
 
IoTの技術的課題と実現のポイント~実装例・エンジニアリングのヒント
IoTの技術的課題と実現のポイント~実装例・エンジニアリングのヒント IoTの技術的課題と実現のポイント~実装例・エンジニアリングのヒント
IoTの技術的課題と実現のポイント~実装例・エンジニアリングのヒント
 
ソニーのディープラーニングツールで簡単エッジコンピューティング
ソニーのディープラーニングツールで簡単エッジコンピューティングソニーのディープラーニングツールで簡単エッジコンピューティング
ソニーのディープラーニングツールで簡単エッジコンピューティング
 
IoT Technologies
IoT TechnologiesIoT Technologies
IoT Technologies
 
3D depth sensor world
3D depth sensor world3D depth sensor world
3D depth sensor world
 
情報産業の最新動向2017
情報産業の最新動向2017情報産業の最新動向2017
情報産業の最新動向2017
 
05.日本マイクロソフト(株)_発表資料
05.日本マイクロソフト(株)_発表資料05.日本マイクロソフト(株)_発表資料
05.日本マイクロソフト(株)_発表資料
 
Io t最初の一歩
Io t最初の一歩Io t最初の一歩
Io t最初の一歩
 
物流・社会インフラWG 活動内容のご紹介 Live Video Analytics は「カメラ+AI」ソリューション開発をどう変える?
物流・社会インフラWG 活動内容のご紹介 Live Video Analytics は「カメラ+AI」ソリューション開発をどう変える?物流・社会インフラWG 活動内容のご紹介 Live Video Analytics は「カメラ+AI」ソリューション開発をどう変える?
物流・社会インフラWG 活動内容のご紹介 Live Video Analytics は「カメラ+AI」ソリューション開発をどう変える?
 
UXデザインを活用した仮説立案から考えるデータ分析とは?
UXデザインを活用した仮説立案から考えるデータ分析とは?UXデザインを活用した仮説立案から考えるデータ分析とは?
UXデザインを活用した仮説立案から考えるデータ分析とは?
 
IT勉強会支援プラットフォームconnpassからみた IoT
IT勉強会支援プラットフォームconnpassからみた IoTIT勉強会支援プラットフォームconnpassからみた IoT
IT勉強会支援プラットフォームconnpassからみた IoT
 
IoTデータ活用のフィードバックループ
IoTデータ活用のフィードバックループIoTデータ活用のフィードバックループ
IoTデータ活用のフィードバックループ
 
使い倒そう Visual Studio Code!!! ~ここからはじめる基本のキ~
使い倒そうVisual Studio Code!!! ~ここからはじめる基本のキ~使い倒そうVisual Studio Code!!! ~ここからはじめる基本のキ~
使い倒そう Visual Studio Code!!! ~ここからはじめる基本のキ~
 

Swift for pose-estimation