human-move-lstm โ ์ฌ๋ ์ด๋ ๊ถค์ ๋ฉํฐ๋ชจ๋ฌ ์์ธก๊ธฐ
๊ธ์ ์กฐ๋ฆฌ๋ก๋ด ์์ ์ ์๋ฎฌ๋ ์ดํฐ(robot-kitchen-safety-sim)์์ ์ฌ๋์ ๋ค์ ์ด๋ ๊ฒฝ๋ก๋ฅผ ์์ธกํด ๋ก๋ด์ด ์ ์ ์ ์ผ๋ก ๊ฐ์ยท์ ์งํ๋๋ก ํ๋ ๊ฒฝ๋ ์์ธก ๋ชจ๋ธ์ ๋๋ค.
๊ตฌ์กฐ
- ์ธ์ฝ๋: ๊ฒฝ๋ LSTM (์
๋ ฅ 2์ฐจ์
(x, z), ์๋ 64) - ํค๋: MLP ํผํฉ ํค๋(MTP, Multiple-Trajectory Prediction) โ
K=3๊ฐ ๋ฏธ๋ ๋ชจ๋ - ๊ฐ ๋ชจ๋ = ๋ฏธ๋ ๊ฒฝ๋ก
(PRED=12์คํ ร (x,z))+ ๋ชจ๋ ๊ฐ์ค์นw+ ์คํ ๋ณ ๋ถํ์ค์ฑฯ - ์ ๊ทํ: ์์ด์ ํธ ์ค์ฌ(๋ง์ง๋ง ๊ด์ธก์ ์์ , ์งํ ๋ฐฉํฅ์ +x๋ก ํ์ ) โ ์์ธก ํ ์์ขํ๋ก ์ญ๋ณํ
- ํ์ต ์์ค: best-of-K ๊ฐ์ฐ์์ NLL + ๋ชจ๋ ๋ถ๋ฅ ๊ต์ฐจ์ํธ๋กํผ
์ ์ถ๋ ฅ ๊ณ์ฝ
- ์
๋ ฅ: ๊ด์ธก
OBS=8์คํ , ๊ฐ(x, z)์ขํ. ์ฝ 0.4์ด ๊ฐ๊ฒฉ ๋ฆฌ์ํ. ๋จ์ = ๋ฏธํฐ(๊ธฐ๋ณธ ์ค์ผ์ผ์์ 1 scene-unit = 1 m). - ์ถ๋ ฅ:
K=3๊ฐ ๋ชจ๋ ๋ฆฌ์คํธ. ๊ฐ{ path: [[x,z]ร12], w, sigma: [ร12] }. ๊ฐ์ค์น ๋ด๋ฆผ์ฐจ์.
ํ๊ฐ ์งํ
ํ๊ฐ ์กฐ๊ฑด: val ์คํ๋ฆฟ(seed % 5 == 0), ๊ด์ธก 8์คํ
(3.2s) โ ์์ธก 12์คํ
(4.8s), ํฉ์ฑ ๊ถค์ .
๋ฒ ์ด์ค๋ผ์ธ(๋ฑ์ยท์นผ๋ง)๊ณผ ๋์ผํ val ์๋์ฐ์์ ์ธก์ . ๋ฎ์์๋ก ์ข์ ๊ฐ โ, ๋์์๋ก ์ข์ ๊ฐ โ.
์์น ์ค์ฐจ โ ADE / FDE (์ ์ฒด val ์๋์ฐ 8,646)
| ์์ธก๊ธฐ | ADE(m) โ | FDE(m) โ |
|---|---|---|
| ๋ฑ์ (const-vel) | 1.114 | 2.129 |
| ์นผ๋ง (Kalman) | 1.031 | 2.069 |
| ํ์ตํ LSTM (์ต๋น ๋ชจ๋) | 0.748 | 1.420 |
| ํ์ตํ LSTM (minADE@3) | 0.432 | 0.797 |
| ์ฐธ๊ณ : ์คํ ์ด์ (๋ชฉํ ์) | 0.694 | 1.233 |
- ADE: 12์คํ ์์ธก ์์น์ค์ฐจ ํ๊ท (m). FDE: 12์คํ ์งธ(4.8s ๋ค) ์ต์ข ์์น์ค์ฐจ(m).
- ์ต๋น ๋ชจ๋: ๊ฐ์ค์น ์ต์์ ๋จ์ผ ๋ชจ๋ โ ๋จ๋ด ๋ฒ ์ด์ค๋ผ์ธ๊ณผ ์ง์ ๋น๊ตํ๋ ๋ํ๊ฐ.
- minADE@3: K=3 ๋ชจ๋ ์ค ์ต์ โ ๋ฉํฐ๋ชจ๋ฌ์ด ์ ๋ต ๊ฐ๋๋ฅผ ๋ด๋์ง(์ํ).
- ๋ชฉํ๋ฅผ ๋ชจ๋ฅด๋ ํ์ตํ์ด ๋ฑ์ยท์นผ๋ง์ ํฌ๊ฒ ์ด๊ธฐ๊ณ , ๋ชฉํ๋ฅผ ์๋ ์คํ ์ด์ ์ ๊ทผ์ .
์์ recall โ ์ ์ง๋ฐ๊ฒฝ ์ง์ ์์ธก (R = 3.1 m)
"์ง๊ธ ์ ์ง๋ฐ๊ฒฝ ๋ฐ์ ์๋ ์ฌ๋์ด 4.8s ์์ ๋ฐ๊ฒฝ ์์ผ๋ก ์ง์ ํ๋์ง"๋ฅผ ๋ฏธ๋ฆฌ ๋งํ๋. ๋์(์ง์ ์ ๋ฐ) val ์๋์ฐ 5,086 ยท ์ค์ ์ง์ 1,199. ์ ์ ์์ ์ธต์ด๋ผ recall(๋์น๋ฉด ์ถฉ๋) ์ฐ์ .
| ์์ธก๊ธฐ | recall โ | precision โ |
|---|---|---|
| ๋ฑ์ (const-vel) | 0.164 | 0.883 |
| ์นผ๋ง (Kalman) | 0.248 | 0.911 |
| ํ์ตํ LSTM (์ต๋น ๋ชจ๋) | 0.433 | 0.707 |
| ํ์ตํ LSTM (์ ๋ชจ๋ ํฉ์งํฉ) | 0.756 | 0.442 |
- recall: ์ค์ ์ง์ ์ค ๋ฏธ๋ฆฌ ์ก์ ๋น์จ(๋์น๋ฉด ์ถฉ๋). precision: ๊ฒฝ๋ณด ์ค ์ง์ง ๋น์จ(๋ฎ์ผ๋ฉด ํ์ ์ง).
- ๋ฐ์ํ(์์ธก ์์)์ ์ด ์๋์ฐ์์ recall = 0(์ง๊ธ ๋ฐ์ด๋ผ ์ง์ ์ ๋ชป ๋ด) โ ์์ธก๊ธฐ์ ๊ฐ์ด์น๊ฐ ์ฌ๊ธฐ์ ๋๋ฌ๋๋ค.
- ๋ฉํฐ๋ชจ๋ฌ ์ ๋ชจ๋ ํฉ์งํฉ์ ์ฌ๋ฌ ๊ฐ๋๋ฅผ ๋ค ๊ฒฝ๊ณํด recall์ด ๊ฐ์ฅ ๋๋ค(ํ์ ์ง๋ ๋์ด๋จ โ ์ด์์ ฯ๋ก ์กฐ์ ).
์ฌํ:
train/eval_traj_baselines.pyยทtrain/train_traj_predictor.py(ADE/FDE),train/eval_traj_safety.py(recall). ์์ธ:docs/chanwoo/prediction-eval.md(ADE/FDE),docs/chanwoo/prediction-safety-eval.md(recall).
ํ์ผ
| ํ์ผ | ์ฉ๋ |
|---|---|
model.pt |
PyTorch ๊ฐ์ค์น(state_dict). ๋ฐฑ์๋ ์๋น์ฉ(๊ถ์ฅ). |
model.onnx |
ONNX export. ์ธ๋ธ๋ผ์ฐ์ /ํ ๋ฐํ์ ์ถ๋ก ์ฉ(์ต์ ). |
์ฌ์ฉ
from huggingface_hub import hf_hub_download
from trajectory.learned_predictor import LearnedPredictor # ๋ฆฌํฌ์ trajectory ๋ชจ๋
w = hf_hub_download("chanubc/human-move-lstm", "model.pt")
pred = LearnedPredictor(weights_path=w, device="cpu")
modes = pred.predict_modes([[0,0],[0.1,0],[0.2,0],[0.3,0],[0.4,0],[0.5,0],[0.6,0],[0.7,0]])
# โ [{"path": [[x,z]โฆ12], "w": .., "sigma": [โฆ12]}, โฆ 3๊ฐ]
์๋ฎฌ๋ ์ดํฐ ๋ฐฑ์๋(backend/detect_server.py)๋ ๋ก์ปฌ ๊ฐ์ค์น๊ฐ ์์ผ๋ฉด ์ด ์ ์ฅ์์์ ์๋์ผ๋ก ๋ด๋ ค๋ฐ์ต๋๋ค.
์ฌํ
ํ์ตยทexport ์คํฌ๋ฆฝํธ๋ ๋ฆฌํฌ์ ์์ต๋๋ค: train/train_traj_predictor.py, train/export_traj_onnx.py.
์ค๊ณ ๋ฌธ์: docs/chanwoo/specs/2026-08-19-learned-predictor-design.md.
๋ผ์ด์ ์ค
MIT. ์๋ฎฌ๋ ์ด์ (ํฉ์ฑ) ๊ถค์ ์ผ๋ก ํ์ต๋ ์ฐ๊ตฌ/๋ฐ๋ชจ์ฉ ๋ชจ๋ธ์ ๋๋ค.