62
動動動動動 SW 動動動 HW 動動動動動動 2016/8/24 株株株株株株株株株株 株株株株株株株株株株株 1 Imagination, Action, and to the Creation!

なにわTech20160827

Embed Size (px)

Citation preview

Page 1: なにわTech20160827

動き検出の SW実装とHW実装について

2016/8/24

株式会社パソナテックエンジニアリング事業部

夏谷

1

Imagination,  Action,

  and to the Creation!

Page 2: なにわTech20160827

前回までのあらすじ

2

FPGAX高位合成友の会

GDG神戸 FPGAX

俺俺処理系MYHDL

FPGAと HPC動き検出と最小二乗法俺俺処理系MYHDL

動き検出と最小二乗法

Page 3: なにわTech20160827

アジェンダ

自己紹介 FPGAを使った HPCの話

OCT/DCIについて(脱線) 動き検出の SW、 HW実装の話 動き検出と neural network 高位合成ツールネタ 会社の紹介

3

Page 4: なにわTech20160827

自己紹介

夏谷実 株式会社パソナテック

株式会社パソナテック エンジニアリング事業部 エンジニアマネージメントグループ

最近は半導体関連の仕事が多い FPGAが好き プログラミングも好き Deep Learningも好き ←New!

4

パソナテック公認キャラ

Page 5: なにわTech20160827

自己紹介

5

Page 6: なにわTech20160827

自己紹介

今日はアルゴリズムの HW化の話をします。 去年の GDG神戸のイベントの発表内容を加筆修正しています。

FPGAに関しては現役から遠ざかってますので、必ず最新のデータシート、ユーザーズガイドを確認してください。

少しだけ Deep Learningの話もします

6

Page 7: なにわTech20160827

7

FPGAを使った HPCの話

Page 8: なにわTech20160827

HPCに FPGAを使う話

8

メリット デメリット

速い

・システムが高価・消費電力

・物理的な大きさ・開発に時間がかかる・デバッグがやりにくい・データの移動が面倒・開発環境が有料

・正しく使わないと壊れる・壊れたときのリカバリが

高価

Page 9: なにわTech20160827

HPCに FPGAを使う話

9

省略

Page 10: なにわTech20160827

OCT/DCIについて(脱線)

10

省略

Page 11: なにわTech20160827

FPGAと HPC

HW化の意味がなくなる 専用のハードウェアはどこまでの処理速度向上を目指すのか?

対パソコンであれば 1000倍は 1つの目標 10倍程度はアルゴリズムですぐ追いつかれる 10倍程度は何もしなくても速くなる

CPU メモリ コンパイラ ライブラリ

11

Page 12: なにわTech20160827

顔認識の処理速度向上の例

12

Haar-like

Join Haar-like

必要なデータ量が1/9(2008)

Integral Image

画像サイズに依存せず 4回のアクセスで必要な計算が完了する。(2001)Granular Space

4回が 1回のアクセスに(2006)

スパース最適化

Lasso (1996)

Elastic NetAdaptive LassoDantizig SelectorLAD-Lasso(2005-2007)

2005年~ 2008年の 3年間で、 10倍以上高速化注目される分野ではこういうことが起こりえる。

10倍程度の高速化を目標として HW化を進めるのはリスクがある。

ET WEST 2015 TS-02実世界で活躍する画像認識技術 より

Page 13: なにわTech20160827

FPGAと HPC

13

動き検出の SW、 HW実装の話

Page 14: なにわTech20160827

動き検出の話

14

・動き検出に関する業務をソフトウェア、ハードウェアの両方で経験あり。・動き検出自体が HWする価値のあるアルゴリズム・登場する数式が機械学習にでてくる数式と共通点がある

Page 15: なにわTech20160827

動き検出とは

15

動き検出とは

時刻t

画像のブロックが、時間と共にどちらへどれくらい動いたのかを検出する処理。検出結果は動きベクトルと呼ばれる。

Page 16: なにわTech20160827

16

動き検出とは

画像の一部分を抜き出し、次の画像と最も一致する場所を探す。ある物体が 1フレームの間に 2 ピクセル右に行ったとしたら、右に 2 ピクセルずらしたところと画像が一致するはず。

評価関数として SAD、 SSDが使われる。どちらも 0なら画像は完全に一致している。SAD(Sum of Absolute Difference):各画素の差分の絶対値の和。SSD(Sum of Squared Difference):各画素の差分の二乗和

動き検出という点ではあまり精度に差がないこと、計算量が少ないことより SADが使われることが多い。統計学的には SSDの方が最小二乗和を求めているのでSSDが好まれるときもある。                

E (𝑤 )=12∑‖𝑑𝑛− 𝑦 (𝑥)‖2Deep learning の誤差関数と同じ

Page 17: なにわTech20160827

動き検出の難しいところ

17

① 原理的に検出できない図形がある

② そもそも動いている画像ではない

SADが最小となる場所が複数存在する

SADが最小となる場所がそもそも存在しない。

ピントがぼけることで、同じような状況に陥る事がある。

Page 18: なにわTech20160827

とある動き検出エンジニアの日常

18

デバッグ中にトイレに行く

トイレの壁がタイル

orz 動き検出が失敗する模様で絶望する

動き検出エンジニアの職業病

Page 19: なにわTech20160827

動き検出の実装方法

19

勾配法・共役勾配法・勾配降下法・確率的勾配降下法・ニュートン法傾きを元に反復計算を行い、 SSDが最小となる場所を探す。

全探索法?一画素ずつずらして全領域でのSADを計算する。

Page 20: なにわTech20160827

動き検出の実装方法

20

ソフトウェア実装

ハードウェア実装

② 荒い検索

① 勾配法 ③ 全探索法(ピクセル単位)

④サブピクセル計算

Layer1

Layer2

Layer3

Page 21: なにわTech20160827

勾配法

21

ある初期値を与え、その場所の傾きから次の場所を選ぶ事を繰り返すことで、 SSDの最小値を求める。ポテンシャルが一番低い所へ移動していくので、反復計算を降下( descent)と表現する。

Ex:確率的勾配降下法 (stochastic gradient descent)

勾配法には明確な欠点がある

欠点 1 :局所解に陥る欠点 2 :何回反復すればよいのか分からない欠点 3: 解が発散する

動き検出の場合は 2 次元

Page 22: なにわTech20160827

勾配法

22

欠点1:初期値を間違えると、局所解を求めてしまう。1回の試行では局所解に陥ったかどうかが判定できない。

初期値が大事。初期値が良ければ 2~ 3回で収束するケースが多い。

良い初期値を得るために、「荒い検索」を利用する。(後で)

ここを最小値と判定 本当はこっちが最小値

初期値を変えると上手く行く

局所解に陥っているかどうかが判断できない

Page 23: なにわTech20160827

勾配法

23

欠点 2 :反復回数の計算が読めない。

運が良いと 3回、運がわるいと数十回の反復が必要。

入力データと初期値に依存し、汎用的な終了の判定方法が無い。

回数を増やしたり、初期値を変えると上手く行くときがある。

動き検出の特性として、そもそも最適な解が存在しない可能性がある

Page 24: なにわTech20160827

勾配法

24

欠点 3 :解が発散する。

検索範囲の端に向かって全力で移動してしまう。

→検出は簡単にできるので、局所解よりは扱いがらく

初期値を変えると上手く行くときがある。

動き検出の特性として、そもそも最適な解が存在しない可能性がある

Page 25: なにわTech20160827

動き検出の実装方法

25

ソフトウェア実装

ハードウェア実装

② 荒い検索

① 勾配法 ③ 全探索法(ピクセル単位)

④サブピクセル計算

Layer1

Layer2

Layer3

初期値が全て!

Page 26: なにわTech20160827

荒い検索

26

縮小画像での動き検出 Coarse-to-fine search、画像ピラミッド

前回の動き検出の結果を使う 周辺の信頼できる動きベクトルを使う

動き検出できる

動き検出できない動き検出できる

荒い検索を使っておおまかな動きベクトルを先に計算しておく・ SW実装(勾配法)の場合は、その値が初期値の候補になる・ HW実装(全探索)の場合はそのまま検索範囲の原点とする実装が多い → HW実装の場合、特定の領域を取り出すのが面倒

Page 27: なにわTech20160827

動き検出の実装方法

27

ソフトウェア実装

ハードウェア実装

② 荒い検索

① 勾配法 ③ 全探索法(ピクセル単位)

④サブピクセル計算

Layer1

Layer2

Layer3

Page 28: なにわTech20160827

全探索法

28

検索範囲

動きを求めたい画像

検索範囲の全ての領域に対して SADを計算し、最小の座標を求める。

検索の原点は (0,0)、もしくは荒い検索の結果

Page 29: なにわTech20160827

全探索法

29

欠点 1 :局所解に陥る     →全探索なので、全体で一番小さいところを検出できる欠点 2 :何回反復すればよいのか分からない     →反復しないので計算量は一定欠点 3: 解が発散する      →全探索なので、全体で一番小さいところを検出できる

勾配法の欠点を全てクリアー

Page 30: なにわTech20160827

全探索法

30

① 各画素について差の絶対値を計算する。

Sub+abs

② 縦方向に加算 ③ 横方向に加算して SADを求める

SAD

検索窓(左上)

対象ブロック

Page 31: なにわTech20160827

全探索法

31

① 各画素について差の絶対値を計算する。

Sub+abs

② 縦方向に加算 ③ 横方向に加算して SADを求める

SAD

検索窓(左上から一つ右)

Page 32: なにわTech20160827

全探索法

32

sub abs

add

add

Input_a (0,0)

Input_b (0,0)

Input_a (4,0)

Input_b (4,0) sub abs

Input_a (4,4)

Input_b (4,4) sub abs

add

add

add

add

SAD

ここで区切ってパイプライン化

Page 33: なにわTech20160827

全探索法

33

abss1

s2

sw

sumabs sum

・・・s3

abs sum

SADSAD

SAD

abs 画素の差分と絶対値の計算

sum 縦方向の和を求める加算

SAD SADを求める加算

abs sum SAD

検索幅+ 2clkで横方向の SADが全て計算できる。

パイプラインを作ろう

だけ見ると 1clkで一つ SADの計算が終わる

SAD

Page 34: なにわTech20160827

全探索法

34

このデータであれば、左端から 2画素いった所で SADが 0になる。

有効な SADが計算されてから、 2CLK 後に SADが出力される。

対象ブロックが 3x3なので、差分と絶対値を取る回路は 9 個並ぶ

Page 35: なにわTech20160827

全探索法

35

さきほどの計算自体を N 並列に実行可能

検索範囲 検索範囲

1行ずらしで並列化が正解

検索範囲を N 等分するのは駄目

Page 36: なにわTech20160827

動き検出の実装方法

36

ソフトウェア実装

ハードウェア実装

② 荒い検索

① 勾配法 ③ 全探索法(ピクセル単位)

④サブピクセル検索

Layer1

Layer2

Layer3

Page 37: なにわTech20160827

サブピクセル検索

37

http://www.sic.shibaura-it.ac.jp/~yaoki/hikarizou/hikarizou2.pdf

Page 38: なにわTech20160827

動き検出の実装方法(まとめ)

38

勾配法・共役勾配法・勾配降下法・確率的勾配降下法・ニュートン法傾きを元に反復計算を行い、 SSDが最小となる場所を探す。

全探索法一画素ずつずらして全領域でのSADを計算する。

速い!

HW化で速度を出すには、アルゴリズムの実装方法から変えないと速くならない。並列化しやすく、固定小数点数(整数)で処理ができるアルゴリズムが良い。

Page 39: なにわTech20160827

動き検出と neural network

39

動き検出と neural network

Page 40: なにわTech20160827

動き検出と neural network

40

京都で立ち上げた AI専門のベンチャー

若いエンジニア(研究者)とお話したらすごく良く分かった

Page 41: なにわTech20160827

最初の疑問

41

入力層

教科書の最初画像を 1 次元のベクトルにして入力層へ

入力層

3x3

僕の疑問画像は上下左右に相関を持ってるから、ある大きさのブロックで入力層に入れたほうがよいはず

Page 42: なにわTech20160827

最初の疑問

42

それって CNN ( Convolutional Neural Network)の入り口

input

convolution

pooling

convolution

LCN

pooling

convolution

Fully-connected

Fully-connected

softmax

output

深層学習 図6.3

Page 43: なにわTech20160827

最初の疑問

43

CNNの説明で出てくるこの動きは!?

Page 44: なにわTech20160827

最初の疑問

各社様が CNNを FPGA実装 Altera Xilinx Microsoft Nallatech デンソー

44

Page 45: なにわTech20160827

次の疑問

45

ImageNet Classification with Deep Convolutional Neural Networks https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf

Figure4

Figure3

なぜこんなにばらけるのか?

Page 46: なにわTech20160827

次の疑問

46

眼鏡っ娘画像何も考えずに学習させたら、同じ所ばっかりに注目するはず。なぜばらけるのか?

全ニューロンが眼鏡に注目

Page 47: なにわTech20160827

次の疑問

47

深層学習  p63

それってスパース正則化ってトリックを使ってます

入力 xから中間層の出力 yを経て出力 x(^)が計算される過程において、 yの各ユニットのうち、なるべく少数のユニットのみが 0でない出力を取り、残りは出力が 0( =活性化しない)となるような制約を追加します。

→ 行列の中の 0の項を増やして疎行列に近づける。一つ一つのニューロンが特徴を捉えるようになる。

専門家に疑問をぶつけるの大事

Page 48: なにわTech20160827

次の疑問

48

自分でまとめてみるのも大事><

図 5.11

Page 49: なにわTech20160827

動き検出と neural network

49

閑話休題

Page 50: なにわTech20160827

動き検出と neural network

50

動き検出 NN

求めるパラメータ 動きベクトル v ニューロンの重み w

パラメータの数 2 つ ニューロンの数入力画像 2 枚 数百~数万パラメータの取る範囲

検索範囲 不明必要な精度 次の処理に依存

例えば 1/32 画素程度

不明

オーバーフィッティング

無し 有りの部分は、実際に動かせば絞り込める

Page 51: なにわTech20160827

動き検出と neural network

例えば、ある NNの極一部だけを、少数の入力データ(画像データ)で更新したい場合。

51

input

convolution

pooling

convolution

LCN

pooling

convolution

Fully-connected

Fully-connected

softmax

output

ここだけを、変えたい

Page 52: なにわTech20160827

動き検出と neural network

52

http://cs231n.stanford.edu/slides/winter1516_lecture11.pdf

それって転移学習では

Page 53: なにわTech20160827

動き検出と neural network

53

http://cs231n.stanford.edu/slides/winter1516_lecture11.pdf

・入力画像に近いところは汎用的・出力に近いところは、認識に特化 Deep Learning for NLP (without Magic)

Richard Socher, Yoshua Bengio and Chris Manning ACL 2012

Page 54: なにわTech20160827

動き検出と neural network

54

秒単位で学習結果を変えないといけないシステム

時間で形が変化するものを、変化に合わせて学習しなおすことで、トラッキングするシステム

Page 55: なにわTech20160827

動き検出と neural network 秒単位で学習結果を大胆に変えないといけないシステム

55

By いらすとやリアルタイムな鳥の固体認識とか

Page 56: なにわTech20160827

MyHDLの紹介

56

高位合成ツールネタ

Page 57: なにわTech20160827

MyHDLの紹介

57

省略

Page 58: なにわTech20160827

高位合成ツールへの期待

58

Ruby on Rails みたいなTensorflow on ○○○○ をみんなでつくりた

Page 59: なにわTech20160827

最後

59

会社の紹介

Page 60: なにわTech20160827

機械学習に関するパソナテックのサービス

60

①大量のデータに関する業務  ・データ収集  ・データ入力  ・データタグづけ、不正データ除去 Job-Hub事業部

大阪支社

他部署と連携し、大量データを安価にご提供します。セキュリティ面もご相談ください。

②機械学習に関する業務  ・学習環境の構築  ・学習器の設計、評価  ・パラメータ調整

お客様の目的に沿ったビジネスパートナーをご紹介します。

③ 商品化への業務  ・組込プログラミング  ・機械設計

専門スキルを持った人材をご提供いたします。委託契約、派遣契約どちらも可能です。

機械学習に関する業務に関して、どの工程でも必要なサービスをご提供致します。

Deep Leaningも対応致します。

Page 61: なにわTech20160827

株式会社パソナテックの取り組み

61

イベント通知 なにわテック道【 8 月】日程: 8/27(土) 14時~ 17時(受付 13時半~)☆ 2 週連続!秋のテック祭 『はじめての Deep Learning 』

【 9 月】日程: 9/3(土)内容:☆ 2 週連続☆秋の TECH 祭☆  Deep Learning、 Java、ブロックチェーン 最新技術が集結!

詳しくはパソナテック HPで

Page 62: なにわTech20160827

最後に

62

ご清聴ありがとうございました。