Ghi chú · 2026-09
Mười ảnh đạt chuẩn đủ cho mô hình, chưa đủ cho ngưỡng
Một nghiên cứu few-shot cho kiểm tra vải bằng camera line-scan: 8 seed, 160 điểm vận hành, và vì sao không điểm nào đạt.
Câu hỏi
Bộ phát hiện đang triển khai dựng memory bank từ 10 ảnh đạt chuẩn và đặt ngưỡng trên 50 ảnh khác. Trên tập test 133 ảnh (26 lỗi, 107 đạt chuẩn), nó bắt được 24/26 lỗi và báo nhầm 3 ảnh.
Việc thiết lập sản phẩm mới sẽ dễ hơn nhiều nếu chỉ cần tổng cộng 10 hoặc 15 ảnh đạt chuẩn cho cả bank lẫn ngưỡng. Bài này ghi lại những gì xảy ra khi mình thử.
Quy trình, khóa trước khi chấm
- Dữ liệu: cuộn Rollo7A trong bộ dữ liệu công khai RAW-FABRID (CC BY 4.0), cùng 133 ảnh test.
- Mô hình: MobileNetV3 pretrained trên ImageNet, không fine-tune. Đặc trưng từ blocks 4 và 6, tile 448 px, mỗi ảnh đóng góp 512 patch vào bank.
- Ngân sách: 10 hoặc 15 ảnh đạt chuẩn. Tám seed (39–46) quyết định chọn ảnh nào. Bộ 10 ảnh là phần đầu của bộ 15 ảnh, nên hai ngân sách lồng nhau, không độc lập.
- Ngưỡng: leave-one-out trên chính các ảnh đạt chuẩn đó (mỗi ảnh được chấm bằng bank không chứa nó), rồi lấy median + 3 × 1,4826 × MAD. Không dùng ảnh lỗi để fit bất cứ thứ gì.
- Mục tiêu: bắt ít nhất 25/26 lỗi và báo nhầm tối đa 3/107.
- 10 biến thể chấm điểm hoặc hiệu chỉnh × 2 ngân sách × 8 seed = 160 điểm vận hành. Chúng dùng chung một cuộn và một tập test, nên không phải 160 lần kiểm chứng độc lập.
Kết quả
| Biến thể | TP, 10 ảnh | FP, 10 ảnh | TP, 15 ảnh | FP, 15 ảnh |
|---|---|---|---|---|
| Mốc: khoảng cách tới lân cận gần nhất | 25–25 | 5–13 | 25–25 | 4–11 |
| Trung bình 3 lân cận gần nhất | 24–25 | 4–12 | 23–25 | 4–11 |
| Trọng số lại theo lân cận (kiểu PatchCore) | 25–25 | 5–13 | 25–25 | 4–11 |
| Khoảng cách ÷ bán kính cục bộ | 25–25 | 6–19 | 21–25 | 6–12 |
| Khoảng cách − bán kính cục bộ | 25–25 | 6–45 | 24–25 | 6–34 |
| Ngữ cảnh viền 32 px | 21–25 | 4–9 | 23–25 | 6–8 |
| Ngữ cảnh viền 64 px | 21–25 | 5–9 | 22–25 | 6–10 |
| Ngưỡng cross-fit, MAD | 25–25 | 5–22 | 24–25 | 4–11 |
| Ngưỡng cross-fit, q95 × 1,10 | 0–24 | 0–5 | 4–24 | 0–5 |
| Ngưỡng cross-fit, max × 1,10 | 0–24 | 0–5 | 1–23 | 0–5 |
Không điểm vận hành nào đạt. Những quy tắc ít báo nhầm có được điều đó nhờ đẩy ngưỡng lên cao tới mức bỏ sót phần lớn lỗi, chứ không phải nhờ phân biệt ảnh tốt và ảnh lỗi tốt hơn.
Lỗi ở ngưỡng hay ở điểm số?
Để kiểm tra, mình cố ý "gian lận": chọn ngưỡng bằng nhãn của tập test. Ngay cả vậy, muốn giữ 25 lỗi thì mốc vẫn phải chịu ít nhất 4–5 báo nhầm, các điểm số khác 4–7. Vậy vấn đề nằm ở cách điểm số xếp thứ tự ảnh, không chỉ ở chỗ đặt ngưỡng.
Bốn ảnh đạt chuẩn (145, 179, 183 và 218) bị báo nhầm ở cả 8 seed với cả hai ngân sách. Chúng có cấu trúc cục bộ và các dải texture ngang mà đặc trưng coi như lỗi. Mình giữ nguyên nhãn: trông giống lỗi không phải bằng chứng nhãn sai.
Những hướng khác cũng không đạt
- Chọn ảnh đạt chuẩn trải đều cả cuộn thay vì lấy ở đầu cuộn: trung vị báo nhầm 8 so với 8,5 trên tập holdout mới 83 ảnh, và không bank nào trong 32 bank đạt mục tiêu ≤ 2/83.
- Trừ nền theo từng hàng khỏi điểm số: vẫn bắt 25 lỗi, vẫn báo nhầm 4–13.
- Giữ toàn bộ 11.760 patch mỗi ảnh, bank lớn gấp 23 lần: báo nhầm đổi −3, +1 và 0 ở ba seed, trong khi độ trễ P95 tăng từ khoảng 30 ms lên 272 ms trên RTX A4000.
- Ensemble 9 bank con, và so mỗi patch với vùng xa trong chính ảnh đó: không điểm nào đạt.
Nút thắt nằm ở ngưỡng
Chạy chính pipeline đang triển khai, chỉ dùng 10 ảnh của bank để hiệu chỉnh, cho thấy lý do. Trong leave-one-out, chín trên mười ảnh đạt chuẩn có điểm từ 11 đến 22. Một ảnh đạt 38,2. Quy tắc lấy max đi theo đúng ảnh đó: bắt 7/26 lỗi, 0 báo nhầm. Lấy điểm cao thứ hai làm ngưỡng thì được 22/26 với 3/107, gần nhưng vẫn dưới mức 24/26 đang triển khai.
Thêm 5 ảnh (tổng 15) không đổi một quyết định nào ở mức ảnh. Augment ảnh đạt chuẩn (độ sáng, gamma, dải theo hàng, dịch chuyển) chỉ nâng điểm 1,05–1,25 lần nhưng giữ nguyên thứ tự, nên không thay được ảnh đạt chuẩn độc lập.
Mười ảnh đạt chuẩn đủ để dựng bank. Chúng chưa đủ để đặt ngưỡng.
Một hướng đáng thử, kèm lưu ý
Một thử nghiệm sau đó thêm nhánh DINOv2 bên cạnh PatchCore, và chỉ báo lỗi khi cả hai nhánh cùng vượt k lần trung vị điểm leave-one-out của chính nhánh đó. Với mục tiêu nới lỏng đặt cho sản phẩm (ít nhất 22/26, tối đa 5/107), cách này đạt ở 17/17 bộ ngẫu nhiên gồm 5–20 ảnh đạt chuẩn.
Nhưng hai hệ số k được chọn từ lưới 36 ô trên chính tập test đó. Khi chọn trên một nửa tập test và kiểm tra trên nửa còn lại (300 lần chia ngẫu nhiên), tỉ lệ đạt chỉ còn 42%. Đây là hướng cần thử trên cuộn mới, chưa phải kết quả.
Điều mình rút ra
- Với 10 ảnh đạt chuẩn, điểm số của pipeline đang triển khai vẫn xếp thứ tự ảnh với AUROC 0,95, vậy mà không quy tắc ngưỡng khóa trước nào đạt. Với dây chuyền sản xuất, hãy báo số đếm tại một ngưỡng cố định, không chỉ AUROC.
- 3/107 không chứng minh tỉ lệ báo nhầm dưới 3%. Ngay cả 0/107 cũng chỉ cho cận trên khoảng 2,8% (một phía, 95%). Muốn chắc cần hàng trăm đến hàng nghìn ảnh đạt chuẩn độc lập.
- Khóa quy trình trước khi xem kết quả, và dừng tinh chỉnh trên một tập test đã xem quá nhiều lần.
- Ghi lại cả kết quả âm để lần thử sau không lặp lại ngõ cụt.
Giới hạn
Toàn bộ là công việc phát triển trên một cuộn và một tập test đã dùng lại nhiều lần. Nó không cho thấy few-shot nói chung thất bại, chỉ cho thấy các cấu hình này chưa đạt trên dữ liệu này.