Instructions to use Sungah/omx_shoebox_act with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- LeRobot
How to use Sungah/omx_shoebox_act with LeRobot:
# No code snippets available yet for this library. # To use this model, check the repository files and the library's documentation. # Want to help? PRs adding snippets are welcome at: # https://github.com/huggingface/huggingface.js
- Notebooks
- Google Colab
- Kaggle
OMX ์์ ์์ ์ ๋ฐ ๋ฃ๊ธฐ ยท ACT ์์ฐ์๋ณ ๋น๊ต (2026-11-03)
๊ฐ์ ์์ ์ ๋ ์ฌ๋์ด ๊ฐ๊ฐ 10๋ฒ์ฉ ์์ฐํ ๋ฐ์ดํฐ๋ก ACT๋ฅผ ํ์ตํ ๋ชจ๋ธ๊ณผ ์คํ ์ฝ๋์ ๋๋ค.
- ๋ฐ์ดํฐ: Yuzriha00/shoebox_a(์์ฐ์ a, 10๊ฐ, 10,787ํ๋ ์), Yuzriha00/shoebox_b(์์ฐ์ b, 10๊ฐ, 16,086ํ๋ ์)
- 30 fps, ์นด๋ฉ๋ผ
top(์์ชฝ)ยทwrist(์๋ชฉ), state 6(๊ด์ 5 + ๊ทธ๋ฆฌํผ ์์น) - ๊ฐ ๋ฐ์ดํฐ์์ ์์ฐ 1๊ฐ(9๋ฒ)๋ val loss ๊ณ์ฐ์ฉ์ผ๋ก ํ์ต์์ ๋บ์ต๋๋ค. ํ์ต์๋ a 9๊ฐ / b 9๊ฐ / a+b 18๊ฐ๋ฅผ ์ผ์ต๋๋ค.
๋ค์ด ์๋ ๋ชจ๋ธ
ํ์ต์ด ๋๋ ๋ชจ๋ธ๋ง ๋ค์ด ์์ต๋๋ค. ๋๋จธ์ง๋ ํ์ต์ด ๋๋๋ฉด ์ถ๊ฐํฉ๋๋ค. ./infer.sh๋ฅผ ์ธ์ ์์ด ์คํํ๋ฉด ์ง๊ธ ๋ค์ด ์๋ ๋ฒํธ๊ฐ ๋์ต๋๋ค.
| ๋ฒํธ | ํด๋ | ํ์ต ๋ฐ์ดํฐ | ์ ๋ ฅ | step |
|---|---|---|---|---|
| 1โ6 | act_shoebox_a_<N>step |
์์ฐ์ a 9๊ฐ | top + wrist, state 6 | 600~3600 |
| 7โ15 | act_shoebox_b_<N>step |
์์ฐ์ b 9๊ฐ | top + wrist, state 6 | 600~5400 |
| 16โ30 | act_shoebox_ab_<N>step |
a + b 18๊ฐ | top + wrist, state 6 | 600~9000 |
| 31โ36 | act_shoebox_a_moge_<N>step |
์์ฐ์ a 9๊ฐ | top + top_depth + wrist, state 6 | 600~3600 |
| 37โ45 | act_shoebox_b_moge_<N>step |
์์ฐ์ b 9๊ฐ | top + top_depth + wrist, state 6 | 600~5400 |
| 46โ60 | act_shoebox_ab_moge_<N>step |
a + b 18๊ฐ | top + top_depth + wrist, state 6 | 600~9000 |
- ๋ฒํธ =
./infer.sh <๋ฒํธ>์ ์ฐ๋ ๊ฐ์ ๋๋ค. ๊ฐ ์ค ์์์ 600 step ์์์ ๋๋ค(์: 1 = a 600 step, 6 = a 3600 step). top_depth๋ ์์ชฝ ์นด๋ฉ๋ผ ์์์ MoGe-2 ViT-B(ํ ํฐ 1200)๋ก ์ถ์ ํ ๊ฑฐ๋ฆฌ๋ฅผ 0.79~2.65 m ๋ฒ์์ ํ๋ฐฑ ์์์ผ๋ก ๋ง๋ ๊ฒ์ ๋๋ค(๊ฐ๊น์ธ์๋ก ํฐ์). ์คํํ ๋ ์ค์๊ฐ์ผ๋ก ๋ง๋ญ๋๋ค.- ์ค๋ฌผ ์ฑ๊ณต๋ฅ : (ํ ์คํธ ํ ๊ธฐ๋ก)
val loss
val loss = ํ์ต์ ์ฐ์ง ์์ ์์ฐ์์, ๋ชจ๋ธ์ด ์์ธกํ ๋์ 100์คํ ์ด ์์ฐ๊ณผ ์ผ๋ง๋ ๋ค๋ฅธ์ง(L1, ์ ๊ทํ ๋จ์, ๋ฎ์์๋ก ์์ฐ๊ณผ ๋น์ท). ์ค๋ฌผ์์ ๋๋ฆด ๋์ฒ๋ผ ๊ณ์ฐํ์ต๋๋ค(๋ฌด์์ ์์ยท์ด๋ฏธ์ง ์ฆ๊ฐ ์์). ํ์ต ๋ก๊ทธ์ loss์๋ ๊ณ์ฐ์ด ๋ฌ๋ผ ๋ฐ๋ก ๋น๊ตํ ์ ์์ต๋๋ค.
- a ํ์ต / b ํ์ต = ํ์ต์ ์ด ์์ฐ(a 0๋ฒ, b 10๋ฒ) โ ๋น๊ต์ฉ
- a val / b val = ํ์ต์์ ๋บ ์์ฐ(a 9๋ฒ, b 19๋ฒ)
- ๊ตต์ ๊ฐ = ๊ทธ ๋ชจ๋ธ์์ val์ด ๊ฐ์ฅ ๋ฎ์ step (a๋ a val, b๋ b val, ab๋ ๋ val ํ๊ท ๊ธฐ์ค)
| ๋ฒํธ | ๋ชจ๋ธ | step | a ํ์ต | a val | b ํ์ต | b val |
|---|---|---|---|---|---|---|
| 1 | a | 600 | 0.145 | 0.285 | 1.277 | 0.913 |
| 2 | a | 1200 | 0.102 | 0.282 | 1.238 | 0.894 |
| 3 | a | 1800 | 0.094 | 0.286 | 1.254 | 0.908 |
| 4 | a | 2400 | 0.091 | 0.285 | 1.263 | 0.916 |
| 5 | a | 3000 | 0.089 | 0.286 | 1.256 | 0.913 |
| 6 | a | 3600 | 0.088 | 0.286 | 1.258 | 0.915 |
ํ์ต ์ ๋ณด (lerobot 0.4.4)
| ํญ๋ชฉ | ๊ฐ |
|---|---|
| ์์์ | ResNet18 ImageNet ๊ฐ์ค์น |
| batch ยท step | 256 (32ร8๋ก ๋๋ ๊ณ์ฐ) ยท a 3600 / b 5400 / ab 9000 (๋ชจ๋ ๋ฐ์ดํฐ ์ฝ 95ํ ๋ฐ๋ณต), 600๋ง๋ค ์ ์ฅ |
| ํ์ต๋ฅ | cosine ์ต๋ 4e-5 (์ด๋ฏธ์ง ์ธ์ฝ๋ 1e-5), warmup 100 โ 1e-6 |
| chunk | 100 |
| ๊ธฐํ | ์ด๋ฏธ์ง ์ฆ๊ฐ(์ยท์ ๋ช ๋ยทํ์ ยฑ5ยฐยท์ด๋ ยฑ5%), grad clip 10, ๊ทธ๋ฆฌํผ ์ ๋ฅ ์ ์ |
ํ์ต ๋ฐ์ดํฐยทํ์ต ์ฝ๋
training/ ํด๋์ ํ์ต ๋ฐ์ดํฐ๋ฅผ ๋ง๋ ์ฝ๋, ํ์ต ์คํฌ๋ฆฝํธ, val loss ๊ณ์ฐ ์ฝ๋๊ฐ ์์ต๋๋ค. ์ฌ์ฉ๋ฒ์ training/README.md๋ฅผ ๋ณด์ธ์.
- ์๋ณธ 2๊ฐ โ ํฉ์น๊ธฐ โ MoGe depth ์ถ๊ฐ โ val ์์ฐ ๋นผ๊ธฐ:
bash training/make_datasets.sh - ํ์ต:
bash training/train_act.sh <a|b|ab|a_moge|b_moge|ab_moge> - val loss:
python -I training/tools/val_loss.py ...
์คํ ๋ฐฉ๋ฒ
์ด ์ ์ฅ์์ ์คํ ์ฝ๋(lerobot 0.4.4์ฉ)๊ฐ ๊ฐ์ด ๋ค์ด ์์ต๋๋ค. ๋ฒํธ๋ก ๋ชจ๋ธ์ ๊ณจ๋ผ ์คํํ๊ณ , GPU(cuda) ๋ก ์คํํฉ๋๋ค.
pip install "lerobot[dynamixel]==0.4.4"
# MoGe (31~60๋ฒ): PyPI์ ์์ด์ GitHub์์ ์ค์น
pip install opencv-python-headless scipy trimesh
pip install --no-deps git+https://github.com/EasternJournalist/utils3d.git git+https://github.com/microsoft/MoGe.git
hf download Sungah/omx_shoebox_act --local-dir omx_shoebox_act
cd omx_shoebox_act
chmod +x infer.sh inference.sh # hf download๋ ์คํ ๊ถํ์ ์ง์ (์ ํ๋ฉด bash infer.sh ๋ก ์คํ)
./infer.sh # ๋ชจ๋ธ ๋ฒํธ ๋ชฉ๋ก
./infer.sh 2 # a 1200 step
- MoGe ๋ชจ๋ธ์ ์ฒ์ ์คํํ ๋ Hugging Face์์
Ruicheng/moge-2-vitb-normal๊ฐ์ค์น๋ฅผ ๋ฐ์ต๋๋ค. ์ธํฐ๋ท์ด ํ์ํฉ๋๋ค.
infer.sh๊ฐ ์๋์ผ๋ก ํ๋ ์ผ
- ๋ก๋ด ํ์
์ ๋ชจ๋ธ์ ๋ง์ถฅ๋๋ค.
- MoGe ๋ชจ๋ธ(
depth_info.json์ด ์์):omx_follower_grip_depth(๊ทธ๋ฆฌํผ ์ ๋ฅ๋ ๋ฃ์ง ์์) - ๊ทธ ์ธ:
omx_follower
- MoGe ๋ชจ๋ธ(
- MoGe ๋ชจ๋ธ์ ์ ์ฑ
์ด ์๋ก ์์ธกํ๋ ํ๋ ์์์๋ง ์์ชฝ ์นด๋ฉ๋ผ ์์์ผ๋ก depth๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด ๋ฃ์ต๋๋ค.
- ACT๋
n_action_steps=50์ด๋ผ 50ํ๋ ์(์ฝ 1.7์ด)๋ง๋ค ํ ๋ฒ ์์ธกํฉ๋๋ค. ๊ทธ ํ๋ ์๋ง depth ๊ณ์ฐ ์๊ฐ(RTX A6000์์ ํ ์ฅ์ ์ฝ 31~46 ms)๋งํผ ๋ฆ์ด์ง๋๋ค. - ์์ ๋ฐฉ์(๋ฐฑ๊ทธ๋ผ์ด๋์์ ๊ณ์ ๊ณ์ฐ, 2~3ํ๋ ์ ๋ฆ์)์
--robot.depth_sync=false๋ก ์ธ ์ ์์ต๋๋ค.
- ACT๋
- ์คํ ์๊ฐ์ 90์ด๊ฐ ๊ธฐ๋ณธ์
๋๋ค(์์ฐ ๊ธธ์ด a 31
42์ด, b 5057์ด).
๊ณตํต ์ค์
- ํฌํธยท์นด๋ฉ๋ผ๋
inference.sh๋งจ ์ "ํ์ฅ ์ค์ "์ ๊ณ ์น๊ฑฐ๋ ํ๊ฒฝ๋ณ์๋ก ๋๊น๋๋ค.- ์:
ROBOT_PORT=/dev/ttyACM1 TOP_CAM=/dev/video4 WRIST_CAM=/dev/video6 ./infer.sh 2
- ์:
- GPU๋ฅผ ๋ฐ๊พธ๋ ค๋ฉด:
POLICY_DEVICE=cuda:0 DEPTH_DEVICE=cuda:0 ./infer.sh 32 - ํ์ต ๋์ ๊ฐ์์ผ ํ๋ ๊ฒ: fps(30), ์์ชฝยท์๋ชฉ ์นด๋ฉ๋ผ ์์นยท๊ฐ๋, ์์ยท์ ๋ฐ ๋ฐฐ์น
- depth ๋ฒ์(0.79~2.65 m)๋ ์นด๋ฉ๋ผ๊ฐ ๊ฐ์ ์๋ฆฌ์ ์๋ค๋ ์ ์ ์ ๋๋ค.
- ํ ์คํ
์ด๋๋์
--robot.max_relative_target=10์ผ๋ก ์ ํ๋ผ ์์ต๋๋ค. - ์คํ๋ง๋ค ์งง์ ํ๊ฐ ๊ธฐ๋ก์ด
outputs/eval/์๋์ ์ ์ฅ๋ฉ๋๋ค(Hub ์ ๋ก๋ ์ ํจ).
ํ์ผ
| ํ์ผ | ๋ด์ฉ |
|---|---|
infer.sh |
๋ฒํธ๋ก ๋ชจ๋ธ ๊ณจ๋ผ ์คํ |
inference.sh |
lerobot-record ์ต์ ์ ์ฒด(ํฌํธยท์นด๋ฉ๋ผ ์ค์ ) |
omx_run.py |
lerobot-record + ์๋ ๋ก๋ด ํ์ ๋ฑ๋ก |
omx_depth_robot.py |
omx_follower_grip_depth: MoGe depth ์นด๋ฉ๋ผ ์ถ๊ฐ, ์์ธก ํ๋ ์์์๋ง ๊ณ์ฐ |
omx_grip_robot.py |
omx_follower_grip (์ด ์ ์ฅ์ ๋ชจ๋ธ์ ์ ์, omx_run.py๊ฐ ๋ฑ๋ก๋ง ํจ) |
omx_box.py |
๋ฐ์ค ๋ฒํธ one-hot (์ด ์ ์ฅ์ ๋ชจ๋ธ์ ์ ์, omx_run.py๊ฐ BOX๊ฐ ์์ ๋๋ง import) |
act_ensemble.py |
(์ ํ) ACT k์คํ temporal ensembling |
training/ |
ํ์ต ๋ฐ์ดํฐ ๋ง๋ค๊ธฐยทํ์ตยทval loss ์คํฌ๋ฆฝํธ (training/README.md) |
weights/resnet18-f37072fd.pth |
ResNet18 ImageNet ๊ฐ์ค์น(์ธํฐ๋ท ์์ด ์คํํ ๋) |
models/*/omx_info.json |
๊ทธ๋ฆฌํผ ์ ๋ฅ ์ฌ์ฉ ์ฌ๋ถ(๋ชจ๋ false) |
models/*_moge_*/depth_info.json |
depth ๋ฒ์ยทMoGe ๋ชจ๋ธ ์ค์ |