Мы многого не знали про железнодорожные вагоны:
И, наконец, знакомьтесь, вагон, который приехал к нам по железной дороге:
Наши коллеги из НЛМК в какой-то момент сделали анализ металлолома в вагонах. Вагон фотографируется по мере разгрузки по слоям, потом приходит модель и оценивает засорённость и качество лома. Мы съездили к ним в гости, посмотрели и решили внедрить у себя.
В этот момент и проявилась разница между тем, что бывает в теории и на практике. Точнее, она проявлялась несколько раз по ходу процесса, что доставляло нам массу радости.
Мы делаем разные стальные штуки, например, стальные трубы почти полтора метра в диаметре или колёса для поездов, почти по полтонны каждое. Чтобы делать такие штуки, надо закупать лом и хорошо разбираться в его сортах. Настоящие сомелье лома знают, что он бывает очень разный и его нужно складывать в разные закрома. Потому что потом, при купажировании перед плавкой, нужно будет под разные виды продукции, которую собираемся сделать из стали, по-разному смешивать лом.
Например, чтобы максимально загрузить печь и снизить энергозатраты на плавку, нужно взять большие куски и забодяжить их с маленькими, чтобы маленькие заняли пространство в щелях между большими. И так далее.
Иногда нам достаётся лом с землёй. Точнее, почти любой лом грязный, и это никак не исправить полностью. Но при загрязнении лома выше 5 % от массовой доли вагон считается браком — и его нужно отправить назад поставщику. Мы не хотим плавить землю в печи. Это дорого по затратам электричества, плюс какие-то компоненты могут взять и стать неотъемлемой частью трубы. Проще забраковать вагон, чем полпартии труб, когда все переделы уже сделаны.
Ещё из лома надо выковыривать газовые баллоны и снаряды, но об этом в следующей серии.
Получается, что есть две важные задачи на приёмке лома:
Слой 1
Слой 4
Один из последних слоёв
Соответственно, первая задача решается человеком с фотоаппаратом, а вторая — им же, только ему очень важно вовремя заметить землю и остановить разгрузку. Потому что это как с пастой, назад в тюбик запихать немного сложнее.
Человек с фотоаппаратом один, а вагонов много. Вагоны большие и глубокие, а человеки низкие и глазами до дна не достают, а там обычно самое интересное. Поэтому фотографируют они только то, что считают важным. Это достаточно долго вызывало конфликты между нами и поставщиками, когда нужно было точно объяснить, почему именно мы не приняли какой-то из вагонов.
Вообще идея фотографирования напрашивается на скепсис. Казалось бы: органолептические методы оценки такие тёплые и ламповые, вагоны нужно слушать и чувствовать. Этот скепсис мы преодолели, когда начали собирать датасет и оценивать уровень засора по изображениям. То есть оказалось — показалось.
Мы очень долго хотели автоматизировать процесс, но каждый раз это упиралось в то, что нужно обосновать бюджет, а многие не верили, что можно решить задачу фотографирования вагона в правильное время.
В смысле, когда кран опускает магниты внутрь, включает, прицепляет лом и вытаскивает, вот тогда обнажается новый слой. И нужно сделать примерно 30 фотографий таких слоёв автоматически.
Задача имеет тысячи решений, начиная от кнопки управления камерой в кабине крана, но наши коллеги доказали на практике, что непонятные на тот момент нейросети имеют практическую пользу. И можно определять момент, когда электромагниты сняли новый слой лома с вагона и отошли в сторону.
Именно в этот момент лом начал отчаянно сопротивляться человеческому разуму.
Над вагоном стоит камера. Видеопоток с неё приходит в локальной сети.
Первая модель разбирает видеопоток и ищет вагоны и магниты. Когда вагон встаёт и перестаёт двигаться, он готов к разгрузке. Когда в его габарит сначала заезжает магнит, потом что-то там делает, а потом выезжает, через 4 секунды после выезда можно делать фотографию. Это будет слой лома. Через некоторое время мы получим около 30 фотографий срезов вагонов. Эта фотосессия потом пойдёт в отчёт поставщику.
Фотография слоя
Вторая модель оценивает слои лома на предмет засорённости. Происходит это в реальном времени, потому что, если слой сильно засорён, выдаётся алерт. Если человек не принял решение («нормально, работаем» или «брак, вернуть вагон»), то через 3 алерта разгрузка останавливается до разбора ситуации.
Третья модель оценивает по фотографиям лома, насколько этот лом соответствует заявленному ГОСТу — например, там мелкие кусочки металла или крупные трубы. В этом же месте можно искать батареи и баллоны, но мы пока не ищем, потому что есть ещё одна проверка дальше.
Разумеется, всё это только звучит очень логично и просто. Подлянки нас ждали на каждом этапе, начиная с того, сколько надо камер, чтобы снимать вагоны.
Сначала надо было посчитать количество камер, от этого зависело, сколько надо железа. А от этого зависит закупка, которую надо делать сильно заранее.
У нас три пути. А три пути от двух отличаются тем, что если стоят все три поезда, то у поезда в середине не видно номера вагона. Потому что камера, стоящая под углом, снимает не его, а загораживающий его другой поезд. Плюс иногда номера перекрываются самим ломом из хранилища — у нас оно устроено не так, как у коллег.
Казалось бы, решение очевидное — снимать поезд сбоку перед заездом в зону разгрузки и точно знать, где какой вагон. Здесь мы исходили из уже знакомого вам допущения, что вагоны не умеют меняться местами и переезжать с пути на путь.
На практике, если у поставщика не хватает лома на целый вагон, то объект «вагон» может оказаться грузовиком. Как правило, это большие металловозы с тягачами. Это нормально, про такие вагоны мы знали заранее. Ещё мы знали, что этот косплей на поезд должен двигаться по тем же правилам, что и вагоны. Но в реальном мире, если водителю надо выехать, он возьмёт и выедет. Иногда задом, иногда змейкой между путями, иногда ещё каким-то противоестественным способом.
Потом выяснилось, что поезд, конечно, поезд, но есть такая штука как технологический расцеп. В смысле, между вагонами могут быть промежутки. И если вы выровняли первый вагон по огромной белой черте на полу разгрузочной зоны, это не значит, что последний вагон окажется ровно под камерой.
Вид с камеры с крана
У нас шесть кранов. Кран обычно нависает над вагоном, то есть, казалось, что нам нужно восемь камер итого: две на въезд (между первым и вторым и на третий путь для съёмки номеров) и по одной на каждый кран. Нужно убедиться, что камера имеет питание и что у камеры есть аплинк — например, вайфай (который посреди кучи металла ведёт себя не очень корректно). И что всё это стабильно и на 100 % работает при любых положениях крана, особенно аплинк.
Ещё одна проблема — позиционирование. Кран ездит не только над нужным вагоном, но и над соседними, выгружая их по очереди, потому что так оптимальнее. Внешне вагоны почти не отличаются, а номеров мы не видим. Нам нужно сделать какую-то систему, чтобы понимать в каком месте цеха сейчас находится кран. Поэтому легче было поставить камеры над вагонами, пускай и больше.
А, и ещё сущая мелочь — нужно согласовать заново вообще всё по крану, включая всякие вещи вроде техники безопасности, пожарной безопасности и так далее. Некоторое время мы потратили на эксперименты и поняли, что движение одновременно вагонов и кранов запутает нам вообще всё и лучше закрепить штук 30 камер так, чтобы они покрывали всю зону разгрузки, а дальше разбираться уже, где и что.
Вид со стационарной камеры
До того как приняться за задачу, мы тщательно изучили опыт всех тех, кто сортировал лом на других производствах, — хотя бы чтобы понять будущую архитектуру. Оказалось, что прям таких в научном мире почти не было. Были классификаторы лома, сделанные не в нашей стране. Судя по этим работам, лом у них сферический, в вакууме, и его кто-то заботливо отмывает перед тем, как подать на площадку. Ну и ещё лежит он тщательно отсортированный — среди алюминиевых банок от колы ну никак не будет канализационной трубы или запорожца.
Вот так примерно они представляют себе лом
Естественно, в реальном мире всё немного не так. Среди лома может попасться даже красная бочка. А красные бочки, как вы знаете по играм, ведут себя очень нестабильно. Но куда чаще он просто перемешан до неузнаваемости.
Есть готовые зарубежные решения и начинают появляться отечественные, но они так или иначе не подходят для наших условий. Например, совокупной стоимостью владения в сравнении с собственной разработкой, тем более что коллеги с другого завода всё показывают и помогают советами. То есть грабли уже вроде бы известны.
Ура, чугун приехал!
А это сорт 3АН
А это 3А1
И просто 3А
Люди оказались мало того, что неточны, так ещё и непостоянны!
Засорённость вагона — величина творческая. Никто не может сказать точно, насколько вагон засорён, потому что тогда придётся кропотливо отчистить от земли все кусочки лома.
Но в целом количество земли видно на слоях. Какая-то часть мусора, особенно коварные забитые грязью трубы, остаётся в куче металлолома, а не просто в вагоне. То, что не зацепилось за лом при извлечении, частично остаётся на дне, но не всё и не всегда.
Засоры бывают естественными и криминальными. В первом случае всё честно и объяснимо: лом содержит примеси, которые не удалось удалить, например, ржавчину, землю или мусор. Это не очень приятно, конечно, но терпимо. Во втором случае в вагоны с ломом специально добавляют посторонние материалы, причём в большом количестве.
Остановить разгрузку по засорённости довольно просто. Здесь люди практически не расходятся во мнениях. А вот определить процент засорённости — это экспертная задача намного большей сложности. От этого зависит, сколько денег мы заплатим поставщику.
Например, если засорённость 1 %, то с каждых 100 тонн по накладной мы не оплачиваем 1 тонну мусора. Если 2 % — 2 тонны и так далее. Именно здесь происходили споры по поводу того, кто и что там намерил и кто и что там оценил. Учитывая малое количество фотографий и их низкое качество, обе стороны часто чувствовали несправедливость. Если оценщики с нашей стороны с точки зрения поставщика завышали количество земли — поставщик тихо поднимал цены на величину этого завышения. Если же вагоны часто приходили слишком грязные, мы отказывались от поставщика. Если это наша площадка в собственности — решали внутри. Иногда через удар по печени.
Метафорический.
В общем, обе стороны были заинтересованы если не в честности, то хотя бы в объективности и стабильности оценки — тогда можно спокойно работать.
Общепринятая практика — определение уровня засора контролёром лома визуальным методом. В смысле, глазами. Это по ГОСТу 2787-75 (устаревший стандарт) и актуальному пункту 7.3.1.3 ГОСТа 2787-2019. Недостатки налицо: люди в зоне выгрузки, вредные условия труда контролёра (запылённость воздуха, повышенный уровень шума), тотальный субъективизм (методика только в экспертности суждений), знания передаются через наставничество. Мы провели оценку: стандартное отклонение между самой низкой и самой высокой оценкой для выборки из 1000 партий составило 0,4 %. Учитывая, что максимальный уровень оцениваемого засора не превышает 6 %, это достаточно высокая погрешность. Ну и разные контролёры имеют склонность в среднем занижать или завышать оценку. Оценка контролёра с самой высокой средней оценкой в 2,6 раза выше, чем оценка контролёра с самой низкой средней оценкой.
Разброс оценок
Процент засорённости мы определяем так: каждый отснятый вагон получает оценку специалиста и потом из этого формируется обучающая выборка для сети. Через 20 тысяч повторений уже можно говорить о том, что нейросеть не понимает, что делает, объяснить ничего не может, но даёт более-менее объективную оценку. Нас, в отличие от судебной системы, это полностью устраивает.
Осталось сформировать обучающую выборку. В первый же день мы немного накосорезили с источниками изображений, и люди оценили одни и те же фотографии дважды. С разным результатом до обеда и после обеда. То есть буквально два абсолютно одинаковых среза вагона получили разные оценки у одного и того же человека.
Мы проверили гипотезу и выяснили, что в примерно 10 % случаев разброс такой, что это выходит за пределы допустимой погрешности.
В целом, это нормально: люди имеют разный опыт, стажёры оценивают хуже матёрых приёмщиков, а голодный специалист, которого после обеда бросила девушка по СМС, оценивает не так, как он же, сытый с утра. Мы сделали тиндер для вагонов: рабочие садились и ставили оценки по фотографиям. Единственное, конечно, вагон не мог лайкнуть вас в ответ и проявить взаимную симпатию.
Каждый вагон оценивали 3 специалиста. Если разброс их оценок был небольшим, мы усредняли оценку. Если разброс был большим, мы давали оценить вагон начальнику бригады (его мы считаем эталонным ломовым сомелье), затем отбрасывали дальнюю оценку и смотрели на разброс. Если он оставался за пределами погрешности, отбрасывали вагон из обучающей выборки. С точки зрения методологии оценки — разгрузка попросила делать каждый месяц топ-3 наиболее выделяющихся на общем фоне работников, чтобы дообучать их.
В общем, так мы смогли получать более-менее точную оценку для обучения. Кстати, ещё какое-то время мы потратили на работу с сетом с фотоаппаратов, но там всё вообще плохо — не тот угол, не видно дна вагона, а ночные фотографии просто ужасны по качеству. Там же прямо внутри сета могли попасться вагоны сбоку (чтобы запомнить номер), накладные на этот самый лом и коллективные фотографии бригады с дней рождения. В общем, сортируйте наборы фото от людей.
Интерфейс
У нас есть 4 состояния вагона с ломом: обычное дневное, ночное, а также ещё два таких же зимних. На зимних добавляется снег и наледь, которые могут закрыть номер вагона, его края (что ухудшает детекцию) и просто накрыть «периной» лом.
Соответственно, нужно 4 части обучающего набора, снятых в разных условиях.
Ночной от дневного на практике почти не отличается: у нас на кранах установлены прожектора, которые отлично освещают всё внутри вагона. А вот зимний сет потребовал доработок, потому что иногда снега бывает прямо много.
Разметку, естественно, нарушали:
Вот ещё вагон приехал:
В один прекрасный день в разгрузку заехала машина, которую разгрузили, но модель сделала только одну фотографию — как она встала под кран. Никаких слоёв, как будто электромагниты даже не приближались к кузову.
Собственно, так и оказалось. На грузовике был собственный небольшой грейфер (клешневой манипулятор), и он разгрузился самостоятельно.
Это была локальная катастрофа, потому что нам надо было ловить все моменты разгрузки такого чудо-транспорта и формировать обучающий сет, чтобы детектировать моменты съёмки этого чуда. Получилось довольно быстро и проще, чем мы думали, но сюрприз остался сюрпризом.
Когда мы набрали первые 10 тысяч фотографий с камер из цеха, то начали обучать на них модель. Здесь сюрприз был такой: мы перемешали изображения, разделили на тренировочную, валидационную и тестовую выборки и отправили учиться. И вот почему-то на тестовой выборке результаты очень высокие, а на реальных новых изображениях из цеха — как-то сильно хуже. Значит, скорее всего, модель переучилась. Начали копаться — и почти сразу поняли, что в нашем случае разделение должно быть не случайным. Фотографии соседних слоёв слишком похожи, и в результате модель часто тестируется на тех же изображениях, на которых обучалась. Если бы фотографии были разными, такой проблемы не возникло бы.
Единица квантования — вагон. Если из 30 слоёв этого вагона 20 попадут в обучение, 5 на валидацию, а 5 на тест — то мы как раз и получим переобучение. Надо делить в той же пропорции, но только перемешивая вагоны, а не отдельные фотографии.
Сделали. Метрики на тестовой выборке тут же упали, а на продакшне из цеха — выросли до приемлемых значений. Дальше по мере накопления базы изображений они постепенно росли. Точнее, сначала случилась зима, для которой понадобилось копить новую часть корпуса, а потом в целом всё стало расти.
Никто не знает, что именно делает модель. Она просто старается повторять за приёмщиками, которые её обучали. Определять конкретные типы лома внутри структуры слоя почти невозможно, речь про общую оценку «этот слой, кажется, в целом такой».
Приёмщики в комплексе (оркестром мнений) точнее, чем поодиночке. Но человек подвержен множеству факторов и может ошибаться, в то время как модель просто оценивает изображения раз за разом одинаково.
Одинаковость означает, что появилась третья сторона (модель), спорить с которой уже не имеет смысла, потому что она основана не совсем на личном мнении.
Модель просматривает всё, каждый слой.
В итоге поставщики знают, что мы видим всё, присылают меньше засорённого лома, а мы не платим за землю и попытки её переплавить столько, сколько раньше.
Конечно, кому-то такая дотошность не подойдёт, но кто-то, наоборот, увеличит объёмы. И тут ещё такой момент: не исключено, что рано или поздно большинство предприятий перейдут на систему сплошного контроля. Если не сделать это первыми, то есть риск в конечном итоге по остаточному принципу получать весь плохой и грязный лом.
Всё оказалось немного не таким глянцевым, как казалось изначально, но это работающее решение для производства. Да, мы идеологически повторяли за нашими коллегами, но оно работает. Когда что-то получается у нас, чего нет на других производствах в стране, мы тоже спокойно рассказываем. Возможно, потому что у нас на заводе всё по хардкору и ещё жив дух старой школы, когда изобретать надо вместе.
- Вагоны в поезде не умеют обгонять друг друга. Но обгоняют.
- Один из вагонов обычно не может взять и переехать на параллельный путь.
- Считается, что вагоны одинаковой типовой длины. Но это не гарантирует, что последний будет в одном и том же месте, если выравнивать первый.
И, наконец, знакомьтесь, вагон, который приехал к нам по железной дороге:
Наши коллеги из НЛМК в какой-то момент сделали анализ металлолома в вагонах. Вагон фотографируется по мере разгрузки по слоям, потом приходит модель и оценивает засорённость и качество лома. Мы съездили к ним в гости, посмотрели и решили внедрить у себя.
В этот момент и проявилась разница между тем, что бывает в теории и на практике. Точнее, она проявлялась несколько раз по ходу процесса, что доставляло нам массу радости.
Зачем нужен фотомониторинг лома и что это вообще такое
Мы делаем разные стальные штуки, например, стальные трубы почти полтора метра в диаметре или колёса для поездов, почти по полтонны каждое. Чтобы делать такие штуки, надо закупать лом и хорошо разбираться в его сортах. Настоящие сомелье лома знают, что он бывает очень разный и его нужно складывать в разные закрома. Потому что потом, при купажировании перед плавкой, нужно будет под разные виды продукции, которую собираемся сделать из стали, по-разному смешивать лом.
Например, чтобы максимально загрузить печь и снизить энергозатраты на плавку, нужно взять большие куски и забодяжить их с маленькими, чтобы маленькие заняли пространство в щелях между большими. И так далее.
Иногда нам достаётся лом с землёй. Точнее, почти любой лом грязный, и это никак не исправить полностью. Но при загрязнении лома выше 5 % от массовой доли вагон считается браком — и его нужно отправить назад поставщику. Мы не хотим плавить землю в печи. Это дорого по затратам электричества, плюс какие-то компоненты могут взять и стать неотъемлемой частью трубы. Проще забраковать вагон, чем полпартии труб, когда все переделы уже сделаны.
Ещё из лома надо выковыривать газовые баллоны и снаряды, но об этом в следующей серии.
Получается, что есть две важные задачи на приёмке лома:
- Отфотографировать выгружаемый лом, чтобы потом не было споров между нами и поставщиками лома по поводу качества поставки.
- Если вдруг вагон слишком грязный — как можно раньше это обнаружить, и всё невыгруженное отправить обратно поставщику, попутно сказав: «Не надо так».
Слой 1
Слой 4
Один из последних слоёв
Соответственно, первая задача решается человеком с фотоаппаратом, а вторая — им же, только ему очень важно вовремя заметить землю и остановить разгрузку. Потому что это как с пастой, назад в тюбик запихать немного сложнее.
Человек с фотоаппаратом один, а вагонов много. Вагоны большие и глубокие, а человеки низкие и глазами до дна не достают, а там обычно самое интересное. Поэтому фотографируют они только то, что считают важным. Это достаточно долго вызывало конфликты между нами и поставщиками, когда нужно было точно объяснить, почему именно мы не приняли какой-то из вагонов.
Вообще идея фотографирования напрашивается на скепсис. Казалось бы: органолептические методы оценки такие тёплые и ламповые, вагоны нужно слушать и чувствовать. Этот скепсис мы преодолели, когда начали собирать датасет и оценивать уровень засора по изображениям. То есть оказалось — показалось.
Мы очень долго хотели автоматизировать процесс, но каждый раз это упиралось в то, что нужно обосновать бюджет, а многие не верили, что можно решить задачу фотографирования вагона в правильное время.
В смысле, когда кран опускает магниты внутрь, включает, прицепляет лом и вытаскивает, вот тогда обнажается новый слой. И нужно сделать примерно 30 фотографий таких слоёв автоматически.
Задача имеет тысячи решений, начиная от кнопки управления камерой в кабине крана, но наши коллеги доказали на практике, что непонятные на тот момент нейросети имеют практическую пользу. И можно определять момент, когда электромагниты сняли новый слой лома с вагона и отошли в сторону.
Именно в этот момент лом начал отчаянно сопротивляться человеческому разуму.
Архитектура
Над вагоном стоит камера. Видеопоток с неё приходит в локальной сети.
Первая модель разбирает видеопоток и ищет вагоны и магниты. Когда вагон встаёт и перестаёт двигаться, он готов к разгрузке. Когда в его габарит сначала заезжает магнит, потом что-то там делает, а потом выезжает, через 4 секунды после выезда можно делать фотографию. Это будет слой лома. Через некоторое время мы получим около 30 фотографий срезов вагонов. Эта фотосессия потом пойдёт в отчёт поставщику.
Фотография слоя
Вторая модель оценивает слои лома на предмет засорённости. Происходит это в реальном времени, потому что, если слой сильно засорён, выдаётся алерт. Если человек не принял решение («нормально, работаем» или «брак, вернуть вагон»), то через 3 алерта разгрузка останавливается до разбора ситуации.
Третья модель оценивает по фотографиям лома, насколько этот лом соответствует заявленному ГОСТу — например, там мелкие кусочки металла или крупные трубы. В этом же месте можно искать батареи и баллоны, но мы пока не ищем, потому что есть ещё одна проверка дальше.
Разумеется, всё это только звучит очень логично и просто. Подлянки нас ждали на каждом этапе, начиная с того, сколько надо камер, чтобы снимать вагоны.
Как лом устраивал нам подлянки
Сначала надо было посчитать количество камер, от этого зависело, сколько надо железа. А от этого зависит закупка, которую надо делать сильно заранее.
У нас три пути. А три пути от двух отличаются тем, что если стоят все три поезда, то у поезда в середине не видно номера вагона. Потому что камера, стоящая под углом, снимает не его, а загораживающий его другой поезд. Плюс иногда номера перекрываются самим ломом из хранилища — у нас оно устроено не так, как у коллег.
Казалось бы, решение очевидное — снимать поезд сбоку перед заездом в зону разгрузки и точно знать, где какой вагон. Здесь мы исходили из уже знакомого вам допущения, что вагоны не умеют меняться местами и переезжать с пути на путь.
На практике, если у поставщика не хватает лома на целый вагон, то объект «вагон» может оказаться грузовиком. Как правило, это большие металловозы с тягачами. Это нормально, про такие вагоны мы знали заранее. Ещё мы знали, что этот косплей на поезд должен двигаться по тем же правилам, что и вагоны. Но в реальном мире, если водителю надо выехать, он возьмёт и выедет. Иногда задом, иногда змейкой между путями, иногда ещё каким-то противоестественным способом.
Потом выяснилось, что поезд, конечно, поезд, но есть такая штука как технологический расцеп. В смысле, между вагонами могут быть промежутки. И если вы выровняли первый вагон по огромной белой черте на полу разгрузочной зоны, это не значит, что последний вагон окажется ровно под камерой.
Вид с камеры с крана
У нас шесть кранов. Кран обычно нависает над вагоном, то есть, казалось, что нам нужно восемь камер итого: две на въезд (между первым и вторым и на третий путь для съёмки номеров) и по одной на каждый кран. Нужно убедиться, что камера имеет питание и что у камеры есть аплинк — например, вайфай (который посреди кучи металла ведёт себя не очень корректно). И что всё это стабильно и на 100 % работает при любых положениях крана, особенно аплинк.
Ещё одна проблема — позиционирование. Кран ездит не только над нужным вагоном, но и над соседними, выгружая их по очереди, потому что так оптимальнее. Внешне вагоны почти не отличаются, а номеров мы не видим. Нам нужно сделать какую-то систему, чтобы понимать в каком месте цеха сейчас находится кран. Поэтому легче было поставить камеры над вагонами, пускай и больше.
А, и ещё сущая мелочь — нужно согласовать заново вообще всё по крану, включая всякие вещи вроде техники безопасности, пожарной безопасности и так далее. Некоторое время мы потратили на эксперименты и поняли, что движение одновременно вагонов и кранов запутает нам вообще всё и лучше закрепить штук 30 камер так, чтобы они покрывали всю зону разгрузки, а дальше разбираться уже, где и что.
Вид со стационарной камеры
Модель определения лома
До того как приняться за задачу, мы тщательно изучили опыт всех тех, кто сортировал лом на других производствах, — хотя бы чтобы понять будущую архитектуру. Оказалось, что прям таких в научном мире почти не было. Были классификаторы лома, сделанные не в нашей стране. Судя по этим работам, лом у них сферический, в вакууме, и его кто-то заботливо отмывает перед тем, как подать на площадку. Ну и ещё лежит он тщательно отсортированный — среди алюминиевых банок от колы ну никак не будет канализационной трубы или запорожца.
Вот так примерно они представляют себе лом
Естественно, в реальном мире всё немного не так. Среди лома может попасться даже красная бочка. А красные бочки, как вы знаете по играм, ведут себя очень нестабильно. Но куда чаще он просто перемешан до неузнаваемости.
Есть готовые зарубежные решения и начинают появляться отечественные, но они так или иначе не подходят для наших условий. Например, совокупной стоимостью владения в сравнении с собственной разработкой, тем более что коллеги с другого завода всё показывают и помогают советами. То есть грабли уже вроде бы известны.
Ура, чугун приехал!
А это сорт 3АН
А это 3А1
И просто 3А
Разметка
Люди оказались мало того, что неточны, так ещё и непостоянны!
Засорённость вагона — величина творческая. Никто не может сказать точно, насколько вагон засорён, потому что тогда придётся кропотливо отчистить от земли все кусочки лома.
Но в целом количество земли видно на слоях. Какая-то часть мусора, особенно коварные забитые грязью трубы, остаётся в куче металлолома, а не просто в вагоне. То, что не зацепилось за лом при извлечении, частично остаётся на дне, но не всё и не всегда.
Засоры бывают естественными и криминальными. В первом случае всё честно и объяснимо: лом содержит примеси, которые не удалось удалить, например, ржавчину, землю или мусор. Это не очень приятно, конечно, но терпимо. Во втором случае в вагоны с ломом специально добавляют посторонние материалы, причём в большом количестве.
Остановить разгрузку по засорённости довольно просто. Здесь люди практически не расходятся во мнениях. А вот определить процент засорённости — это экспертная задача намного большей сложности. От этого зависит, сколько денег мы заплатим поставщику.
Например, если засорённость 1 %, то с каждых 100 тонн по накладной мы не оплачиваем 1 тонну мусора. Если 2 % — 2 тонны и так далее. Именно здесь происходили споры по поводу того, кто и что там намерил и кто и что там оценил. Учитывая малое количество фотографий и их низкое качество, обе стороны часто чувствовали несправедливость. Если оценщики с нашей стороны с точки зрения поставщика завышали количество земли — поставщик тихо поднимал цены на величину этого завышения. Если же вагоны часто приходили слишком грязные, мы отказывались от поставщика. Если это наша площадка в собственности — решали внутри. Иногда через удар по печени.
Метафорический.
В общем, обе стороны были заинтересованы если не в честности, то хотя бы в объективности и стабильности оценки — тогда можно спокойно работать.
Общепринятая практика — определение уровня засора контролёром лома визуальным методом. В смысле, глазами. Это по ГОСТу 2787-75 (устаревший стандарт) и актуальному пункту 7.3.1.3 ГОСТа 2787-2019. Недостатки налицо: люди в зоне выгрузки, вредные условия труда контролёра (запылённость воздуха, повышенный уровень шума), тотальный субъективизм (методика только в экспертности суждений), знания передаются через наставничество. Мы провели оценку: стандартное отклонение между самой низкой и самой высокой оценкой для выборки из 1000 партий составило 0,4 %. Учитывая, что максимальный уровень оцениваемого засора не превышает 6 %, это достаточно высокая погрешность. Ну и разные контролёры имеют склонность в среднем занижать или завышать оценку. Оценка контролёра с самой высокой средней оценкой в 2,6 раза выше, чем оценка контролёра с самой низкой средней оценкой.
Разброс оценок
Процент засорённости мы определяем так: каждый отснятый вагон получает оценку специалиста и потом из этого формируется обучающая выборка для сети. Через 20 тысяч повторений уже можно говорить о том, что нейросеть не понимает, что делает, объяснить ничего не может, но даёт более-менее объективную оценку. Нас, в отличие от судебной системы, это полностью устраивает.
Осталось сформировать обучающую выборку. В первый же день мы немного накосорезили с источниками изображений, и люди оценили одни и те же фотографии дважды. С разным результатом до обеда и после обеда. То есть буквально два абсолютно одинаковых среза вагона получили разные оценки у одного и того же человека.
Мы проверили гипотезу и выяснили, что в примерно 10 % случаев разброс такой, что это выходит за пределы допустимой погрешности.
В целом, это нормально: люди имеют разный опыт, стажёры оценивают хуже матёрых приёмщиков, а голодный специалист, которого после обеда бросила девушка по СМС, оценивает не так, как он же, сытый с утра. Мы сделали тиндер для вагонов: рабочие садились и ставили оценки по фотографиям. Единственное, конечно, вагон не мог лайкнуть вас в ответ и проявить взаимную симпатию.
Каждый вагон оценивали 3 специалиста. Если разброс их оценок был небольшим, мы усредняли оценку. Если разброс был большим, мы давали оценить вагон начальнику бригады (его мы считаем эталонным ломовым сомелье), затем отбрасывали дальнюю оценку и смотрели на разброс. Если он оставался за пределами погрешности, отбрасывали вагон из обучающей выборки. С точки зрения методологии оценки — разгрузка попросила делать каждый месяц топ-3 наиболее выделяющихся на общем фоне работников, чтобы дообучать их.
В общем, так мы смогли получать более-менее точную оценку для обучения. Кстати, ещё какое-то время мы потратили на работу с сетом с фотоаппаратов, но там всё вообще плохо — не тот угол, не видно дна вагона, а ночные фотографии просто ужасны по качеству. Там же прямо внутри сета могли попасться вагоны сбоку (чтобы запомнить номер), накладные на этот самый лом и коллективные фотографии бригады с дней рождения. В общем, сортируйте наборы фото от людей.
Интерфейс
Разные условия
У нас есть 4 состояния вагона с ломом: обычное дневное, ночное, а также ещё два таких же зимних. На зимних добавляется снег и наледь, которые могут закрыть номер вагона, его края (что ухудшает детекцию) и просто накрыть «периной» лом.
Соответственно, нужно 4 части обучающего набора, снятых в разных условиях.
Ночной от дневного на практике почти не отличается: у нас на кранах установлены прожектора, которые отлично освещают всё внутри вагона. А вот зимний сет потребовал доработок, потому что иногда снега бывает прямо много.
Разметку, естественно, нарушали:
Вот ещё вагон приехал:
Электромагнит
В один прекрасный день в разгрузку заехала машина, которую разгрузили, но модель сделала только одну фотографию — как она встала под кран. Никаких слоёв, как будто электромагниты даже не приближались к кузову.
Собственно, так и оказалось. На грузовике был собственный небольшой грейфер (клешневой манипулятор), и он разгрузился самостоятельно.
Это была локальная катастрофа, потому что нам надо было ловить все моменты разгрузки такого чудо-транспорта и формировать обучающий сет, чтобы детектировать моменты съёмки этого чуда. Получилось довольно быстро и проще, чем мы думали, но сюрприз остался сюрпризом.
Сюрпризы при обучении модели
Когда мы набрали первые 10 тысяч фотографий с камер из цеха, то начали обучать на них модель. Здесь сюрприз был такой: мы перемешали изображения, разделили на тренировочную, валидационную и тестовую выборки и отправили учиться. И вот почему-то на тестовой выборке результаты очень высокие, а на реальных новых изображениях из цеха — как-то сильно хуже. Значит, скорее всего, модель переучилась. Начали копаться — и почти сразу поняли, что в нашем случае разделение должно быть не случайным. Фотографии соседних слоёв слишком похожи, и в результате модель часто тестируется на тех же изображениях, на которых обучалась. Если бы фотографии были разными, такой проблемы не возникло бы.
Единица квантования — вагон. Если из 30 слоёв этого вагона 20 попадут в обучение, 5 на валидацию, а 5 на тест — то мы как раз и получим переобучение. Надо делить в той же пропорции, но только перемешивая вагоны, а не отдельные фотографии.
Сделали. Метрики на тестовой выборке тут же упали, а на продакшне из цеха — выросли до приемлемых значений. Дальше по мере накопления базы изображений они постепенно росли. Точнее, сначала случилась зима, для которой понадобилось копить новую часть корпуса, а потом в целом всё стало расти.
Итого
Никто не знает, что именно делает модель. Она просто старается повторять за приёмщиками, которые её обучали. Определять конкретные типы лома внутри структуры слоя почти невозможно, речь про общую оценку «этот слой, кажется, в целом такой».
Приёмщики в комплексе (оркестром мнений) точнее, чем поодиночке. Но человек подвержен множеству факторов и может ошибаться, в то время как модель просто оценивает изображения раз за разом одинаково.
Одинаковость означает, что появилась третья сторона (модель), спорить с которой уже не имеет смысла, потому что она основана не совсем на личном мнении.
Модель просматривает всё, каждый слой.
В итоге поставщики знают, что мы видим всё, присылают меньше засорённого лома, а мы не платим за землю и попытки её переплавить столько, сколько раньше.
Конечно, кому-то такая дотошность не подойдёт, но кто-то, наоборот, увеличит объёмы. И тут ещё такой момент: не исключено, что рано или поздно большинство предприятий перейдут на систему сплошного контроля. Если не сделать это первыми, то есть риск в конечном итоге по остаточному принципу получать весь плохой и грязный лом.
Всё оказалось немного не таким глянцевым, как казалось изначально, но это работающее решение для производства. Да, мы идеологически повторяли за нашими коллегами, но оно работает. Когда что-то получается у нас, чего нет на других производствах в стране, мы тоже спокойно рассказываем. Возможно, потому что у нас на заводе всё по хардкору и ещё жив дух старой школы, когда изобретать надо вместе.
zatim
Лом выгружается электромагнитом, а земля, насколько я знаю, не магнитится. В чем же тогда проблема?
Treviz
В том что земля набилась внутрь условной трубы и делала её в несколько раз тяжелее.
zatim
Ну тогда и фотоаппарат не поможет, смысл тогда суетиться?