AI-POWERED DOCS
What do you want to know?
Kiểm thử ngược Công thức
Recipe Backtesting cho phép bạn phát lại một tập hợp hình ảnh được tuyển chọn qua recipe đang hoạt động và nhận báo cáo khách quan về hiệu suất của nó, theo từng hình ảnh. Nó chạy toàn bộ recipe, mọi model, mọi quy tắc Node-RED, mọi ngưỡng pass/fail, vì vậy kết quả đầu ra phản ánh chính xác những gì sản xuất thực tế sẽ thực hiện.
Hãy xem nó như một bộ test hồi quy cho recipe vision của bạn.
Trước khi có Backtesting, cách duy nhất để xác minh thay đổi recipe là chờ các sản phẩm mới chạy qua dây chuyền. Với Backtesting, bạn duy trì một thư viện vĩnh viễn gồm các ảnh chụp khó, chạy recipe mới trên tất cả chúng trong vài giây và so sánh lần chạy cũ với lần chạy mới song song. Sự chấp thuận của khách hàng trở thành một cuộc trao đổi khách quan, không phải cảm tính.
Mục tiêu học tập
Sau khi hoàn thành hướng dẫn này, bạn sẽ có thể:
- Xây dựng test set gồm các hình ảnh đại diện với ground truth pass/fail
- Chạy backtest trên recipe đang hoạt động và đọc ma trận nhầm lẫn (confusion matrix)
- Đi sâu vào escapes và overkills để chẩn đoán điều gì đã xảy ra
- Nhóm kết quả yield theo tag, dây chuyền sản xuất hoặc tuần chụp để phát hiện model drift
- Kích hoạt các lần chạy backtest qua HTTP cho tự động hóa theo lịch hoặc kiểu CI
Khái niệm cốt lõi
Recipe Backtesting có hai thành phần xây dựng. Chúng nằm sau mục Recipe Backtesting trong thanh điều hướng bên trái.

| Khái niệm | Nội dung |
|---|---|
| Test Set | Một tập hợp JPEG có thể tái sử dụng cùng với các nhãn ground truth. Test set độc lập với bất kỳ recipe cụ thể nào, cùng một test set có thể được chạy trên các recipe khác nhau hoặc các phiên bản khác nhau của cùng một recipe. Test set có thể được import, export và chia sẻ giữa các camera. |
| Backtest Run | Một ảnh chụp thời điểm của một test set được thực thi trên recipe đang hoạt động hiện tại. Các lần chạy là bất biến, việc gán lại nhãn cho test set sau đó sẽ không thay đổi kết quả của lần chạy trước. |
Tạo test set
Từ thanh điều hướng bên trái, mở Recipe Backtesting → Test Sets, sau đó nhấp vào Create Test Set. Đặt tên và mô tả, mô tả sẽ có thể tìm kiếm được và hiển thị trên báo cáo chạy.

Sau khi được tạo, test set sẽ mở trong trình chỉnh sửa mà chưa có hình ảnh nào. Thanh tiêu đề có các hành động chính: Add Images, Import from Library (trong menu thả xuống bên cạnh Add Images), Export và Start Backtest (vô hiệu hóa cho đến khi test set có hình ảnh).

Thêm hình ảnh
Hai cách để điền vào test set:
- Nhấp hoặc kéo các hình ảnh JPEG vào khu vực tải lên. Chỉ chấp nhận JPEG và mọi hình ảnh phải khớp chính xác với độ phân giải chụp của camera.
- Import from Library, tùy chọn nhanh hơn cho các camera sản xuất. Điều này lấy trực tiếp các ảnh chụp trước đó từ camera với tất cả metadata nhúng của chúng còn nguyên vẹn (thời gian chụp, trigger ID, pass/fail gốc, tags, inspection target).

Hộp thoại Import from Library cho phép bạn lọc theo số capture, trigger ID, phạm vi ngày chụp (phím tắt 5m / 30m / 1h / 12h / 1d), ghi chú, tên recipe, pass/fail và bảng Advanced Filters cho inspection target / region / search area. Công tắc Include Trainset Images được bật mặc định. Công tắc Alignment Fails Only hữu ích khi bạn đang xác minh cụ thể một bản sửa lỗi aligner.
Hình ảnh được đưa vào từ Library giữ lại số sê-ri camera, thời gian chụp gốc, phiên bản recipe đã tạo ra chúng và toàn bộ metadata JSON của kết quả sản xuất gốc. Điều đó có nghĩa là bạn có thể tái sử dụng pass/fail gốc làm ground truth thay vì gán lại nhãn từ đầu. Bạn cũng có thể chỉnh sửa nó nếu tiêu chuẩn đã thay đổi kể từ đó.
Sau khi import, trình chỉnh sửa hiển thị các hình ảnh với tóm tắt nhanh (số lượng hình ảnh, số lượng ground-truth, tổng kích thước) và phần phân tích Test Set Distribution theo tuần chụp và tên hệ thống.

Gán nhãn ground truth
Ground truth là kết quả pass/fail thực tế cho mỗi hình ảnh, tức là kết quả mà bạn, người vận hành, tin rằng đáng lẽ phải có. Ground truth là cơ sở để tính toán các chỉ số accuracy, escape và overkill.
Nhấp vào một hình ảnh để mở Image Viewer. Nếu hình ảnh được nhập từ một lần chụp sản xuất, các search area ban đầu và kết quả pass/fail đã có sẵn và bạn có thể tái sử dụng hoặc chỉnh sửa chúng. Nếu hình ảnh không có metadata nhúng (ví dụ: một bản export cũ, một lần tải lên thủ công), nhấp Set Up Labeling để liên kết hình ảnh với các search area của recipe đang hoạt động hiện tại.

Sau khi hình ảnh được liên kết, mỗi search area sẽ có một radio button Pass / Fail / Unknown riêng. Để search area ở trạng thái Unknown nếu bạn không chắc chắn, các hàng đó sẽ bị loại khỏi phép tính accuracy nhưng vẫn đóng góp vào yield tổng thể.

Nếu recipe của bạn có ba search area trên một bộ phận, mỗi hình ảnh trong test set cần ba ground truth label, mỗi label cho một search area. Phần thống kê bên phải phân biệt Images (số lần chụp) và Ground Truth Labels (số lượng search area đã được gán nhãn).
Bạn cũng có thể thêm description cho mỗi hình ảnh (điều gì đáng chú ý về lần chụp này) và tags (số dây chuyền, ca làm việc, loại lỗi, bất cứ thứ gì). Tags có thể tìm kiếm được trên báo cáo run và có thể nhóm phân tích yield.
Bắt đầu một backtest run
Khi test set có ít nhất một hình ảnh, nhấp Start Backtest. Đặt tên cho run. Camera sẽ:
- Tạm dừng mọi inspection đang hoạt động, các trigger đến sẽ bị bỏ qua trong suốt thời gian chạy.
- Duyệt qua từng hình ảnh trong test set.
- Thực thi toàn bộ recipe đang hoạt động cho mỗi hình ảnh, bao gồm mọi Node-RED node, mọi quy tắc pass/fail, và bất kỳ actuation hay I/O integration nào mà recipe thường điều khiển trong sản xuất.
- Lưu lại mỗi kết quả vào Library và Haystack, y hệt như thể đó là một lần chụp sản xuất thật sự.
Bởi vì run sẽ thực thi đầy đủ recipe, mọi Node-RED output node thực sự được kích hoạt, các lệnh ghi Modbus sẽ xảy ra, thông điệp MQTT sẽ được publish, các lời gọi HTTP sẽ được gửi đi. Không chạy backtest trên một camera đang được kết nối vào dây chuyền sản xuất đang hoạt động trừ khi bạn đã chuẩn bị sẵn cho những side effect đó. Lý tưởng nhất là chạy backtest trên một camera thứ hai dành riêng cho việc validation.
Đọc báo cáo run
Các run được lưu vĩnh viễn. Mở Recipe Backtesting → Backtest Runs để xem mọi run lịch sử, lọc theo test set, và mở bất kỳ run nào.
Báo cáo run có ba phần: confusion matrix, báo cáo yield, và phần drill-down theo từng hình ảnh.
Confusion matrix
| Ground Truth: Pass | Ground Truth: Fail | |
|---|---|---|
| Recipe: Pass | True Positive | Escape |
| Recipe: Fail | Overkill | Correct Reject |
- True Positive, recipe và ground truth đều đồng thuận ở kết quả pass. Đây là điều bạn mong muốn.
- Correct Reject, recipe và ground truth đều đồng thuận ở kết quả fail. Đây cũng là điều bạn mong muốn.
- Escape, recipe cho kết quả pass, nhưng hình ảnh thực sự bị lỗi. Đây hầu như luôn là chế độ lỗi tệ nhất, nó có nghĩa là một bộ phận lỗi đã rời khỏi dây chuyền.
- Overkill, recipe cho kết quả fail, nhưng hình ảnh thực sự là tốt. Đây là false-rejection: dây chuyền đang loại bỏ các bộ phận tốt.
Nhấp vào bất kỳ ô nào để lọc danh sách hình ảnh chỉ còn những lần chụp đó, sau đó nhấp vào một hình ảnh để chuyển đến mục Library của nó cùng với toàn bộ Haystack trace.
Escape thường có nghĩa là model đã bỏ sót một lỗi, hoặc ngưỡng Node-RED quá dễ dãi. Overkill thường có nghĩa là ngưỡng quá nghiêm ngặt, hoặc training set bị thiên lệch về các trường hợp positive khó. Confusion matrix cho bạn biết loại lỗi nào đang chiếm ưu thế; hãy khắc phục loại đó trước.
Yield và cycle time
Header của run hiển thị yield tổng thể (tổng số pass / tổng số capture) và cycle time trung bình, được tính bằng tổng thời lượng run chia cho số lượng ảnh. Đây là ước tính cycle-time chính xác nhất mà camera có thể tạo ra vì nó chạy cùng một flow Node-RED như trong production.
Phân tích yield theo tag hoặc system
Chế độ xem Yield Report → Advanced Distribution nhóm yield theo tag hoặc theo system (dây chuyền sản xuất). Đây là cách để phát hiện hai loại vấn đề mà con số tổng thể che giấu:
- Line bias, line 37 cho yield 98%, line 59 cho 40%. Tập training của bạn có thể đã bị lấy mẫu quá nhiều trên line 37.
- Model drift, yield ổn trên các capture từ 2 tháng trước nhưng giảm trên các capture từ tuần này. Các bộ phận đã thay đổi, hoặc ánh sáng đã thay đổi, và recipe cần được làm mới.
Filtering, tagging, và export
Tag và mô tả cho phép bạn phân tích run report theo nhiều cách thực tế:
- Lọc theo
line-37để xác nhận một bản sửa lỗi trước khi triển khai cho các line khác - Lọc theo
defect:crackđể xác minh một failure mode cụ thể đã được bắt - Lọc theo tuần capture để xem recipe hoạt động như thế nào trên các bộ phận gần đây so với golden set
Toàn bộ run report có thể được export dưới dạng PDF để chia sẻ với khách hàng, rất hữu ích trong các cuộc họp buy-off nơi các con số khách quan thắng thế so với việc so sánh screenshot cạnh nhau.
Tự động hóa với HTTP
Mọi hành động trong Recipe Backtesting đều có sẵn thông qua HTTP API của camera. Các mẫu automation phổ biến:
- Node-RED interval trigger, theo lịch hàng tuần, Node-RED thêm 7 ngày capture sản xuất gần nhất vào một test set luân phiên và khởi động một run. Nếu yield giảm xuống dưới ngưỡng, kích hoạt cảnh báo.
- CI gate, trước khi một phiên bản recipe có thể được triển khai qua import endpoint, một script kích hoạt một backtest run và chặn việc triển khai nếu độ chính xác giảm so với phiên bản trước.
- PLC trigger, PLC có thể kích hoạt một digital input trên một ID cụ thể, Node-RED bắt được và bắt đầu backtest. PLC đọc lại kết quả pass/fail qua Modbus hoặc Ethernet/IP sau khi run hoàn tất.
Xem phần API Reference của Swagger UI trên camera tại http://CAMERA_IP/edge/v2/docs để biết endpoint POST /backtest_sets/{id}/runs và các endpoint CRUD test-set liên quan. Thay CAMERA_IP bằng IP thực tế của camera.
Xây dựng một test set tốt
Sự khác biệt giữa một test set phát hiện được các regression thực sự và một test set cho bạn sự tự tin giả tạo nằm ở sự cân bằng.
- Cân bằng pass/fail, hướng đến số lượng mẫu good và bad xấp xỉ bằng nhau. Một tập có 95% pass sẽ khiến mọi recipe trông tuyệt vời.
- Phạm vi defect, mỗi failure mode mà khách hàng quan tâm cần có ít nhất vài ví dụ. Nếu bạn chưa bao giờ thấy một loại defect nhất định trong test set, bạn không có bằng chứng nào cho thấy recipe bắt được nó.
- Cân bằng thời gian, lấy capture trong nhiều tuần hoặc nhiều tháng, không chỉ hôm nay. Dây chuyền sản xuất thay đổi (ánh sáng thay đổi, linh kiện đổi nhà cung cấp) và test set của bạn nên đại diện cho sự thay đổi đó.
- Cân bằng line, nếu recipe chạy trên 50 dây chuyền sản xuất, test set nên bao gồm capture từ từng dây chuyền đó, không chỉ dây chuyền trên bàn làm việc của bạn.
- Edge case, các capture khó mà vừa đủ pass hoặc vừa đủ fail là nơi việc retraining mang lại lợi ích thực sự. Hãy đưa những trường hợp đó vào test set.
- Khối lượng, 10 ảnh là đủ để smoke-test một thay đổi; 100+ là đủ để đưa ra các tuyên bố về độ chính xác có ý nghĩa thống kê.
Nếu khách hàng thay đổi tiêu chí pass của họ, hiện tại bạn phải gán nhãn lại từng ảnh một. Một giải pháp thực tế: giữ một test set stable mà mọi người đồng thuận và một test set current thứ hai theo dõi các tiêu chí đang phát triển. Khi tiêu chí hiện tại ổn định, chúng có thể được gộp trở lại vào stable set.
Những gì được kiểm thử và chưa được kiểm thử hiện tại
Backtesting chạy ở cấp độ recipe hoàn chỉnh và đánh giá kết quả pass/fail tổng hợp cuối cùng. Điều này có nghĩa là:
- Hoạt động với, các recipe Classification, Segmentation, Measurement và OCR. Bất cứ thứ gì chạy qua Node-RED để cho ra một kết quả pass/fail duy nhất đều có thể kiểm thử được.
- Lộ trình phát triển, Backtesting ở cấp độ model đang được phát triển. Trong các phiên bản tương lai, bạn sẽ có thể gán nhãn ground truth ở cấp độ từng ROI và so sánh trực tiếp kết quả của segmenter hoặc classifier, mà không cần dựa vào các ngưỡng trong Node-RED. Các đầu ra dạng số (ví dụ: khoảng cách đo lường, phân loại đa lớp) sẽ có các chỉ số chuyên biệt vượt ra ngoài pass/fail.