№ 59
Pipeline tạo YOLO dataset synthetic-to-real cho robot object detection, sinh ảnh từ PyBullet sim, tăng realism bằng GenAI (SD1.5 / FLUX), và chứng minh cải thiện mAP trên ảnh camera thật so với sim-only baseline.
Cohort 2, Team 013, Gate 3 Phạm Hoàng Anh Kiệt (Leader), Nguyễn Trung Kiên (Evals & Training), Nguyễn Tiến Sỉ (Platform)
Train YOLO cho robot tabletop cần hàng trăm đến hàng nghìn ảnh nhiều góc, mỗi ảnh phải gán bounding box thủ công. Chi phí này là bottleneck đã được xác nhận trong học thuật: bộ YCB Video (Xiang et al., RSS 2018) có 133.827 frame vì thu thập và gán nhãn ảnh thật quá tốn kém.
Dùng simulator sinh ảnh nhanh và nhãn tự động, nhưng model học từ ảnh sim thuần lại thường fail trên camera thật do texture, ánh sáng, background và nhiễu cảm biến không khớp thực tế. Đây là "Reality Gap" (Tobin et al., IROS 2017): sự khác biệt giữa physics simulator và thế giới thực là rào cản chính khi dùng dữ liệu mô phỏng cho robot thật. Horváth et al. (2022) đo được mức sụt giảm hiệu năng rõ rệt khi test model synthetic trained trên ảnh thật.
Ngoài ra, mỗi lần đổi vật thể, background hoặc góc camera phải lặp lại toàn bộ chu trình chụp, gán nhãn, train, test.
Tóm lại: cần tạo nhanh dataset object detection cho vật thể tabletop đã biết, giảm gán nhãn thủ công, nhưng phải chứng minh được bằng số liệu là model chạy tốt hơn trên camera thật, chứ không chỉ tạo ảnh đẹp hơn.
Dùng generative AI (diffusion model) để đưa ảnh mô phỏng tiến gần ảnh thật, trong khi nhãn bounding box từ simulator được giữ nguyên.
Chuỗi xử lý: PyBullet Sim (CPU, nhãn tự động) sau đó GenAI Realism (SD1.5 hoặc Flux.2 Klein) sau đó xuất YOLO Dataset (ZIP, đã gán nhãn, qua QA).
Insight cốt lõi: diffusion model render lại texture theo hình dạng vật thể, không dịch chuyển vị trí vật thể, nên bbox lấy từ PyBullet vẫn đúng sau khi tăng realism.
Hai workflow realism:
Kiến trúc 4 tầng, triển khai trên HuggingFace Spaces:
| Tầng | Thành phần | Tham số |
|---|---|---|
| 1. Simulation | PyBullet: RGB, Depth, Canny, YOLO labels, CPU | 7.2 fps, 500 frames trong 69 giây |
| 2. Generative Realism | SD1.5 + ControlNet D+C + IP Adapter; Flux.2 Klein 4B, 8 steps | ZeroGPU RTX 6000 Ada 48GB |
| 3. Quality Gate | Blur (Laplacian), Exposure clipping | Auto reject |
| 4. Dataset Export |
| images/, labels/, metadata.json, preview_grid.jpg |
| ZIP push lên HF |
Nền tảng tham khảo: NVIDIA (Omniverse Isaac Sim + Edify, tháng 1/2026), nhóm RTSL của TU Munich (Sim2Real khả thi cho robot perception), và bộ chuẩn YCB (77 lớp, nhóm dùng 10 lớp).
Benchmark A, 10 lớp YCB, multi object (YOLOv26n, 240 ảnh test, seed 0, 50 epochs):
| Variant | Dữ liệu train | mAP50 | mAP50 95 | So với sim |
|---|---|---|---|---|
| lab_raw | 245 ảnh thật, nền lab trắng | 0.762 | 0.557 | tham chiếu |
| sim | 245 PyBullet randomized | 0.912 | 0.826 | baseline |
| realism SD1.5 | 245 sim + SD1.5 ControlNet | 0.949 | 0.850 | +3.7% |
Benchmark B, single object Power Drill (500 ảnh/variant, test 30 ảnh thật, seed 0, 50 epochs):
| Variant | mAP50 | Precision | Recall (TP) | So với sim |
|---|---|---|---|---|
| lab_raw | 0.018 | 0.018 | 0/31 | tham chiếu |
| sim | 0.023 | 0.023 | 6/31 | baseline |
| realism Flux.2 | 0.802 | 0.802 | 26/31 | +77.9 điểm |
Realism vượt sim rõ rệt ở cả hai benchmark. Baseline lab_raw sụt mạnh khi số vật thể tăng, đúng nút thắt mà pipeline synthetic giải quyết; sim là điểm khởi đầu cần thiết, realism là bước quyết định.
| Hạng mục | Giá trị |
|---|---|
| HF Pro | 9 USD/tháng, đủ cho toàn bộ pipeline |
| GPU | RTX 6000 Ada 48GB, khoảng 40 phút/ngày |
| Throughput SD1.5 | khoảng 1.600 frames/ngày |
| Throughput Flux.2 Klein | 200+ frames/ngày |
| HF Dataset public | miễn phí, minphak/Demo_C2_APP_013 |
SD1.5 + ControlNet giữ shape tốt nhưng có thể tạo sai texture (hallucination) với vật thể ngoài knowledge của model, ví dụ chữ trên cracker_box bị biến dạng. Flux.2 Klein mạnh hơn, không cần ControlNet, nhưng phụ thuộc hoàn toàn vào prompt viết riêng cho từng vật thể. Qwen Image Edit cần hơn 57GB VRAM (vượt RTX 6000 Ada 48GB) và Lighting LoRA làm mất shape, dẫn đến QA reject 80% output, hiện đã ngừng dùng.
Đã hoàn thành: 4 HF Spaces đang chạy, tích hợp SD1.5 và Flux.2 Klein, 10 lớp YCB và chế độ Random Scene, cải thiện mAP đã chứng minh qua hai benchmark, HF Dataset public kèm notebook tái lập được.
Ngắn hạn: multi seed benchmark để khẳng định ý nghĩa thống kê, tích hợp lại Qwen sau khi giải quyết VRAM, thêm rate limiting cho API, tối ưu prompt Flux để giảm phụ thuộc thủ công.
Quy mô lớn: chuyển sang RunPod serverless để scale throughput, mở rộng vật thể ngoài YCB, tích hợp với robot arm thật để đóng vòng sim to real, hướng tới segmentation mask, 6D pose và ROS integration.
Demo trực tiếp: HF Web App tại minphak-c2-app-013-ai20k-170-sim-only.hf.space, HF Dataset tại huggingface.co/datasets/minphak/Demo_C2-APP-013, Dev App full control tại c2-app-013.onrender.com