Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
動き検出勉強会資料
Search
Minoru Natsutani
June 06, 2025
Technology
56
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
動き検出勉強会資料
過去の動き検出勉強会の資料をリメイクしました。
Minoru Natsutani
June 06, 2025
More Decks by Minoru Natsutani
See All by Minoru Natsutani
放熱勉強会資料
natsutan
0
26
グラフの書き方勉強会
natsutan
0
100
Googleのロボット技術紹介。RT-1からGemini Robotics-ER 1.5 まで
natsutan
0
81
WindowsでGenesisに挑戦した話
natsutan
0
540
辛い仕事をプリキュアで乗り切りHack
natsutan
0
95
論文読み勉強会 RoboGen
natsutan
0
370
プログラミング写経のすすめ
natsutan
0
1.5k
ロボット模倣学習勉強会
natsutan
0
500
スモールデータ勉強会発表資料
natsutan
1
1.6k
Other Decks in Technology
See All in Technology
AI時代のYAGNI:「爆速で無駄になった機能」からの学び / 20260720 Naoki Takahashi
shift_evolve
PRO
3
500
Type-safe IaC for Dart
coborinai
0
180
Devsumi 2026 Summer 人もAIも使える共通基盤を事業の加速装置にする~デザインシステム運用に学ぶ組織レバレッジ~ 渡辺 凌央
legalontechnologies
PRO
1
280
生成 AI 時代にいま一度「問い合わせ」について考えてみる
kazzpapa3
1
110
20260720_クラウド女子会×PyLadiesTokyoコラボ Amazon Bedrock ハンズオン用資料
yuuka51
1
100
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
110k
ゴールデンパスは敷いただけでは道にならない ─ 企画部門のエンジニアが技術標準を事業価値に変えるまで
mhrtech
1
250
AI x 開発生産性を取り巻く予算戦略と投資対効果
i35_267
7
2.7k
全社でのソフトウェアサプライチェーン攻撃対策をやってみた with Takumi Guard
z63d
0
200
Vポイント分析基盤におけるデータモデリング20年史
taromatsui_cccmkhd
4
670
JAWS_ICEBERG_BASECAMP
iqbocchi
2
100
ファミコンでPHPを動かす / PHP on the Famicom
tomzoh
2
580
Featured
See All Featured
Visualization
eitanlees
152
17k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
510
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.3k
Discover your Explorer Soul
emna__ayadi
2
1.2k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Unsuck your backbone
ammeep
672
58k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
370
Mind Mapping
helmedeiros
PRO
1
290
Designing for Performance
lara
611
70k
Optimizing for Happiness
mojombo
378
71k
Transcript
動き検出勉強会 リメイク版 2025.6.6 @natsutan 1
2 これは何? 過去の勉強会のリメイク
3 @natsutan ・FPGAとプログラミングが好き ・最近はロボットのAIが仕事 https://natsutan.hatenablog.com/ 自己紹介
4 FPGAを使ったHPCの世界 FPGAは、Field-Programmable Gate Arrayの略。 中身が書き換えられる半導体。 シンプルな物から、超高機能な物までピンキリ。 ロボットやドローンにも使われる。Jetsonが入ってくると ころにはFPGA使われる可能性が高い。Deep Learning前ま
ではNvidiaの競合的な所もあったが、Deep Learning後は ちょっと元気がない。頑張ってほしい。 Verilog-HDL、VHDLといった専用の言語を使う。 https://ja.wikipedia.org/wiki/FPGA
5 ソフトウェアとFPGAの比較 メリット デメリット 速い ・システムが高価 ・消費電力 ・物理的な大きさ ・開発に時間がかかる ・デバッグがやりにくい
・データの移動が面倒 ・開発環境が有料 ・正しく使わないと壊れる ・壊れたときのリカバリが高価
6 FPGAの使いどころ 基本的にはニッチなところで使う。 今だとGPUが使えないところが一つのターゲットだと思う。 ↓発表当時はこんなことを書いています。 FPGAで専用ハードウェアを作るのであれば、対パソコン比で1000倍はほしい。 ・10倍程度はアルゴリズムですぐ追いつかれる ・10程度は何もしなくても早くなる ・CPU ・メモリ
・コンパイラ ・ライブラリ
7 顔認識の速度向上の例 今だとLLMや生成AI周り。 技術が出た当初はFPGA で高速化の意味があるだ ろうが、あっという間に スマホでも動くようにな ってFPGA化の意味が無 くなる。
8 動き検出の話 ・動き検出自体がHW化する価値のあるアルゴリズム ・登場する数式が、機械学習の数式と共通点がある
9 動き検出が使われるところ Object Tracking:どの物体が、どこに移動したか追跡する。 MPEG:動きベクトルを使って動画を圧縮する
10 動き検出とは 時刻t 画像のブロックが、時間と共にどちらへどれくらい動いたのかを検出する処理。 検出結果は動きベクトルと呼ばれる。
11 動き検出とは 画像の一部分を抜き出し、次の画像と最も一致する場所を探す。 ある物体が1フレームの間に2ピクセル右に行ったとしたら、右に2ピクセルずらしたところと 画像が一致するはず。
12 動き検出の評価関数 評価関数としてSAD、SSDが使われる。どちらも0なら画像は完全に一致している。 画像の一部を重ねた状態で、画素の差分を取る。 SAD(Sum of Absolute Difference):各画素の差分の絶対値の和。 SSD(Sum of
Squared Difference):各画素の差分の二乗和 動き検出という点ではあまり精度に差がないこと、計算量が少ないことよりSADが使われるこ とが多い。統計学的にはSSDの方が最小二乗和を求めているのでSSDが好まれるときもある。 E 𝑤 = 1 2 𝑑𝑛 − 𝑦(𝑥) 2 Deep learning の誤差関数 と同じ
13 動き検出の難しい所 ①原理的に検出できない図形がある ②そもそも動いている画像ではない SADが最小となる場所が 複数存在する SADが最小となる場所がそも そも存在しない。 ピントがぼけることで、同じよ うな状況に陥る事がある。
14 当時のネタ orzに時代を感じる
15 動き検出の実装方法 勾配法 ・共役勾配法 ・勾配降下法 ・確率的勾配降下法 ・ニュートン法 傾きを元に反復計算を行い、SSDが最小と なる場所を探す。 全探索法?
一画素ずつずらして全領域での SADを計算する。 僕が勝手に呼 んでいるだけな ので注意
16 動き検出の実装方法 ソフトウェア実装 ハードウェア実装 ②荒い検索 ①勾配法 ③全探索法 (ピクセル単位) ④サブピクセル計算 Layer1
Layer2 Layer3
17 勾配法 ある初期値を与え、その場所の傾きから次の場所を選ぶ事を繰 り返すことで、SSDの最小値を求める。 ポテンシャルが一番低い所へ移動していくので、反復計算を降 下(descent)と表現する。 Ex:確率的勾配降下法(stochastic gradient descent) 動き検出の場合は2次元
勾配法には明確な欠点がある 欠点1:局所解に陥る 欠点2:何回反復すればよいのか分からない 欠点3:解が発散する
18 勾配法 欠点1: 初期値を間違えると、局所解を求めてしまう。 1回の試行では局所解に陥ったかどうかが判定できない。 初期値が大事。 初期値が良ければ2~3回で収束するケースが多い。 良い初期値を得るために、「荒い検索」を利用する。 (後で) ここを最小値
と判定 本当はこっちが最小値 初期値を変えると上手く行く 局所解に陥っているかどうかが 判断できない
19 勾配法 欠点2: 反復回数の計算が読めない。 運が良いと3回、運がわるいと数十回の反復が必要。 入力データと初期値に依存し、汎用的な終了の判定方法 が無い。 回数を増やしたり、初期値を変え ると上手く行くときがある。 動き検出の特性として、そもそも
最適な解が存在しない可能性が ある
20 勾配法 欠点3: 解が発散する。 検索範囲の端に向かって全力で移動してしまう。 →検出は簡単にできるので、局所解よりは扱いがらく 初期値を変えると上手く行くときが ある。 動き検出の特性として、そもそも 最適な解が存在しない可能性が
ある
21 動き検出の実装方法 ソフトウェア実装 ハードウェア実装 ②荒い検索 ①勾配法 ③全探索法 (ピクセル単位) ④サブピクセル計算 Layer1
Layer2 Layer3 初期値が全て!
22 荒い検索 ・縮小画像での動き検出 Coarse-to-fine search、画像ピラミッド ・前回の動き検出の結果を使う ・周辺の信頼できる動きベクトルを使う 動き検出できる 動き検出できない 動き検出できる
荒い検索を使っておおまかな動きベクトルを先に計算しておく ・SW実装(勾配法)の場合は、その値が初期値の候補になる ・HW実装(全探索)の場合はそのまま検索範囲の原点とする実装が多い →HW実装の場合、特定の領域を取り出すのが面倒
23 画像ピラミッド ¼にした画像で動 き検出を行う その結果を初期値にし て1/2にした画像で動 き検出を行う 最後に元の解像度で動 き検出を行う https://ja.wikipedia.org/wiki/%E3%83%94%E3%83%A9%E3%83%9F%E3%83%83%E3%83%89
画像を積んだ状態がピラミッドに見 えるから画像ピラミッド。 動き検出は上から下へ処理してい くが、Deep Learningは下から上に 処理していく。Conv→Maxpool
24 動き検出の実装方法 ソフトウェア実装 ハードウェア実装 ②荒い検索 ①勾配法 ③全探索法 (ピクセル単位) ④サブピクセル計算 Layer1
Layer2 Layer3
25 全探索法 これができるのがハー ドウェア実装
26 全探索法 欠点1:局所解に陥る →全探索なので、全体で一番小さいところを検出できる 欠点2:何回反復すればよいのか分からない →反復しないので計算量は一定 欠点3:解が発散する →全探索なので、全体で一番小さいところを検出できる 勾配法の欠点を全てクリアー
27 全探索法 この辺は面白いけど省略
28 動き検出の実装方法 ソフトウェア実装 ハードウェア実装 ②荒い検索 ①勾配法 ③全探索法 (ピクセル単位) ④サブピクセル計算 Layer1
Layer2 Layer3
29 サブピクセルの位置推定 http://www.sic.shibaura-it.ac.jp/~yaoki/hikarizou/hikarizou2.pdf 画素単位で探索すると、動きベ クトルが整数になる。もう少し 細かく動きを検出したいときは、 簡単なフィッティングでサブピ クセルを推定する。 用途によっては不要なこともあ る。
30 OpenCVで動き検出使って見よう cv2.optflow.createOptFlow_DualTVL1 cv2.optflowが動 き検出 アルゴリズム 何もしなくてもCUDAやOpenCLを使ってくれるときもあるが、 明示的に指定することもできる。OpenCVのコンパイルオプ ションとか環境(jetsonとか)によっても違う。 ヘッダーファイルも修正必要
#include <opencv2/ocl/ocl.hpp> //opencl #include <opencv2/gpu/gpu.hpp> //cuda
31 OpenCVで動き検出を早くするオプション cv2.optflow.createOptFlow_DualTVL1 // パラメータ調整(速度優先) optical_flow->setTau(0.25); optical_flow->setLambda(0.10); optical_flow->setTheta(0.2); optical_flow->setScalesNumber(3); //
デフォルトは5 optical_flow->setWarpingsNumber(1); // デフォルトは5 optical_flow->setIterations(10); // デフォルトは30 optical_flow->setEpsilon(0.03); // デフォルトは0.01 optical_flow->setScaleStep(0.5); ScalesNumberが初期値を決 めるためのピラミッドの段数。 小さい方が計算量少ない Iterations 勾配法の反復の最大数 小さいとワーストが減る Epsilon ループの終了条件。大きい方 が早く終わる。
32 OpenCVで動き検出を早くするオプション cv2.optflow.createOptFlow_DualTVL1 WarpingsNumber https://www.ipol.im/pub/art/2013/26/ 上手くwarpし た時 上手く行って ないwarp 一般的なWarp(アフィン変換)では
なく、画素を物体の正しい位置に 寄せるような動きをする。数を増や せば上手くいくが、計算コストが発 生する。 とりあえず小さくしておけば早い。 ここはChatGPTに聞いたので、 興味ある人は自分でしっかり調 べてください。
33 最後に 動き検出は面白いし、いろいろ役に立つ技術なのでみんなもやってみよう。