Skip to main content

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.

Tại sao điều này quan trọng

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.

Recipe Backtesting, Backtest Runs empty state

Khái niệmNội dung
Test SetMộ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 RunMộ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.

Create Test Set dialog

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), ExportStart Backtest (vô hiệu hóa cho đến khi test set có hình ảnh).

Empty test set editor

Thêm hình ảnh

Hai cách để điền vào test set:

  1. 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.
  2. 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).

Import from Library with filters

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.

Các ảnh chụp sản xuất mang theo lịch sử của chúng

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.

Test set editor with images imported

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.

Image viewer, no embedded metadata

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ể.

Ground truth labeling per search area

Mỗi search area được gán nhãn độc lập

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ẽ:

  1. 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.
  2. Duyệt qua từng hình ảnh trong test set.
  3. 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.
  4. 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ự.
Backtest kích hoạt cùng I/O như trong sản xuất

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: PassGround Truth: Fail
Recipe: PassTrue PositiveEscape
Recipe: FailOverkillCorrect 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 và overkill đều là triệu chứng, cách khắc phục thì khác nhau

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ê.
Nhiều test set cho tiêu chí đang phát triển

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.

Bài viết liên quan