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
82
WindowsでGenesisに挑戦した話
natsutan
0
540
辛い仕事をプリキュアで乗り切りHack
natsutan
0
95
論文読み勉強会 RoboGen
natsutan
0
380
プログラミング写経のすすめ
natsutan
0
1.5k
ロボット模倣学習勉強会
natsutan
0
500
スモールデータ勉強会発表資料
natsutan
1
1.6k
Other Decks in Technology
See All in Technology
【公開用】AI_Dev_Ex2026_AI_登壇資料
matsuritechnologies
PRO
1
470
複数プロダクトで進めるAI機能実装 ── 実践から得たリアルな学びとロードマップ実現への挑戦 / AICon2026_yanari
rakus_dev
1
270
インシデント事例と パッケージの全量解析に学ぶ ソフトウェアサプライチェーンの守り方 / supply-chain-attack-defense
flatt_security
0
890
AIとハーネスで育てるトランスコンパイラ / 20260722 Yasushi Katayama
shift_evolve
PRO
3
780
どこまでAIに任せるか 〜確率論と決定論の境界決定〜
shukob
0
450
AIツールを導入しても生産性はあがらない? カオナビが直面した 3つの壁と乗り越え方。/ Overcoming 3 Barriers to AI-Driven Productivity at kaonavi
kaonavi
0
160
AI時代におけるテストの基礎の再定義 / Rethinking the Fundamentals of Testing in the AI Era
mineo_matsuya
13
4.3k
reFACToring
moznion
0
180
Multicaで30個のミニプロジェクトをAIエージェント運用して見えてきたこと
eiei114
1
620
Network Firewallやっていき!
news_it_enj
0
260
SRENEXT_2026_Chairs__Talks_in_Tamachi.sre.pdf
srenext
1
140
プロダクト開発組織の現在地(Ver.2026/07) / product-organization
kaonavi
0
390
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.7k
A designer walks into a library…
pauljervisheath
211
24k
We Are The Robots
honzajavorek
0
280
The Curse of the Amulet
leimatthew05
2
13k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Making Projects Easy
brettharned
120
6.7k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
How STYLIGHT went responsive
nonsquared
100
6.2k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
320
A Modern Web Designer's Workflow
chriscoyier
698
190k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.4k
Building AI with AI
inesmontani
PRO
1
1.1k
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 最後に 動き検出は面白いし、いろいろ役に立つ技術なのでみんなもやってみよう。