Прокатный цех металлургического предприятия ЕВРАЗ ЗСМК занимается выпуском готовой продукции для клиентов: от арматуры до уголков. Производственный процесс — дело непростое. Иногда за всеми мощностями и нюансами человеческому глазу уследить сложно или даже невозможно. Под катом расскажем, каким образом система видеоаналитики решает производственные проблемы, изложим этапы ее создания и увидим, какие трудности возникают при решении подобного рода задач на металлургических предприятиях. Чтобы понять, для чего нам потребовалась видеоаналитика и что именно она делает, проведем небольшую экскурсию по производству заготовок.  Предположим, нам заказали выпустить 20 тонн готового проката фиксированной длины. Все начинается с того, что сталь из двух кислородно-конвертерных цехов (мы зовем их кратко ККЦ-1 и ККЦ-2) попадает в машину непрерывного литья заготовок (МНЛЗ), где производится заготовка с квадратным сечением 100 х 100 х 12 000 (или другой размер в зависимости от заказа). Далее нужное количество заготовок попадает на склад горячей заготовки, а после отправляется в нагревательные печи: на этом этапе заготовки нагревают до определенной температуры для проката. Разогретые заготовки уходят на рольганг — в прокатный стан, на выходе из которого мы получаем раскат готового профиля. Его мы уже можем нарезать по размерам заказчика на кратные длины и отправить на холодильник. Для этого мы используем летучие ножницы с усилием реза в 63 тонны, которыми вручную управляет оператор. Вот они: Кратность крайне важна, потому что нужно учесть обрезь металла в соответствии с коэффициентом теплового расширения.   Наша система видеоизмерения предназначена для контроля работы ножниц, режущих раскат готового профиля. Работа холодильника имеет большой инерционный момент: металлу нужно 40 минут, чтобы остыть и попасть под ножницы холодной резки, где будет выявлен некорректный рез 63-тонных ножниц. Для этого система производит измерения горячего металла и с учетом коэффициента теплового расширения определяет правильность реза ножниц. Для определения этого коэффициента делается два измерения: измеряем штангу в горячем состоянии и измеряем ее же уже после остывания на линии адьюстажа. Эти данные система передает в АСУ ТП «Раскрой», и на их основе АСУ, производя аналитику измерения, осуществляет корректировку работы ножниц. Звучит гладко. Но есть нюансы.  Первая трудность состоит в том, что первичная резка металла на ножницах происходит в движении, а скорость прокатки высока. Если АСУ ТП «Раскрой» упустит момент реза хотя бы на полсекунды, заметная часть раската проскочит мимо ножниц, и рез пойдет не оптимально. Из одного большого раската мы хотим получить максимальное количество прокатанного профиля заказной длины. Продолжая наш пример, мы могли бы порезать 200-метровый раскат ровно пополам, по 100 метров. Но из-за погрешности мы, скорее всего, разрежем его на 101 и 99 метров, из которых сможем получить только 19 штук проката заказной длины вместо 20. Недостающий прокат заказной длины мы будем вынуждены взять из следующего раската, а полученный остаток от этой (первой) штанги отправить на переплавку. Итак, мы выполнили заказ, но потратили при этом больше металла. До недавнего времени с этим ничего нельзя было сделать. Вторая трудность в том, что резка на итоговые заказные длины происходит в холодном состоянии, а металл в процессе охлаждения ужимается в соответствии с коэффициентом теплового расширения, и, чтобы разделить полученный раскат на итоговые профили, мы должны осуществить рез на ножницах с учетом кратности заказных длин и этого коэффициента. Так, если коэффициент для нашего профиля из примера равен 5%, то горячий раскат нужно нарезать кратно не по 10, а по 10,5 метра, которые сожмутся до 10 метров. Главная загвоздка в том, что мы не знаем точную величину этого коэффициента. Почему? Потому что до недавнего времени мы проводили только замер отрезаемых штанг на холодильник косвенным методом в процессе раскроя, а замер уже отрезанных штанг на холодильнике в процессе производства не проводили совсем – не было технической возможности. Поэтому мы не знали, на сколько именно процентов ужимается металл, и коэффициент теплового расширения рассчитывался приблизительно по табличным величинам из ГОСТов, которые не охватывают всего спектра коэффициентов из-за большого ассортимента сортамента. Таким образом, мы сталкиваемся с проблемами погрешности при первичной резке металла и погрешности в коэффициенте теплового воздействия. Это ведет к увеличению длины дополнительной обрези, которая идет в переплавку. Чтобы снизить потери материала и, как следствие, сократить убытки, нам необходимо резать горячий раскат так, чтобы весь полученный раскат пошел на окончательный продукт, а остаток в конце проката был бы минимальным. Для этого необходимо вычислить коэффициент — то есть, по факту, разницу длин горячих и холодных заготовок. В конечном счете все сводится к тому, что наша задача — это замерить длину горячих и холодных штанг. Используя эти данные, мы сможем вычислить коэффициент и предсказать, какую длину нужно отрезать в следующий раз. Это решит все обозначенные проблемы. Но если с замером холодных штанг проблем нет, то как можно узнать длину раскаленной штанги? Мы рассмотрели несколько вариантов. Наиболее очевидный — это нацепить на рольганг датчики движения. Способ относительно дешевый, но он не дает нужной точности. Следующая мысль — оптические / лазерные измерители длины. У них нет проблем с точностью, но они не покрывали всех нужд цеха: ими нельзя замерить все профили, а еще есть сложности с их установкой и эксплуатацией. Последняя надежда была возложена на камеры видеонаблюдения. Идея была в том, чтобы создать видеоаналитическую систему, которая смогла бы измерять длину заготовок с помощью компьютерного зрения и отсылать эту информацию в АСУ ТП. С учетом бурного развития компьютерного зрения за последние десять лет такая идея могла сработать. Разработку системы для замера длины штанг с помощью компьютерного зрения мы заказали нашему партнеру Warden Machinery. Аналогичных решений на момент создания системы у других предприятий не было, поэтому проектировалась она без оглядки на сторонние продукты, с нуля. Воплощение подобного проекта в жизнь было бы невозможным без решения следующих вопросов: монтаж и настройка камер, выбор подходящего освещения, развертывание серверов, реализация алгоритма и его внедрение. Обо всем этом мы и поговорим. Отправной точкой для начала работы служат постановка задачи и формализация проблемы. Общая схема проста: когда штанга горячая, надо измерить ее длину и температуру в течение 4-х секунд, чтобы понять, где резать. А когда она остыла, сократилась и лежит на холодильнике, ее длину и температуру нужно измерить вновь, чтобы понять, насколько мы промахнулись при резке, а потом учесть величину промаха при обработке следующей горячей штанги, чтобы резать еще точнее. Итак, постановка задачи: надо найти способ вычислять длину штанги в горячем и холодном состояниях — и потом учитывать промах реза, чтобы корректировать новые резы. Измерять все будет интеллектуальный алгоритм. В качестве входных данных он должен получить изображения с камер на холодильнике, снимающих заготовки в видимом человеческому глазу RGB-формате. Полученные данные алгоритм должен конвертировать в информацию, необходимую для корректировки реза. В качестве таковой выступает итоговая длина штанги в горячем и холодном состояниях. Информация о замерах передается в АСУ ТП, в которой происходит дальнейший расчет оптимального реза. Как только стали известны детали технического задания, приступаем к подготовке сцены. Сперва необходимо определить количество, тип и расположение камер в зоне детекции. Грамотный выбор ракурса съемки уже решает половину проблем. Холодильник, на котором располагаются штанги, представляет собой протяженное реечное пространство. Для покрытия такой крупной площади мы установили четыре специальные камеры, работающие в расширенных температурных условиях до +60°C (обычные камеры не осилят работу в суровых палящих сталеплавильных цехах). Эти камеры обеспечивают видеопоток в разрешении 4K с частотой 25 кадров в секунду. Они расположены на высоте 4,5–6 метров от пола, а расстояние от объектива до места размещения самих раскатов составляет от 10 до 15 метров. С момента установки камер прошел год, и, несмотря на высокую температуру и высокий уровень запыленности, они показали, что умеют справляться со своей задачей: их корпуса не нагреваются, а уровень деградации изображения из-за грязи остается незначительным. Но, как бы то ни было, проводить техническое обслуживание необходимо, и раз в полгода мы устраиваем чистку и осмотр камер. Главные органы чувств компьютерного зрения установлены. Теперь необходимо обеспечить подходящее освещение сцены. В нашем случае с этим проблем не возникло, так как развернутые в цеху мощные светодиодные прожекторы обеспечивали ровное и достаточное освещение, необходимое для работы алгоритма в дневное и ночное время. Так как цех закрытый, солнечный свет на уровень освещенности в поле видимости камер не влияет. В выборе сервера изначальных ограничений у нас не было: разработчикам дали возможность попробовать различные конфигурации. По итогам проведенных в ходе разработки экспериментов решили поставить на вооружение рабочую станцию Supermicro SYS-7049GP-TRT, а в помощь ей подключить видеокарту NVIDIA GTX 1050. Теперь сцена готова. Пора выпускать на нее алгоритм. Алгоритм — это мозг любой видеоаналитической системы. Его созданием занимаются отдельные группы специалистов — инженеров компьютерного зрения, которые превращают задачу видеоаналитики в прикладную математическую модель и затем реализуют ее в виде программного алгоритма. Составление подходящей модели — это целый исследовательско-творческий процесс. В рамках решения текущего кейса разработчики испытали некоторое количество неудачных вариантов и в результате смогли прийти к качественной, устойчивой и расширяемой модели. Рассмотрим, какие шаги выполняет алгоритм данной модели. Напомним, что задача алгоритма — измерить длину штанги. Приведенные ниже шаги проделываются как для горячих, так и для холодных штанг. Шаг 1. Предварительная обработка кадра. Перед началом анализа мы подготавливаем кадр, чтобы облегчить дальнейшие вычисления: устраняем оптические искажения, выделяем зоны интереса на холодильнике (остальную сцену отсекаем), нормируем гистограмму цветового распределения. Примечание. Строго говоря, на вход алгоритму подается панорамное изображение, склеенное из нескольких кадров с соседних камер. Склейка осуществляется через классическую технологию image stitching. Таким образом мы можем полностью запечатлеть штангу произвольной длины. Шаг 2. Детектор выезда штанги. Определяем подходящий момент для замера, когда штанга появится в кадре и остановится на какое-то время на холодильнике. Положение штанги при этом вычисляется с помощью легкого алгоритма сегментации, основанного на цветовой кластеризации. Шаг 3. Повторная нейросетевая сегментация штанги для точного определения ее начала и конца. Эту подзадачу решает нейронная сеть, за основу которой была взята популярная нейросетевая архитектура U-Net. Мы расскажем о ней подробнее в следующем разделе. Шаг 4. Определение реальной длины. Сопоставляем найденные координаты начала и конца штанги с ее координатами в трехмерном пространстве с опорой на референсные объекты (вешки) и высоту профиля. Расположение этих вешек известно заранее, на этапе конфигурации системы. Вычитаем конец от начала и получаем искомую длину. Шаг 5. Передача полученных данных. Посылаем посчитанную холодную и горячую длину в АСУ ТП и базу данных. В пилотном варианте считали только горячую. Именно таким образом и работает искусственный «мозг». Но какую точность он способен выдавать? В качестве критерия оценки качества модели мы рассматриваем точность работы U-Net, так как это основное звено в измерении длины. На своем «финальном экзамене» обученная нейросеть показала 96-процентное пиксельное отклонение, что в свою очередь позволяет высчитать длину штанги в холодном состоянии с погрешностью ±10 сантиметров, которая складывается не только из погрешности сегментации, но и из геометрических отклонений самого профиля и коэффициента теплового расширения. Такая точность дает модели все шансы на долгую карьеру в металлургическом комбинате. Тут можно подумать, что если 10 сантиметров — это 4%, то выходит, что длина профиля — около 2,5 метров. Однако это не так. Проценты и сантиметры связаны между собой нелинейно. На деле 96% — это отклонение пикселей предсказанной маски профиля от его реальной маски, а ±10 сантиметров — это среднеквадратичное отклонение предсказанной длины от его реальной длины. Стоит отметить, что 96% точности — это, бесспорно, высокий показатель, но все же не предел возможностей. Точность можно повысить, снабдив модель бо́льшим количеством обучающих примеров с периодическим дообучением. Именно этим сейчас и занимаются разработчики, пытаясь по мере накопления данных уменьшить погрешность измерений до ±5 сантиметров. Это закономерная процедура, так как данные в машинном обучении должны работать так же, как деньги в экономике. А как быть с устойчивостью данной модели к непредвиденным ситуациям? Что произойдет, например, если поменяется сортамент выпускаемой продукции и профиль заготовок изменится? Ответ: ничего. Модель устойчива к изменениям выпускаемого сортамента. Также не сможет нарушить привычный ход жизни и загрязнение камер. Модель умеет работать даже с зашумленными данными. А если один из сотрудников решит использовать камеры, чтобы снимать сторис в «Инстаграме», и заслонит собой важный для алгоритма участок? Это тоже не смутит искусственный интеллект: он определит местоположение этого человека и, зная его примерные габариты, скорректирует свою финальную оценку длины. Изначально данная архитектура была предназначена для сегментации клеток на медицинских снимках, полученных с помощью микроскопии. Медицинские задачи требовательны к качеству результата, и поэтому U-Net в наследство от своих создателей получила высокую точность работы, которая как нельзя кстати пригодилась для текущего кейса. Для обучения этой нейросети были использованы 1000 изображений с предварительно размеченными штангами. Мы также подкрепили их аугментацией: отражением по горизонтали и вертикали, обрезкой, смещением гистограммы распределения цветов. Соотношение тренировочной, валидационной и тестовой выборки составило 7:1:2. Изначально в качестве функции потерь мы взяли коэффициент Дайса, но в процессе обучения выяснилось, что финальная сегментная маска на концах профиля должна быть очень точной по сравнению с остальными частями, так как небольшие колебания пикселей в тех местах могут привести к большой погрешности при измерении длины. Поэтому мы провели балансировку целевой функции, чтобы перевести большее внимание модели на концы заготовок. При этом все равно потребовался этап постпроцессинга, основанный на поиске резких цветовых градиентов и уточняющий горизонтальную координату конца заготовки. Также сказываются на сегментации разные физические характеристики профилей: часть из них высоки и перекрывают друг друга, другие тонкие и изгибаются. Нейросеть не всегда легко отделяет следующие друг за другом профили, и поэтому приходится вводить дополнительные эвристики для их «разъединения». В остальном обучение прошло без трудностей. Модель справилась с задачей, показав 96% точности на финальном тестировании. Наиболее информативным признаком для нейросети оказался цветовой градиент при переходе от раскалённого штанги к относительно холодной (или предыдущей остывшей). Поднимемся на уровень выше и посмотрим на архитектуру решения. Об аналитическом ядре и его связи с АСУ ТП мы уже поговорили. АРМ системы управления позволяет оператору просматривать замеры в реальном времени или за определённый период, а мастеру даёт возможность вручную подбирать коэффициент теплового расширения исходя из замеров и дополнительной информации о марке стали. Отображаемые в пользовательском интерфейсе данные берутся из базы MySQL. В ней содержатся результаты видеоанализа вместе с оригинальными видео с камер. Эти видеозаписи можно использовать для дообучения алгоритма. Скажем пару слов и о программной составляющей системы. Реализован алгоритм на языке Python с применением библиотеки OpenCV. Данная библиотека является самым популярным средством для анализа изображений и входит в арсенал каждого разработчика компьютерного зрения. Язык Python, вопреки расхожему мнению, работает в продакшене настолько же быстро, как и C++. Достигается это за счет того, что наиболее нагруженные аналитические функции заранее предкомпилируются на C++, а Python их только вызывает. Кроме того, разработка и сопровождение кода на Python гораздо быстрее и мобильнее. Захват и декодирование видеопотока производятся с помощью библиотеки FFmpeg. Обучение и инференс U-Net осуществляются на PyTorch. Работа нейронной сети требует больших вычислительных ресурсов, которые способна обеспечить видеокарта. По этой причине разработчики велели U-Net делать свои нейронные дела на  NVIDIA 1080ti. Рассмотренная видеоаналитическая система была в эксплуатации в течение полугода в рамках пилотного проекта и доказала свою эффективность. Сейчас можно сказать, что после ее запуска в эксплуатацию у нас существенно сократилось количество обрези и металла, который уходит в переплавку. До ее внедрения мы закладывали лишние полтора метра на каждую штангу. Теперь же, благодаря точной оценке линейного расширения, мы снизили это число до 10 сантиметров и получили увеличение точности в 15 раз. В ближайшее время мы посчитаем общий экономический эффект. Дальше идет активный процесс расширения: добавим ещё 17 камер, чтобы получилось восемь камер в ряд по двум сторонам холодильника и пять камер на холодную обработку. Кроме того, мы планируем заменить карту NVIDIA GTX 1050 на более мощную NVIDIA Tesla V100 и рассмотреть фреймворк TensorRT вместо PyTorch для увеличения производительности. Напоследок отметим, что вопреки распространенному мнению о том, что интеллектуализация производства забирает рабочие места у людей, мы демонстрируем обратную ситуацию: размер премии работников напрямую зависит от количества обрези, и поэтому, совершенствуя процесс производства, мы облегчаем жизнь нашим сотрудникам.