Задача
Скоростная линия (металл, пластик, печать): контроль дефектов поверхности на лету — царапины, сколы, непропечатка, включения. Дефекты редкие, поэтому классы сильно разбалансированы: на тысячи годных деталей приходятся единицы брака, и именно эти единицы нельзя пропустить.
Два жёстких требования. Первое — детерминированная задержка под такт линии: система не имеет права иногда подвиснуть, иначе деталь уедет мимо отбраковщика. Второе — стоимость false-positive: ронять годное в брак дорого, ложная тревога бьёт по выходу годного и доверию операторов.
Подход
Весь инференс — на edge-узле у линии, без облака: round-trip непредсказуем по задержке, а это прямой конфликт с тактом. Камеру жёстко синхронизировали с управляемой подсветкой и энкодером линии — кадр снимается в фиксированной фазе движения, освещение стабильное, геометрия повторяемая. Это убирает часть ложных срабатываний ещё до модели.
Дисбаланс классов давили на уровне данных и порога: аугментация и oversampling редких дефектов, отдельная калибровка решающего порога под асимметричную цену ошибок — recall по браку важнее, но не ценой обвала по false-positive. Модель квантовали в INT8 под целевой ускоритель: фиксированный бюджет времени на деталь и предсказуемая деградация под нагрузкой вместо случайных пиков. Backpressure на очереди кадров: при перегрузе узел тормозит подачу, а не копит латентность молча.
Стек
OpenVINO · INT8 quantization · hardware-triggered camera · controlled lighting · C++ (конвейер инференса)
Результат
- 99.4% recall по дефектам — критичный брак не уезжает мимо отбраковки.
- 0.6% false-positive rate — годное почти не падает в брак, выход годного сохранён.
- 8.7 ms на деталь, джиттер в пределах такта — задержка детерминированная, без подвисаний.
- Контроль идёт без оператора у линии: разметка спорных случаев — постфактум.