Lecture 19 — Deep Learning cho thị giác

Chương D** · Lab 4: detect → visual servoing — perception gặp control

Lecture 19 — Deep Learning cho thị giác

Chương D · Lab 4: detect → visual servoing — perception gặp control


Khung 6 câu hỏi

# Câu hỏi Trả lời ngắn
1 Tại sao cần? Quy tắc tay (cạnh/threshold) yếu với đa dạng ngoại hình; cần nhận vật/người/mục tiêu/hàng chè.
2 So với cái khác? Vs flow cổ điển: có ngữ nghĩa. Vs end-to-end RL: (A) perception cố định + RL trên feature thường ổn định hơn lúc đầu.
3 Giải quyết gì & thế nào? Học \(f_\theta\): ảnh→bbox/mask; servoing: lệch bbox → lệnh yaw/tiến theo vòng kín.
4 Kết quả ra sao? Pipeline realtime perception–control; encoder / bbox làm obs cho RL.
5 Nên dùng khi nào? Tracking mục tiêu; có data/pretrained; companion đủ FPS.
6 Không nên khi nào? Mạng quá chậm làm vỡ vòng điều khiển; domain COCO ≠ góc camera drone mà không fine-tune.

🖼️ Hình nhanh: Detect rồi bám — lệch tâm khung → quay; bbox nhỏ → tiến.
```
ảnh t CNN/detector bbox
┌─────────┐ ──► ┌─★────┐ cx lệch phải
│ ★ │ │ mục │ → u_yaw > 0 (quay phải)
│ mục │ └──────┘ h < h_ref → u_fwd > 0
└─────────┘

★ Vòng kín: ảnh → detect → lỗi hình học → lệnh → ảnh mới
(chưa phải RL — nhưng là tổ tiên perception–control)
```

🇻🇳 Chuyện thật (sân A/B): Detector tìm khoảng trống luống chè (hoặc người / xe trong phố đặc) → bbox lệch tâm → yaw; bbox nhỏ → tiến — đó là visual servoing, chưa cần policy RL.
Domain COCO ≠ góc camera nghiêng trên drone: mAP cao trên laptop không cứu được nếu latency phá vòng điều khiển.
Chốt: perception có ngữ nghĩa + vòng kín hình học trước; RL chỉ cắm khi obs và tầng action đã trung thực. ../00C.

Hình minh họa (seminar-ready)

Hình gốc hoặc minh họa cho ebook — không cắt từ slide Princeton. Dùng Present: bật Slide · F toàn màn.

Detect → lỗi hình học → lệnh servoing.
Detect → lỗi hình học → lệnh servoing.HiếuTC · gốc
Perception phục vụ phủ nông nghiệp.
Perception phục vụ phủ nông nghiệp.Generated for ebook · seminar OK

0. Mục tiêu học

  1. Nắm pipeline học có giám sát: ảnh → nhãn/bbox, tối thiểu hóa loss bằng gradient.
  2. Đóng được vòng visual servoing đơn giản từ bounding box (tinh thần Lab 4).
  3. So sánh hai trường phái: (A) perception cố định + RL feature vs (B) end-to-end ảnh→action.
  4. Nhớ ràng buộc latency: mạng chậm = control hỏng, dù mAP cao trên COCO.

1. Trực giác

Dạy trẻ nhận mèo bằng hàng nghìn ảnh, không bằng công thức hình học của tai mèo.
Mạng \(f_\theta(\text{ảnh})\) học biểu diễn trung gian rồi cho ra lớp, bbox, mask, hoặc depth.

Với UAV: bạn không muốn viết tay “cạnh thế này là ống PVC dưới nắng chiều”. Bạn muốn detector nói “bbox ống ở đây”, rồi vòng điều khiển giữ ống lệch tâm trong ngưỡng an toàn — hoặc policy RL nhận vector bbox thay vì 84×84 pixel thô.

Bay trên đồi chè: detector/segmenter có thể trả “mặt hàng chè còn chưa phủ” → tín hiệu coverage ngữ nghĩa hơn chỉ đếm footprint hình học (Lec 17).


2. Cốt lõi + sơ đồ

2.1. Học có giám sát (nhắc ngắn)

\[ \theta^\star \approx \arg\min_\theta\ \mathbb{E}_{(x,y)}\big[\mathcal{L}(f_\theta(x), y)\big] \]

Tác vụ thường gặp trên robot: detection, semantic/instance segmentation, depth estimation, visual odometry / pose.

2.2. Vòng visual servoing từ bbox

        ┌──────────────────────────────────────────┐
        │                                          │
        ▼                                          │
   camera ảnh ──► [CNN detect] ──► bbox (cx,cy,w,h)│
                          │                        │
                          ├─ u_yaw  ∝ (cx − W/2)   │
                          └─ u_fwd  ∝ (h_ref − h)  │
                          │                        │
                          ▼                        │
                    low-level (PID/LQR) ──► drone ─┘

Ý: lệch ngang → quay; bbox nhỏ (mục tiêu xa / nhỏ trên ảnh) → tiến gần. Đây chưa phải RL — chỉ feedback trên đặc trưng thị giác. Nhưng nó dạy tích hợp perception–control theo thời gian thực.

2.3. Hai trường phái thiết kế RL

(A) Perception cố định + RL trên đặc trưng (B) End-to-end ảnh → action
Obs bbox / mask / embedding đóng băng RGB (stack)
Ưu Ít sample hơn, dễ debug, latency kiểm soát được Tiềm năng trần cao hơn
Nhược Đặc trưng có thể không đủ cho task Sim-to-real và sample cost nặng
Khuyến nghị lúc đầu ★ Bắt đầu đây Chỉ khi (A) đã rõ giới hạn
(A)  ảnh → [detector đóng băng] → z_feat → π_θ → a
(B)  ảnh ──────────────────────────► π_θ → a

3. Demo — servoing lỗi bbox → lệnh (không cần mạng thật)

"""
Demo Lec19: vòng visual servoing toy từ bbox.
Giả lập mục tiêu trên ảnh; điều khiển yaw/fwd tỉ lệ; xem lỗi giảm.
"""
import numpy as np

W, H = 160, 120
h_ref = 40.0
kp_yaw, kp_fwd = 0.02, 0.05

# Trạng thái "thế giới ảnh": tâm mục tiêu và chiều cao bbox
cx, cy, h = 40.0, 60.0, 20.0   # lệch trái, còn nhỏ (xa)

history = []
for t in range(25):
    err_x = cx - W / 2
    err_h = h_ref - h
    u_yaw = -kp_yaw * err_x     # feedback âm trên lỗi ảnh: kéo cx về W/2
    u_fwd = kp_fwd * err_h      # bbox nhỏ → tiến
    # Động học ảnh cực giản: lệnh yaw dịch cx; tiến làm h tăng
    cx = np.clip(cx + 8.0 * u_yaw, 0, W)
    h = np.clip(h + 6.0 * u_fwd, 5, H)
    history.append((err_x, err_h, u_yaw, u_fwd))

err_x_f, err_h_f, _, _ = history[-1]
print("err_x đầu → cuối:", round(history[0][0], 1), "→", round(err_x_f, 1))
print("err_h đầu → cuối:", round(history[0][1], 1), "→", round(err_h_f, 1))
print("u_yaw,u_fwd cuối:", round(history[-1][2], 3), round(history[-1][3], 3))
print("→ Lỗi hình học giảm: đó là vòng perception–control, chưa cần RL.")

🧪 Kỳ vọng demo:
- |err_x||err_h| giảm rõ sau ~25 bước.
- Lệnh cuối gần 0 khi bbox gần giữa và gần h_ref.
- Bài học: trước khi gắn RL, vòng servoing cổ điển đã phải ổn với latency giả lập.


4. Gắn RL–UAV

  • Khuyến nghị nghiên cứu: bắt đầu (A) — detector/segmenter cố định, RL trên vector ngắn (bbox, mask moments, goal).
  • Fine-tune detection trên domain drone (góc nhìn trên cao / nghiêng / đồi chè) khác hẳn ảnh COCO ngang tầm mắt.
  • Latency suy luận là một phần của “dynamics”: trễ 100 ms ≈ thêm cực trong vòng kín (nối Module 1).
  • Coverage ngữ nghĩa: segment “chè đã/ chưa phủ” có thể vào reward đa mục tiêu — cẩn thận domain gap (Lec 21).
Thành phần Câu hỏi paper-ready
Detector Pretrained COCO hay fine-tune drone view? FPS?
Servoing / RL Ai xuất \(u\): P-control hay \(\pi_\theta\)?
Fail Mất track → hover / RTL / exploratory yaw?

5. Ưu / nhược

✅ Nên ❌ Không nên
Detection + servoing Tracking mục tiêu rõ ràng Thay thế toàn bộ planner khi cần né phức tạp
(A) feature + RL Ít data, debug được Feature đóng băng thiếu tín hiệu task
(B) end-to-end Đã có baseline (A) rõ giới hạn Ngày đầu nghiên cứu / companion yếu
Nghĩa phủ / năng lượng Seg coverage → metric trung thực Chạy mạng nặng làm bay lâu hơn vì phải chậm / hover chờ suy luận

6. Lỗi thường gặp

  1. Dùng detector SOTA nặng trên companion yếu → trễ vòng lặp → control mất ổn định; lúc đó “model kém” không phải nguyên nhân chính.
  2. Fine-tune thiếu trên domain drone (góc trên cao, nghiêng, rung).
  3. Servoing chỉ P-gain không damping → dao động quanh mục tiêu (nối Lec 3–4).
  4. Claim “end-to-end RL” nhưng thực tế vẫn dùng bbox GT trong sim.
  5. Không có chiến lược khi mất detection (bbox biến mất 10 frame).

7. Checklist

  1. Visual servoing từ bbox hoạt động ra sao? Hai lệnh tỉ lệ với đại lượng nào?
  2. Trade-off chính giữa perception cố định và end-to-end?
  3. Latency suy luận ảnh hưởng control thế nào?
  4. Bạn chọn (A) hay (B) cho thí nghiệm đầu — viết 2 câu biện minh.
  5. Domain ảnh đồi chè khác COCO ở điểm nào quan trọng nhất?

Nhớ một câu: Detect cho ngữ nghĩa; servoing đóng vòng ảnh→lệnh — RL chỉ nên ngồi lên feature khi vòng này đã thở được realtime.

🔗 Sang bài sau mang theo: Mọi \(f_\theta\) đều cần tối ưu tham số → Lec 20 về SGD / learning rate (dụng cụ chung cho CNN và deep RL).


Trước: Lec18 — Optical Flow · Sau: Lec20 — SGD