Bài tập: thiết kế chiến lược AI cho bài toán lỗi bề mặt nhôm anod
Chọn cách tiếp cận (phân đoạn, anomaly, rule-based), lập kế hoạch dữ liệu và gán nhãn, chia tập theo lô, đặt tiêu chí nghiệm thu escape, overkill, cycle time.
Học xong bài này, bạn sẽ
- Chọn cách tiếp cận và kiến trúc
- Lập kế hoạch dữ liệu và gán nhãn
- Đặt tiêu chí nghiệm thu
Nên học trước: Chọn ngưỡng và đánh giá theo escape, overkill, cycle time
Nội dung bài viết
Bài tập tổng kết chặng 11 "AI Vision". Ở các bài trước, bạn đã học từng mảnh: "Rule-based hay Deep Learning?", "Tự xây dataset ảnh công nghiệp", "Công cụ gán nhãn dữ liệu ảnh miễn phí", "Dữ liệu tổng hợp (synthetic data) khi thiếu ảnh lỗi" và "Chọn ngưỡng và đánh giá theo escape, overkill, cycle time". Bây giờ bạn ghép chúng thành một tài liệu chiến lược AI cho một bài toán lỗi bề mặt thật, loại tài liệu mà trưởng nhóm vision viết trước khi chụp tấm ảnh đầu tiên và trước khi hứa bất cứ điều gì với khách hàng. Không có mô hình nào được huấn luyện trong bài này; thứ bạn nộp là các quyết định có lý lẽ và con số. Chặng 12 sau đó sẽ dạy chi tiết các kỹ thuật bạn chọn ở đây (YOLO26, phân đoạn, U-Net, anomaly detection).
1. Yêu cầu
Thông tin đầu vào (khách hàng đã cung cấp)
| Hạng mục | Thông tin |
|---|---|
| Sản phẩm | Vỏ nhôm phay CNC, anod hóa màu đen mờ, kích thước 120 × 80 × 15 mm, cho thiết bị điện tử cầm tay. Mặt trên (vùng A) là mặt người dùng nhìn thấy; 4 mặt bên (vùng B) ít quan trọng hơn. Có 4 lỗ ren M2 ở mặt dưới |
| Sản lượng | 2 ca × 8 giờ, 600 chi tiết/giờ, khoảng 9.600 chi tiết/ngày. Robot đặt chi tiết vào trạm, mỗi chi tiết 6 giây; trạm phải có kết quả trong 1,5 giây kể từ lúc chụp xong |
| Tỉ lệ lỗi hiện tại (QC thống kê 3 tháng) | Xước 0,20%; móp, va đập 0,08%; loang màu, đốm màu 0,08%; hở nhôm (lớp anod bị bong, lộ nhôm sáng) 0,03%; thiếu ren 0,01% |
| Tiêu chí lỗi (bản vẽ của khách hàng) | Vùng A: xước dài ≥ 2,0 mm là NG; móp đường kính ≥ 0,5 mm là NG; loang màu diện tích ≥ 1,0 mm² là NG; hở nhôm mọi kích thước ≥ 0,2 mm là NG (lỗi nghiêm trọng: gây ăn mòn). Vùng B: giới hạn gấp đôi vùng A. Bụi, vân tay: không phải lỗi (lau được) |
| Dữ liệu sẵn có | Chưa có ảnh nào. QC đồng ý giữ lại chi tiết NG trong tủ cách ly 3 tháng (khoảng 70% số NG giữ được, phần còn lại đã bị đưa đi gia công lại trước khi kịp chụp). Ảnh OK: không giới hạn |
| Mục tiêu khách hàng | Thay 4 QC kiểm bằng mắt (2 người/ca). "Không để lọt hở nhôm". Lọt tổng ≤ 200 ppm. Loại nhầm không quá 2% (hàng bị loại sẽ có 1 người kiểm lại mỗi ca) |
| Phần cứng dự kiến | PC công nghiệp có GPU tầm trung; camera màu 12 MP cho mặt trên; chiếu sáng chưa chọn |
| Thời hạn | Khách hàng muốn chạy thử trong 2 tháng, nghiệm thu trong 5 tháng |
Nhiệm vụ
| # | Việc phải làm | Đầu ra |
|---|---|---|
| 1 | Phân tích từng loại lỗi: đo được bằng rule-based không, cần biết vị trí và kích thước không, có đủ ảnh không | Bảng phân tích lỗi |
| 2 | So sánh các cách tiếp cận (phân loại, phát hiện, phân đoạn, anomaly detection, rule-based, kết hợp) và chọn kiến trúc pipeline | Bảng so sánh + sơ đồ pipeline |
| 3 | Lập kế hoạch dữ liệu: số ảnh mỗi lớp, lịch thu thập, giờ công gán nhãn, hướng dẫn gán nhãn, chia tập không rò rỉ | Kế hoạch dữ liệu + script |
| 4 | Thiết kế golden set và viết tiêu chí nghiệm thu đo được (escape, overkill, cycle time p99/max) | Bảng tiêu chí nghiệm thu |
| 5 | Lộ trình theo giai đoạn phù hợp thời hạn khách hàng; bảng rủi ro và biện pháp | Lộ trình + bảng rủi ro |
| 6 | Liệt kê những điều phải làm rõ với khách hàng trước khi ký | Danh sách câu hỏi |
2. Kiến thức sử dụng
- Rule-based hay Deep Learning?: chọn công cụ theo loại lỗi, hệ thống hybrid.
- Tự xây dataset ảnh công nghiệp: kế hoạch thu thập, metadata, phiên bản, chia theo lô.
- Công cụ gán nhãn dữ liệu ảnh miễn phí: đa giác hay khung bao, hướng dẫn gán nhãn, kiểm chéo.
- Dữ liệu tổng hợp (synthetic data) khi thiếu ảnh lỗi: cắt dán lỗi, chỉ đánh giá trên ảnh thật.
- Chọn ngưỡng và đánh giá theo escape, overkill, cycle time: ngưỡng theo ràng buộc, cận trên tin cậy, golden set, đo p99.
- Chặng 5: Tiêu chí OK/NG, escape và overkill (tiêu chí đo được, vùng xám), Đặc tả kỹ thuật và nghiệm thu FAT/SAT. Chặng 6: chọn camera, độ phân giải, chiếu sáng. Chặng 10: Dataset, DataLoader và augmentation (augmentation an toàn cho ảnh công nghiệp).
3. Gợi ý thiết kế
- Bắt đầu từ tiêu chí, không từ mô hình. Tiêu chí của khách hàng tính bằng mm và mm², theo vùng. Mô hình phân loại OK/NG không trả lời được "vết xước dài bao nhiêu mm"; hãy hỏi mỗi loại lỗi cần đầu ra gì (có/không, vị trí, kích thước).
- Tính độ phân giải trước: lỗi nhỏ nhất 0,2 mm cần ít nhất 3–5 pixel (chặng 6). Ảnh 12 MP rất lớn so với đầu vào mô hình: tính số ô (tile) phải chạy và kiểm tra cycle time.
- Tính thời gian thu thập: lỗi hiếm nhất quyết định lịch. So với thời hạn 2 tháng chạy thử, phương án nào triển khai được khi chưa có đủ ảnh lỗi?
- Phân biệt "chưa từng thấy" và "đã biết": anomaly detection bắt được bất thường mới nhưng không đo kích thước theo tiêu chí; mô hình có giám sát đo được nhưng chỉ biết lỗi đã học.
- Đừng quên cái rule-based làm tốt hơn: định vị chi tiết, kiểm tra ren, quy đổi pixel sang mm, áp tiêu chí theo vùng.
- Mọi con số nghiệm thu phải kèm số mẫu và hiểu giới hạn của nó (quy tắc 3/n).
Script khởi đầu để tính lịch thu thập, giờ công gán nhãn và số ô ảnh. Hãy thay các giả định bằng con số của bạn:
import math
SP_NGAY = 9_600 # 2 ca × 8 h × 600 chi tiết/h
GIU_LAI = 0.7 # tỉ lệ chi tiết NG QC giữ lại được để chụp
TI_LE = {"xuoc": 0.0020, "lom": 0.0008, "loang_mau": 0.0008, "ho_nhom": 0.0003} # tỉ lệ lỗi / sản phẩm
MUC_TIEU = {"xuoc": 300, "lom": 200, "loang_mau": 200, "ho_nhom": 150} # chi tiết NG cần cho mô hình có giám sát
print("loại lỗi | NG/ngày | giữ được/ngày | số ngày sản xuất để đủ mục tiêu")
for loai, p in TI_LE.items():
giu = SP_NGAY * p * GIU_LAI
print(f"{loai:10s} | {SP_NGAY * p:7.1f} | {giu:13.1f} | {math.ceil(MUC_TIEU[loai] / giu):3d} ngày")
# Giờ công gán nhãn (giả định, hãy đo lại khi gán thử 50 ảnh đầu)
n_ng, n_ok = sum(MUC_TIEU.values()), 3000
VET_MOI_ANH = 1.3 # số vết lỗi trung bình mỗi ảnh NG
GIAY_DA_GIAC = 75 # vẽ một đa giác vết lỗi
GIAY_OK = 3 # xác nhận nhanh một ảnh OK (xem lưới ảnh nhỏ)
KIEM_CHEO, GIAY_KIEM = 0.3, 25 # 30% ảnh được người thứ hai kiểm, 25 s/ảnh
giay = n_ng * VET_MOI_ANH * GIAY_DA_GIAC + n_ok * GIAY_OK + (n_ng + n_ok) * KIEM_CHEO * GIAY_KIEM
print(f"gán nhãn {n_ng} ảnh NG + {n_ok} ảnh OK + kiểm chéo: {giay / 3600:.0f} giờ công")
# Số ô (tile) cho ảnh 12 MP khi mô hình nhận ô 512×512, chồng lấn 64 px
W, H, O, CL = 4000, 3000, 512, 64
nx, ny = math.ceil((W - CL) / (O - CL)), math.ceil((H - CL) / (O - CL))
print(f"ảnh {W}×{H}: {nx}×{ny} = {nx * ny} ô mỗi ảnh")
loại lỗi | NG/ngày | giữ được/ngày | số ngày sản xuất để đủ mục tiêu
xuoc | 19.2 | 13.4 | 23 ngày
lom | 7.7 | 5.4 | 38 ngày
loang_mau | 7.7 | 5.4 | 38 ngày
ho_nhom | 2.9 | 2.0 | 75 ngày
gán nhãn 850 ảnh NG + 3000 ảnh OK + kiểm chéo: 34 giờ công
ảnh 4000×3000: 9×7 = 63 ô mỗi ảnh
4. Lời giải mẫu
Hãy tự làm trước khi mở lời giải. Lời giải dưới đây là một phương án hợp lý, không phải phương án duy nhất; điều quan trọng là mỗi quyết định đều có lý do và con số.
Xem lời giải mẫu: tài liệu chiến lược AI đầy đủ
4.1. Các con số thiết kế
- Độ phân giải: mặt trên 120 × 80 mm, chừa biên định vị → trường nhìn khoảng 130 × 97 mm trên cảm biến 4000 × 3000 px: khoảng 0,033 mm/px. Lỗi nhỏ nhất (hở nhôm 0,2 mm) phủ khoảng 6 px, xước 2,0 mm dài khoảng 60 px: đủ cho cả phát hiện lẫn đo.
- Số ô: 9 × 7 = 63 ô 512 × 512 mỗi ảnh. Không được thu nhỏ cả ảnh về 640 px: lỗi 6 px sẽ còn chưa đến 1 px.
- Ngân sách thời gian: 1,5 s cho tất cả ảnh của một chi tiết. Nếu dùng 2 ảnh chiếu sáng (mục 4.3) thì 126 ô; với mô hình phân đoạn nhỏ chạy batch trên GPU tầm trung, mục tiêu khoảng 3–5 ms/ô là khả thi nhưng phải đo trên phần cứng đích trong tuần đầu (rủi ro R3).
- Lịch thu thập (từ script): xước đủ 300 chi tiết sau khoảng 23 ngày sản xuất, móp và loang màu khoảng 38 ngày, hở nhôm cần khoảng 75 ngày. Thời hạn chạy thử 2 tháng nên mô hình có giám sát cho hở nhôm không thể sẵn sàng đúng hạn chỉ bằng dữ liệu thật.
- Gán nhãn: khoảng 34 giờ công cho bộ dữ liệu đầu tiên; chia cho 2 người trong 3 tuần, song song với thu thập.
4.2. Phân tích từng loại lỗi
| Lỗi | Đầu ra cần | Rule-based? | Dữ liệu | Kết luận |
|---|---|---|---|---|
| Xước | Vị trí, chiều dài (mm), vùng A/B | Khó: nền anod có vân phay, phản xạ thay đổi | 23 ngày sản xuất (~4 tuần) | Phân đoạn có giám sát, đo chiều dài từ mặt nạ |
| Móp | Vị trí, đường kính | Khó với ánh sáng thường; dễ thấy hơn với đèn góc thấp | 38 ngày sản xuất (~6–8 tuần) | Phân đoạn có giám sát |
| Loang màu | Diện tích (mm²) | Có thể một phần (so màu với vùng lân cận trong Lab), nhưng ranh giới mờ | 38 ngày sản xuất (~6–8 tuần) | Phân đoạn có giám sát; rule-based màu làm kênh phụ |
| Hở nhôm | Có/không, vị trí (mọi kích thước ≥ 0,2 mm là NG) | Một phần: nhôm lộ ra rất sáng so với anod đen dưới đèn dome | 75 ngày sản xuất (11–15 tuần tùy số ngày chạy mỗi tuần), quá thời hạn | Anomaly detection + luật độ sáng; phân đoạn khi đủ dữ liệu |
| Thiếu ren | Có/không cho 4 lỗ | Có: lỗ ở vị trí cố định, ren tạo bóng đổ đặc trưng | Không cần nhiều | Rule-based (camera mặt dưới hoặc trạm khác) |
| Bụi, vân tay | Phải được coi là OK | Không | Nhiều, dễ thu | Lớp "OK khó" trong dữ liệu, golden set; nguồn overkill chính |
4.3. So sánh cách tiếp cận và lựa chọn
| Cách tiếp cận | Ưu | Nhược với bài toán này | Quyết định |
|---|---|---|---|
| Phân loại ảnh OK/NG | Gán nhãn rẻ nhất | Không cho kích thước và vùng nên không áp được tiêu chí mm; 63 ô/ảnh mà lỗi chỉ ở 1 ô; khó giải thích cho QC | Không dùng làm chính |
| Phát hiện (khung bao) | Nhanh, công cụ sẵn (YOLO26) | Khung bao của vết xước chéo sai lệch diện tích lớn; không đo chiều dài, diện tích đúng | Không dùng |
| Phân đoạn có giám sát (instance segmentation, ví dụ YOLO26-seg; hoặc U-Net) | Cho mặt nạ: đo chiều dài, diện tích, vùng theo mm | Cần đa giác, nhiều ảnh mỗi loại; chỉ biết lỗi đã học | Dùng cho xước, móp, loang màu (giai đoạn 2) |
| Anomaly detection (PatchCore) | Chỉ cần ảnh OK, triển khai sớm; bắt được lỗi lạ | Không phân loại loại lỗi, không đo theo tiêu chí; nhạy với thay đổi ánh sáng, vị trí; dễ overkill với bụi | Dùng từ giai đoạn 1 làm "lưới an toàn", nhất là cho hở nhôm |
| Rule-based | Chính xác, giải thích được, không cần dữ liệu lỗi | Khó với lỗi bề mặt trên nền có vân | Dùng cho định vị, ren, quy đổi mm, luật vùng, luật độ sáng hở nhôm |
Kiến trúc chọn: hybrid ba lớp.
Chụp 2 ảnh: đèn dome (loang màu, hở nhôm) + đèn vòng góc thấp (xước, móp)
│
├─ [Rule-based] định vị chi tiết (shape matching), căn ROI, tạo mặt nạ vùng A / vùng B
├─ [Rule-based] kiểm tra 4 lỗ ren; luật độ sáng: điểm sáng bất thường trên anod đen → nghi hở nhôm
├─ [AI] cắt 63 ô/ảnh → mô hình phân đoạn (xước, móp, loang màu) → mặt nạ lỗi
├─ [AI] anomaly detection (PatchCore) trên cùng các ô → bản đồ bất thường
│
└─ [Quyết định] quy đổi mặt nạ sang mm, mm² theo vùng → so tiêu chí bản vẽ
• vượt tiêu chí → NG (kèm loại lỗi, kích thước, vị trí)
• anomaly cao nhưng không có lỗi đã biết, hoặc lỗi sát giới hạn → VÙNG XÁM, người kiểm lại
• thiếu ảnh, định vị thất bại, quá hạn chót → NG (an toàn)
→ PLC: OK / NG / KIỂM LẠI; lưu ảnh, mặt nạ, điểm số, thời gian
Lý do: mỗi thành phần làm việc nó giỏi nhất; mô hình AI chỉ phải học trên ảnh đã căn chỉnh; quyết định cuối nằm ở lớp luật nên tiêu chí của khách hàng được áp dụng đúng nguyên văn, dễ giải thích và dễ sửa khi tiêu chí đổi. Vùng xám tận dụng người kiểm lại khách hàng đã có.
4.4. Kế hoạch dữ liệu
| Hạng mục | Kế hoạch |
|---|---|
| Số lượng mục tiêu (phiên bản dữ liệu v1) | Xước 300, móp 200, loang màu 200 chi tiết NG; hở nhôm: mọi chi tiết thu được đến tuần 8 (ước tính 2 chi tiết/ngày, khoảng 80), đủ 150 ở data_v2; 3.000 chi tiết OK trong đó ít nhất 300 "OK khó" (bụi, vân tay, vết gia công cho phép, sắc độ anod khác lô) |
| Thu thập | Tuần 1–2: lắp trạm thử cạnh QC, chụp 100% chi tiết đi qua (ảnh OK miễn phí). QC đánh dấu mã chi tiết NG vào tủ cách ly; mỗi tuần chụp lại toàn bộ tủ. Ghi metadata: mã chi tiết, lô anod, ngày, ca, máy CNC |
| Số ảnh mỗi chi tiết | Một chi tiết chụp tối đa 3 lần (đặt lại, xoay 180°) để tăng đa dạng; luôn coi các ảnh này là một nhóm khi chia tập |
| Dữ liệu tổng hợp | Cắt dán vết hở nhôm thật lên ảnh OK để tăng số mẫu huấn luyện cho hở nhôm ở giai đoạn 2; không bao giờ dùng ảnh tổng hợp trong val, test, golden |
| Gán nhãn | Đa giác trong CVAT (tự cài trên máy chủ nội bộ vì ảnh sản phẩm là thông tin mật); 2 người; 100 ảnh đầu gán chung và họp thống nhất; kiểm chéo 30%; đo mức độ thống nhất (IoU mặt nạ giữa hai người) |
| Hướng dẫn gán nhãn (trích) | (1) Đa giác bao sát vết, không bao bóng phản xạ quanh vết. (2) Xước đứt đoạn cách nhau < 0,5 mm là một vết. (3) Bụi, vân tay: không gán (là OK) nhưng gắn thẻ ảnh "OK khó". (4) Không chắc là lỗi: gắn thẻ "cần QA", không tự quyết. (5) Lỗi ở vùng chuyển A/B: vẽ toàn bộ vết, phần mềm tự tách theo mặt nạ vùng |
| Chia tập | Theo lô anod (các chi tiết cùng lô có cùng sắc độ, cùng kiểu loang màu) và theo thời gian: các lô cũ nhất → train, lô giữa → val, lô mới nhất → test. Kiểm tra mỗi loại lỗi có mặt ở cả ba tập và không lô nào nằm ở hai tập (script bên dưới) |
| Phiên bản | data_v1 đóng băng cuối tuần 8; mọi mô hình ghi rõ phiên bản dữ liệu; thêm dữ liệu thành data_v2… |
Script chia tập theo lô và theo thời gian, kiểm tra rò rỉ và độ phủ loại lỗi (dữ liệu metadata được mô phỏng):
import numpy as np
rng = np.random.default_rng(0)
LOAI = ["OK", "xuoc", "lom", "loang_mau", "ho_nhom"]
XAC_SUAT = [0.82, 0.07, 0.04, 0.04, 0.03] # tỉ lệ trong bộ ảnh đã thu (NG đã được làm giàu)
# metadata mô phỏng: 60 lô anod theo thứ tự thời gian, mỗi lô 40–90 ảnh
anh = []
for lo in range(60):
for k in range(int(rng.integers(40, 90))):
anh.append({"lo": f"L{lo:03d}", "chi_tiet": f"L{lo:03d}-{k // 2:03d}", # 2 ảnh / chi tiết
"loai": str(rng.choice(LOAI, p=XAC_SUAT))})
cac_lo = sorted({a["lo"] for a in anh}) # tên lô tăng theo thời gian
# chia theo thời gian ở cấp LÔ: 70% lô cũ nhất → train, 15% → val, 15% mới nhất → test
n = len(cac_lo)
tap_cua_lo = {lo: ("train" if i < 0.70 * n else "val" if i < 0.85 * n else "test")
for i, lo in enumerate(cac_lo)}
for a in anh:
a["tap"] = tap_cua_lo[a["lo"]]
# kiểm tra 1: không lô nào, không chi tiết nào nằm ở hai tập
for khoa in ("lo", "chi_tiet"):
tap_theo = {}
for a in anh:
tap_theo.setdefault(a[khoa], set()).add(a["tap"])
ro_ri = [k for k, v in tap_theo.items() if len(v) > 1]
print(f"{khoa:8s} nằm ở nhiều tập: {len(ro_ri)}")
# kiểm tra 2: số ảnh mỗi loại trong mỗi tập
print(f"{'tập':6s} {'số lô':>5s} " + " ".join(f"{l:>9s}" for l in LOAI))
for tap in ("train", "val", "test"):
con = [a for a in anh if a["tap"] == tap]
so_lo = len({a["lo"] for a in con})
print(f"{tap:6s} {so_lo:5d} " + " ".join(f"{sum(a['loai'] == l for a in con):9d}" for l in LOAI))
thieu = [(tap, l) for tap in ("val", "test") for l in LOAI
if sum(a["tap"] == tap and a["loai"] == l for a in anh) < 15]
print("cảnh báo: loại có dưới 15 ảnh trong val/test:", thieu or "không có")
lo nằm ở nhiều tập: 0
chi_tiet nằm ở nhiều tập: 0
tập số lô OK xuoc lom loang_mau ho_nhom
train 42 2219 205 118 94 84
val 9 452 42 16 20 15
test 9 525 45 14 21 20
cảnh báo: loại có dưới 15 ảnh trong val/test: [('test', 'lom')]
Hai kiểm tra đều phải là thủ tục bắt buộc mỗi lần tạo phiên bản dữ liệu. Nếu một loại lỗi hiếm có quá ít ảnh trong val hoặc test (cảnh báo ở dòng cuối), không chia ngẫu nhiên lại để "cho đẹp": hãy thu thêm, hoặc báo cáo kết quả loại lỗi đó kèm số mẫu và cận trên tin cậy. Ở lần chạy mô phỏng này, tập test chỉ có 14 ảnh móp, đúng loại cảnh báo bạn sẽ gặp với dữ liệu thật.
4.5. Golden set và tiêu chí nghiệm thu
golden_v1 (đóng băng tuần 12, chụp từ các lô sau mọi lô dùng để huấn luyện, nhãn do QA khách hàng và kỹ sư vision xác nhận, có manifest và hash):
| Nhóm | Số chi tiết |
|---|---|
| OK điển hình (nhiều lô anod, cả hai ca) | 500 |
| OK khó: bụi, vân tay, vết gia công cho phép, sắc độ ở biên dung sai | 100 |
| Xước / móp / loang màu | 60 / 40 / 40 |
| Hở nhôm (lỗi nghiêm trọng) | 30 thật + tất cả chi tiết hở nhôm mới phát sinh đến ngày nghiệm thu |
| Mẫu giới hạn (ngay trên và dưới mỗi tiêu chí, QA ký) | 20 |
| Bất thường hệ thống: không có chi tiết, sai mã, đặt lệch, ảnh mờ | 20 |
| Mã | Tiêu chí nghiệm thu | Phương pháp |
|---|---|---|
| A1 | Hở nhôm: 0 lọt trên golden_v1 | Chạy golden; báo cáo kèm cận trên 95% (30 mẫu, 0 lọt → escape < ~10%) và cam kết theo dõi trong sản xuất |
| A2 | Tổng các lỗi khác: lọt ≤ 3/140 (≈ 2%) trên golden_v1, không lọt mẫu giới hạn phía NG nào lớn hơn 1,5 lần giới hạn | Chạy golden; liệt kê từng ảnh lọt |
| A3 | Overkill ≤ 2% trên 500 OK điển hình; ≤ 10% trên 100 OK khó; vùng xám ≤ 3% sản lượng | Chạy golden; chạy bóng (shadow) 3 ngày so với QC |
| A4 | Bất thường hệ thống: 20/20 cho kết quả NG hoặc lỗi, không bao giờ OK | Chạy golden |
| A5 | Thời gian đầu cuối (2 ảnh, 126 ô, quyết định): p99 ≤ 0,8 s, max ≤ 1,2 s trong 10.000 chu kỳ liên tục trên PC đích, có ghi log và lưu ảnh chạy song song; warm-up khi khởi động | Log thời gian của trạm |
| A6 | Hồi quy: phiên bản mô hình mới không được lọt ảnh NG nào mà phiên bản đang chạy bắt được | So sánh từng ảnh trên golden |
| A7 | Lọt ra khách hàng ≤ 200 ppm | Không chứng minh được trong nghiệm thu; theo dõi 3 tháng sau SAT bằng khiếu nại và kiểm tra lại mẫu ngẫu nhiên hàng OK (ghi rõ trong hợp đồng) |
4.6. Lộ trình theo giai đoạn
| Giai đoạn | Tuần | Nội dung | Cổng chuyển giai đoạn |
|---|---|---|---|
| 0. Khả thi | 1–2 | Thử chiếu sáng với 20 chi tiết NG có sẵn; chốt camera, đèn; đo thời gian suy luận trên PC đích | Mọi loại lỗi nhìn thấy rõ trên ảnh, QA đồng ý |
| 1. Chạy bóng | 3–8 | Rule-based (định vị, ren, luật độ sáng hở nhôm) + anomaly detection học từ ảnh OK; trạm chạy song song QC, không loại hàng; thu thập dữ liệu, gán nhãn | Anomaly bắt mọi hở nhôm QC phát hiện trong giai đoạn này; đủ data_v1 cho xước, móp, loang màu |
| 2. Phân đoạn | 9–14 | Huấn luyện phân đoạn xước/móp/loang màu; chọn ngưỡng trên val; lớp quyết định theo mm; vùng xám | Đạt A1–A6 trên golden_v1 |
| 3. Nghiệm thu và vận hành | 15–20 | SAT, giảm dần QC kiểm 100% xuống kiểm lại vùng xám và lấy mẫu; theo dõi ppm, trôi dữ liệu; huấn luyện lại theo lịch có kiểm soát | A7 theo dõi; khách hàng ký SAT |
4.7. Bảng rủi ro
| # | Rủi ro | Khả năng / Ảnh hưởng | Biện pháp |
|---|---|---|---|
| R1 | Không đủ ảnh hở nhôm trước hạn | Cao / Cao | Anomaly detection + luật độ sáng từ giai đoạn 1; dữ liệu tổng hợp chỉ cho train; xin QC giữ thêm chi tiết từ trạm sửa chữa; thỏa thuận nghiệm thu hở nhôm theo số mẫu thực có |
| R2 | Bụi, vân tay gây overkill cao | Cao / Trung bình | Thổi khí ion hóa trước trạm; lớp "OK khó" trong dữ liệu; vùng xám thay vì NG trực tiếp |
| R3 | 63–126 ô/chi tiết vượt ngân sách 1,5 s | Trung bình / Cao | Đo ngay tuần 1; xuất ONNX/TensorRT; chỉ chạy ô thuộc vùng A/B; giảm độ phân giải vùng B |
| R4 | Sắc độ anod thay đổi theo lô làm anomaly score trôi | Trung bình / Cao | Chia tập theo lô; theo dõi phân bố điểm OK hằng ngày; cảnh báo khi trung vị điểm OK tăng; cập nhật memory bank có kiểm soát |
| R5 | Tiêu chí "loang màu" chủ quan, hai QC đánh giá khác nhau | Cao / Trung bình | Đổi sang tiêu chí đo được (ΔE so với vùng lân cận, diện tích mm²) với mẫu giới hạn ký duyệt trước khi gán nhãn |
| R6 | Rò rỉ dữ liệu làm kết quả val đẹp giả tạo | Trung bình / Cao | Chia theo lô và thời gian, nhóm theo mã chi tiết; golden từ lô sau cùng |
| R7 | Thay đèn, bẩn ống kính, đổi đồ gá sau nghiệm thu | Trung bình / Cao | Ảnh chuẩn kiểm tra đầu ca; chạy lại golden sau mọi thay đổi phần cứng |
4.8. Câu hỏi phải làm rõ với khách hàng
- "Không để lọt hở nhôm" được đo thế nào khi nghiệm thu? Đồng ý cách diễn đạt bằng số mẫu và cận trên tin cậy, cộng theo dõi sau SAT.
- Tỉ lệ overkill 2% tính trên tổng sản lượng hay trên số OK? Hàng vùng xám có tính là overkill không?
- Tiêu chí loang màu đo bằng gì (ΔE, điều kiện nhìn)? Có mẫu giới hạn ký duyệt không?
- Bụi có được lau trước trạm không? Trạm có được thêm thổi khí không?
- Quyền sử dụng ảnh sản phẩm để huấn luyện; ảnh có được rời khỏi nhà máy không?
- Ai được phép đổi ngưỡng, ai ký phiên bản mô hình mới, chu kỳ huấn luyện lại?
5. Tự đánh giá
| Tiêu chí | Đạt khi |
|---|---|
| Bắt đầu từ tiêu chí | Mỗi loại lỗi có đầu ra cần thiết (có/không, vị trí, kích thước mm) và lý do chọn công cụ tương ứng |
| So sánh phương án | Có ít nhất 4 cách tiếp cận được so sánh với ưu, nhược cụ thể cho bài toán này, không chung chung |
| Kiến trúc hybrid hợp lý | Rule-based làm định vị, ren, quy đổi mm, áp tiêu chí; AI làm phần bề mặt; có đường đi an toàn khi lỗi hệ thống |
| Con số thiết kế | Có độ phân giải (mm/px), số ô, ngân sách thời gian, lịch thu thập theo loại lỗi hiếm nhất |
| Kế hoạch dữ liệu | Có số lượng mỗi lớp, nguồn "OK khó", giờ công gán nhãn, hướng dẫn gán nhãn có quy tắc cho trường hợp khó |
| Chống rò rỉ | Chia theo lô/thời gian, nhóm ảnh cùng chi tiết; có script kiểm tra; golden từ lô sau cùng |
| Tiêu chí nghiệm thu đo được | Escape, overkill có mẫu số và số mẫu; lỗi nghiêm trọng tách riêng; cycle time bằng p99 và max trên phần cứng đích; có tiêu chí hồi quy |
| Trung thực về giới hạn | Không hứa "0 lọt"; nói rõ cái gì không chứng minh được trong nghiệm thu và cách theo dõi sau đó |
| Rủi ro | Ít nhất 5 rủi ro có biện pháp cụ thể, trong đó có thiếu dữ liệu lỗi hiếm, trôi dữ liệu, cycle time |
6. Mở rộng
- Ước lượng chi phí: thêm vào script giờ công kỹ sư, giờ công gán nhãn, thời gian QC giữ hàng, so với chi phí 4 QC trong 2 năm để tính thời gian hoàn vốn.
- Học chủ động (active learning): thiết kế quy trình đưa ảnh vùng xám và ảnh mô hình không chắc chắn về hàng đợi gán nhãn mỗi tuần, ưu tiên ảnh giúp mô hình nhiều nhất.
- Giám sát trôi dữ liệu: chọn 3 chỉ số theo dõi hằng ngày (trung vị điểm anomaly của OK, tỉ lệ vùng xám, độ sáng trung bình ảnh) và ngưỡng cảnh báo.
- Áp dụng cho bài toán của bạn: viết lại tài liệu này cho một trạm bạn biết, hoặc cho một lớp của bộ MVTec AD, bộ dữ liệu bạn sẽ dùng trong dự án anomaly detection cuối chặng 12.
Bài tiếp theo bắt đầu chặng 12: Object Detection với YOLO26: huấn luyện mô hình đầu tiên.


