robot-kitchen-nadir-yolo11s
조리 로봇 안전 시뮬레이터의 직교 나디르(orthographic nadir, 천장 정수직) 카메라 프레임에서
사람·화재·연기·로봇·주전자·설비를 검출하는 YOLO11s 모델.
whatslung/robot-kitchen-safety-sim의
검출 → 추적 → 궤적 → 예측 → 안전판정 → 로봇 기동 사슬에서 첫 단계를 담당한다.
EN summary — YOLO11s fine-tuned only on synthetic frames rendered by a Babylon.js cooking-robot safety simulator, viewed through an orthographic nadir (straight-down, zero-perspective) camera. Strong in-domain (person recall 0.871) but it does not transfer to real footage (person recall 0.048 on a real top-down test set). Intended for simulator-based research on trajectory prediction and speed-and-separation monitoring — not for deployment on real CCTV.
⚠️ 먼저 읽을 것 — 실사에는 쓸 수 없다
이 모델은 시뮬레이터 합성 프레임만으로 학습했다. 실사 top-down 영상에서는 사실상 작동하지 않는다.
| 평가 대상 | person recall |
|---|---|
| 시뮬 합성 val (같은 도메인) | 0.871 |
실사 top-down test 137장 (Roboflow overhead-person-szky0 v3) | 0.048 |
실사가 필요하면 이 모델이 아니라 RF-DETR(DINOv2 자기지도 백본) 계열을 쓰거나,
RF-DETR을 교사로 한 지식 증류 모델을 쓸 것. 같은 조건에서 RF-DETR의 sim→real recall은 0.411이었고,
증류로 YOLO 학생을 0.048 → 0.491까지 끌어올렸다.
측정 근거: docs/chanwoo/detection-eval.md §2, §5-6, §5-7.
클래스 (순서 고정 — 바꾸면 안 됨)
0 person 1 fire 2 smoke 3 robot 4 kettle 5 equipment
성능 (시뮬 합성 val 40장, in-domain)
| 클래스 | P | R | mAP50 | mAP50-95 |
|---|---|---|---|---|
| person | 0.872 | 0.871 | 0.874 | 0.512 |
| fire | 1.000 | 0.596 | 0.906 | 0.372 |
| smoke | 0.930 | 0.950 | 0.936 | 0.759 |
| robot | 0.849 | 1.000 | 0.995 | 0.735 |
| kettle | 0.984 | 1.000 | 0.995 | 0.885 |
| equipment | 0.827 | 0.842 | 0.878 | 0.665 |
| 전체 | 0.910 | 0.876 | 0.931 | 0.655 |
person은 이 프로젝트의 make-or-break 지표다. stock YOLO11s는 같은 프레임에서
precision 0.175 / recall 0.374에 그쳤고, 설비를 사람으로 자주 오탐했다.
속도 — params 9.4M, RTX 5070 6.3 ms, CPU 29 ms.
학습 조건
| 항목 | 값 |
|---|---|
| 베이스 | yolo11s.pt (COCO 사전학습), ultralytics 8.4.121 |
| 데이터 | 시뮬 합성 200장 (train 160 / val 40), person 인스턴스 316개 |
| 카메라 | 단일 직교 나디르 (CAM11 orthotop) — 원근 0, 프레임 전역 107.9 px/m 균일 |
| 하이퍼파라미터 | imgsz 640, epochs 100 (54ep 조기종료), patience 20, seed 42, batch auto |
| torch | 2.11.0+cu128 (RTX 5070, sm_120) |
중요한 전제: 직교 투영이라 사람 크기가 프레임 어디서나 같다. 일반 원근 CCTV처럼 가운데는 크고 구석은 작은 영상에는 이 가정이 깨진다.
파일
| 파일 | 크기 | 용도 |
|---|---|---|
best.pt | 19 MB | ultralytics / PyTorch 추론 |
best.onnx | 37 MB | ONNX Runtime (opset 12 — 브라우저 ort-web 호환) |
사용법
from huggingface_hub import hf_hub_download
from ultralytics import YOLO
path = hf_hub_download("chanubc/robot-kitchen-nadir-yolo11s", "best.pt")
model = YOLO(path)
r = model.predict("frame.png", conf=0.25)[0]
for b in r.boxes:
print(r.names[int(b.cls)], float(b.conf))
프로젝트의 검출 서버는 가중치가 없으면 이 저장소에서 자동으로 내려받는다.
uv run python backend/detect_server.py --port 8001
conf 권고값은 0.25다. 라이브에서 관측된 사람 confidence가 0.25~0.70 범위였고,
ByteTrack을 붙일 때는 track_activation_threshold도 함께 0.35 정도로 낮춰야 트랙이 생긴다
(라이브러리 기본값 0.7은 이 모델의 confidence보다 높아 트랙이 하나도 안 만들어진다).
라이선스
AGPL-3.0. 베이스인 Ultralytics YOLO11이 AGPL-3.0이고, Ultralytics는 자사 코드로 학습한 가중치도 그 범위로 본다. 학습·추론 코드는 위 GitHub 저장소에 공개돼 있다. 상용에서 소스 공개 의무를 피해야 한다면 Apache-2.0인 RF-DETR 쪽을 검토할 것.
학습 데이터는 전부 합성이며 실제 인물이 담긴 영상은 사용하지 않았다.