2017/05/04

最近のIT技術の調査(FPGA,画像認識)

最近のIT技術について調べたメモ

主な参考文献:FPGAマガジン No.3 高速Ethernet×FPGA、FPGAマガジン No.6 カメラ×画像処理×FPGA、FPGAマガジン No.15 車に農業!?AI時代のチャレンジ!リアルタイム動画FPGAマガジン、日経エレクトロニクス、各種ネットの記事

FPGA

ハードウェア処理が高速な理由

ソフトウェアによるDVDデコードなどは高性能CPUやGPUの高負荷処理が必要となるが、ASICやFPGAにすると低クロックの安物でも同等な処理ができるのはなぜか。CPUはオーバーヘッドが多いからと教えられてきたが、どうやらそうではない様子。

ハードウェア処理が速い本当の理由は

ハードウェア処理は必要な部分だけ簡単に並列化(パイプライン化)できるから。というのが正解か。FPGAのパイプラインは流れ作業であり、GPGPUの並列処理は多人数の分割作業という感じである(そのためGPUの場合は各処理が独立していなければならない)

極端な話、8×8=64にブロック化して処理するならば同じ流れの回路を64個配置すれば一瞬で済む。並列処理なしのCPUだと64回ループしなければならない。また、if-then-elseというCPUだと遅い処理がマルチプレクサ処理(要はあらかじめ複雑な真理値表を作っておくということ?)により速い。
そもそも、ハードウェア処理とは、データの通り道の形を最初から決めておくことだといえる。実際には複数の入力条件によりデータの通り道(真理値表)は多段に分岐されているので、いろいろな処理をしているように見える。ソフトウェア処理とは、データが来てから個別に考えて処理すること。

そもそもFPGAの中身はどうなっているのか

http://www.ni.com/white-paper/6983/ja/
フリップフロップ回路というレジスタ(極小容量のメモリみたいなもの)それに加えてANDやORやXORのようなゲート回路が固定(真理値が固定)されている・・というのが普通の論理回路だとすると、FPGAでは、LUT(Look Up Table)という概念を使い、すべてのゲートの真理値が可変でプログラムできるので、それをつなげていけば回路ができる。という概念理解でよいであろう。
Excelで言えばIF文も加算(+1する)も、いろんな処理も、すべてをvlookupで代替するようなイメージ。そして、vlookupの真理値を書き換えてつなげると動的な回路に。

回路が可変なので動作速度も可変

FPGAの動作周波数はユーザーの作ったロジックの複雑さにより変わる(回路を作ってみないと速度が分からない。複雑になりすぎるととても遅くなる(200MHzとか)ことも)

FPGAの構成

ソフトコア、ハードコア(CPUが最初から焼き付いている)に分かれていて、回路にCPUを入れればパソコンと同じようにも使える。
ザイリンクスのFPGAなどでは、ARMのCPU部分でLinuxが動く。SambaもVPNもモバイルからのアクセス受付もLinuxなので簡単に実装可能。
Linux上からユーザー回路部分を操作できるので、ハードウェア処理が必要なところだけ論理回路化して、他はLinuxでやればいい。

DAPDNA アーキテクチャ

FPGAのハードウェア回路部分を1クロックで動的に再構成できるアーキテクチャ。日本独自?(東京計器株式会社)
すべてのロジックをハードウェアに展開しない。いま使う部分だけを展開するので回路が小さく低電力。だが動作周波数は低く遅い。
画像フィルタ処理など多品種&高速処理に向いている?

高速Ethernet+FPGA直付けで金融の高速高頻度取引

https://www.arista.com/assets/data/pdf/7124FX/7124FX_Data_Sheet.pdf
このようなスイッチ+FPGAというのが既製品として売られている。
150万円くらい。

具体的な製品と製造方法

アルテラ Stratix10 インテル14nmプロセス ARM Coretex-A53
ザイリンクス VirtexUltraScale+ TSMC16nmプロセス ARM Coretex-A53(同R5)

機械学習

ノイマン型と非ノイマン型

・非ノイマン型が本命のように思う
現在のノイマン型はNVIDIAのGPGPUでやるのが基本。将来的には量子コンピュータ等による脳型モデル >IBM SyNAPSE TrueNorthなどで実験中。

機械学習に適したアプリ

画像の分類、パターン認識 がもっとも相性が良い様子
連想記録
ストリーミング動画などの圧縮アルゴリズムの自立的な自動最適化

ニューラルネットの基本

Convolutional Neural Network
Convolution=畳み込み
ひとつの画像を領域を変えて何度もスキャンして特徴を得る。微妙なズレを吸収して抽象化。

画像の3次元復元の原理

複数カメラを使って三角測量を行う。動画の場合は1カメラだけでも時間差を擬似的に複数カメラと認識できる

2つの画像から逆算して求める被写界深度の計算

人間の目と同じく、同じ場所にカメラが2つ付いていると被写界深度が測定できる。iPhone7 Plusでは、これを使って背景をぼかすエフェクトが付いているそうな。生物に2つの目が付いていることにも理由があるわけだ。
焦点距離の違う2つのカメラで撮影して、2枚のサイズを合わせて合成すると、被写界深度の浅いところは差分が少なく、被写界深度が深いところは差分が多くなるらしく、それで判定しているらしい。

ハフ変換

連続する点を直線と認識、また、円を認識するアルゴリズム。「1962年にP.V.C.Houghによって米国特許が取られている古い技法」とのこと。
https://codezine.jp/article/detail/153
アルゴリズムの解説を見たが、よく分からない。数学的な手法により、範囲を絞っていき、対象を限定していくみたいな認識方法の様子。
ドットのつながりをベクトルとして認識できる。それなりに高精度に推定できる。

HOG特徴量


http://d.hatena.ne.jp/yasutamu/20081209/1228832225
画像に人間が映っているか否かを判定することに使う
1.グレースケールの画像を入力する
2.画像をメッシュ分割する
3.ひとつのメッシュを中心として、周辺の角度の異なる複数セルをライン状に見ていく(20度角×9本で一周のような)の輝度の差分を取り、度数をカウントしてヒストグラムを作る→文章よりも図で見た方が分かりやすい
4.これを画像内の全メッシュに対して行う
5.正規化して特徴的な部分を抽出
元になるメッシュ数×周辺の比較対象となるライン数の計算が必要になるようだ。

これをして、周辺メッシュとの明暗差のヒストグラムを作ったら、既存で持っている「人間が映っていることがすでに分かっている」画像のヒストグラムと比較する。ヒストグラムの分布が似ているか似ていないかの閾値は機械学習(=サポート・ベクター・マシン→クラスタ分析のような手法でゼロorイチを判定する手法)で判定する
このアルゴリズムだと、一定の焦点距離しか判定できないような?望遠にしたりオートフォーカスなどは簡単ではなさそう?ハロウィンで仮装して形が変わったりLEDを付けて光っている人間などは判定が難しい?

スライディング・ウインドウ

画像を左上から右下まで走査していくこと。
正解のヒストグラムデータ(教師データ)があっても、入力画像のサイズが変わるとヒストグラムの分布が大きく変わって比較できない。
そのため、教師データのサイズに合わせて入力画像をリサイズする必要あり。
→反復した比較のためにとんでもない計算量が必要なので、これをいろいろと簡略化するアルゴリズムが必要