SlideShare a Scribd company logo
1 of 44
CNN でテニス選手の動きを
解析する
(有)シンビー
自己紹介
• 鈴木量三朗
月刊誌に連載中!!
ゴール:例1
backhand
Youtube から
ゴール:例2
service
return
Youtube から
ゴール:例3
Double hand
謝淑薇(シェイ・スーウェイ)
実は両手打ちのフォア Youtube から
NN ってなんでしょう?
そもそも NN って何?
…
…
…
0の確率
3の確率
8の確率
9の確率
……手書き
文字
Network
結果は
確率
パーセプトロン
1
𝑥1
𝑥2
𝑎 𝑦
h( )
𝑏
𝑤1
𝑤2
𝑎 = 𝑏 + 𝑤1𝑥1 + 𝑤2𝑥2
𝑦 = ℎ(𝑎)
典型的なh は
シグモイド関数
ℎ 𝑥 =
1
1 + exp −𝑥
重み
バイアス
入力データ
出力データ
シグモイド関数
ℎ 𝑥 =
1
1 + exp −𝑥
実際の計算
1
𝑥1
𝑥2
𝑎 𝑦
h( )
𝑏
𝑤1
𝑤2
1.0
0.1
0.5
0.1
0.2
0.45 0.610639234
浮動小数点
どこまで精度
が必要かは
不明
研究者の皆さんどうしているのか?
TensorFlow 等で
ネットワーク設計
データを用意して、
レンタルサーバで
計算
検証
できたネットワーク+パラメタ
Cのソース生成
コンパイルして自分の
PCやサーバで実行
TensorFlow
• Python でネットワーク設計
http://qiita.com/icoxfog417/items/fb5c24e35a849f8e2c5d
が参考になる
𝑦 = 𝑥2
+ 𝑏
import tensorflow as tf
def x2_plus_b(x, b):
_x = tf.constant(x)
_b = tf.constant(b)
result = tf.square(_x)
result = tf.add(result, _b)
return result
𝑥
𝑏
square add
Tinier YOLO
Xilinx の資料から
NN のデモ
• MNIST
– 手書き数字認識
• Cifar10
– 画像を10種類に分類するデモ
• YOLO
– 画像から物体認識(Object Detection)
• Dorefanet
– 画像の分類(Classfication)
CNN と YOLO
CNN って何?
CNN では畳み込み処理をする
0.1 0.2 0.3
0.4 0.5 0.6
0.7 0.8 0.9
重みパラメタ
畳み込み処理
畳み込み処理(画像処理)
BNN(*1) の MNIST
BNN の MNIST
情報がフラット
画像としての縦横を
放棄(?)
*1 あくまで Xilinx が提供している BNN の
MNIST の話。CNN の MNIST もある。
YOLO のCNN(1層目)
G
R
B
0.1 0.1 0.1
0.4 0.5 0.6
0.7 0.8 0.9
0.2 0.2 0.2
0.4 0.5 0.6
0.7 0.8 0.9
0.3 0.3 0.3
0.4 0.5 0.6
0.7 0.8 0.9
0.4 0.4 0.4
0.4 0.5 0.6
0.7 0.8 0.9
重み
バイアス
パーセプトロン(再掲)
1
𝑥1
𝑥2
𝑎 𝑦
h( )
𝑏
𝑤1
𝑤2
𝑎 = 𝑏 + 𝑤1𝑥1 + 𝑤2𝑥2
𝑦 = ℎ(𝑎)
典型的なh は
シグモイド関数
ℎ 𝑥 =
1
1 + exp −𝑥
重み
バイアス
入力データ
出力データ
YOLO の一部
任意の画像(例:768x576)
416x416 に正規化された画像
1) 入力画像の各画素を浮動小
数点数に正規化
2) numpy 用に重みとバイアスを変形
重み バイアス
3) numpy の matmul を使って計算
0.123456789
0.012345678
0.345689088
0.457898989
0101010110
1110010000
1110001010
0010110101
4) 3bit の情報に変換
Tinier YOLO
10層 = Deep じゃない CNN
YOLO v3
Ayoosh Kathuria さんの towardsdatascience.com 記事から
結果
Tinier YOLO
• Predicted in 0.73 sec.
• car: 95%
• dog: 74%
• bicycle: 56%
YOLO v3
• data/dog.jpg: Predicted in 22.6 sec.
• bicycle: 99%
• truck: 92%
• dog: 100%
何をしたか?
> git clone https://github.com/pjreddie/darknet
> cd darknet
> make
> wget https://pjreddie.com/media/files/yolov3.weights
> ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
Darknet
• NN 用のフレームワーク
– YOLO はその一部
• 簡単にオレオレ NN 作成可能
– 分かった気になれる(危険!)
• 数式をたどろう!
• 論文読もう
• ソースを読もう
• 意味を考えよう
データが問題。
学習はどうする?
誰かの作った
ありもので
いけたりする
MNIST再考
手書き認識(SHARP製)
1996?
2008?手書き認識自体は目新しい技術ではない
MNIST with FPGA
4 と 9 を間違えてい
る
LeNet-5
どっかのパーセプトロンで
4と9の区別がついてない
ホットポイント(?) があるはず
LeNet-5
複製して再学習
再学習
9
4
4と9が分離可能?
(アイデアだけ)
YOLO の重みパラメタ
分布を見てみた
0
対数的に見てみた
もうすこし統計学的な表現はないのでしょうか?
アドバイスください。
データ表現に浮動小数点数は必須?
Wikipedia より
Google は bloat16
Wikipedia より
Google I/O ‘18の資料より
Wikipedia より
精度はいらない?
Exponent が重要?
分布もそれを示唆?
とりたいアプローチ
• 統計学(的)
• 人間の感覚を信用しない
• 既存のフレームワークをうまく使う
– 使うだけにはしたくない
テニスの動画に応用
まずはプレイヤー特定
Youtube から
誤認識しないように
Youtube から
サーブ/リターンは難しい?
service
return
Youtube から
ボールも難しい?
backhand
Youtube から
目標
• 静止画からプレイヤーを特定する
• 動画からプレイヤーを特定する
• 動画からボールを特定する
• 動画からプレイ内容/ポイント状況を特定する
• 動画から優劣を特定(将棋に迫れるか?)

More Related Content

More from ryos36

Polyphony の並列化
Polyphony の並列化Polyphony の並列化
Polyphony の並列化ryos36
 
Polyphony 新機能ツアー
Polyphony 新機能ツアーPolyphony 新機能ツアー
Polyphony 新機能ツアーryos36
 
Polyphony: Python ではじめる FPGA
Polyphony: Python ではじめる FPGAPolyphony: Python ではじめる FPGA
Polyphony: Python ではじめる FPGAryos36
 
Stellaris を使った組み込みアプリ開発ガイド
Stellaris を使った組み込みアプリ開発ガイドStellaris を使った組み込みアプリ開発ガイド
Stellaris を使った組み込みアプリ開発ガイドryos36
 
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門ryos36
 
数値計算のための Python + FPGA
数値計算のための Python + FPGA数値計算のための Python + FPGA
数値計算のための Python + FPGAryos36
 
Polyphony IO まとめ
Polyphony IO まとめPolyphony IO まとめ
Polyphony IO まとめryos36
 
PYNQ 祭り: Pmod のプログラミング
PYNQ 祭り: Pmod のプログラミングPYNQ 祭り: Pmod のプログラミング
PYNQ 祭り: Pmod のプログラミングryos36
 
SDSoC でストリーム
SDSoC でストリームSDSoC でストリーム
SDSoC でストリームryos36
 
Analog Devices の IP コアを使う
Analog Devices の IP コアを使うAnalog Devices の IP コアを使う
Analog Devices の IP コアを使うryos36
 
SDSoC と Vivado
SDSoC と VivadoSDSoC と Vivado
SDSoC と Vivadoryos36
 
高速化のポイント
高速化のポイント高速化のポイント
高速化のポイントryos36
 
20周遅れ
20周遅れ20周遅れ
20周遅れryos36
 
90分 Scheme to C(勝手に抄訳版)
90分 Scheme to C(勝手に抄訳版)90分 Scheme to C(勝手に抄訳版)
90分 Scheme to C(勝手に抄訳版)ryos36
 
並列計算への道 2015年版
並列計算への道 2015年版並列計算への道 2015年版
並列計算への道 2015年版ryos36
 
NiosII と RTOS について
NiosII と RTOS についてNiosII と RTOS について
NiosII と RTOS についてryos36
 
Synthesijer で作るFORTH仮想マシン
Synthesijer で作るFORTH仮想マシンSynthesijer で作るFORTH仮想マシン
Synthesijer で作るFORTH仮想マシンryos36
 

More from ryos36 (17)

Polyphony の並列化
Polyphony の並列化Polyphony の並列化
Polyphony の並列化
 
Polyphony 新機能ツアー
Polyphony 新機能ツアーPolyphony 新機能ツアー
Polyphony 新機能ツアー
 
Polyphony: Python ではじめる FPGA
Polyphony: Python ではじめる FPGAPolyphony: Python ではじめる FPGA
Polyphony: Python ではじめる FPGA
 
Stellaris を使った組み込みアプリ開発ガイド
Stellaris を使った組み込みアプリ開発ガイドStellaris を使った組み込みアプリ開発ガイド
Stellaris を使った組み込みアプリ開発ガイド
 
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門
 
数値計算のための Python + FPGA
数値計算のための Python + FPGA数値計算のための Python + FPGA
数値計算のための Python + FPGA
 
Polyphony IO まとめ
Polyphony IO まとめPolyphony IO まとめ
Polyphony IO まとめ
 
PYNQ 祭り: Pmod のプログラミング
PYNQ 祭り: Pmod のプログラミングPYNQ 祭り: Pmod のプログラミング
PYNQ 祭り: Pmod のプログラミング
 
SDSoC でストリーム
SDSoC でストリームSDSoC でストリーム
SDSoC でストリーム
 
Analog Devices の IP コアを使う
Analog Devices の IP コアを使うAnalog Devices の IP コアを使う
Analog Devices の IP コアを使う
 
SDSoC と Vivado
SDSoC と VivadoSDSoC と Vivado
SDSoC と Vivado
 
高速化のポイント
高速化のポイント高速化のポイント
高速化のポイント
 
20周遅れ
20周遅れ20周遅れ
20周遅れ
 
90分 Scheme to C(勝手に抄訳版)
90分 Scheme to C(勝手に抄訳版)90分 Scheme to C(勝手に抄訳版)
90分 Scheme to C(勝手に抄訳版)
 
並列計算への道 2015年版
並列計算への道 2015年版並列計算への道 2015年版
並列計算への道 2015年版
 
NiosII と RTOS について
NiosII と RTOS についてNiosII と RTOS について
NiosII と RTOS について
 
Synthesijer で作るFORTH仮想マシン
Synthesijer で作るFORTH仮想マシンSynthesijer で作るFORTH仮想マシン
Synthesijer で作るFORTH仮想マシン
 

CNN でテニス選手の動きを解析する