После финала Цифрового Прорыва вся наша команда оказалась подписана на кучу рассылок, некоторые из которых даже выглядели полезными. Как раз через рассылку к нам прилетела новость о мероприятии Prohack 4.0 — хакатоне, который проводил крупный российский IT-интегратор, компания Крок в конце ноября в Москве.
Основные условия такие:
- 36 часов
- 12 задач были определены заранее
- Все задачи реальные. Все из промышленного сектора
- Нужно спасать поросят!
Серьёзно: наличие в обойме задачи про свиноматку — главная причина по которой мы вообще обратили своё внимание на это мероприятие и не задвинули его, как, например, очень похожий по идеологии UrbanTech Moscow.
Во время регистрации в графе «название команды» я вписал «Насос Краб Педаль Кебаб» потому что так попросил четырёхлетний сын нашего капитана. У пятерых взрослых мужиков не нашлось разумных аргументов против. Так и выступали.
Вообще, в тот момент мы считали, что в хакатонах с заранее определёнными задачами нет божьей искры. Можно легко нарваться на команду конкурентов с предприятия или из вуза, которая сплочённо решает схожую задачу уже несколько лет и знает о ней вообще всё. А то и вовсе на команду которая привозит готовое решение из дома. Но главное: нам казалось, что на таких мероприятиях нет места для творческого манёвра и настоящей импровизации.
Эй, мужик. Мамку мою не видал?
Поэтому, Prohack оказался нашим вторым пиком на эти выходные. Первым стал Zoohackathon, проводимый Американским Центром при посольстве США. Мы рассуждали так: два мероприятия в одни и те же даты в Москве. Сегодня заявляемся на оба и уже на месте решаем в каком именно участвовать.
В принципе, план оправдал себя, только на Zoohackathon мы заранее не попали из-за того, что организаторы спонсировали перелёт для команд из регионов и заявки с одним лишь описанием задачи-решения им оказалось недостаточно чтобы выслать нам приглашение. Так что мы двинули на Prohack и не прогадали.
Задачи
Крок — настоящий интегратор, а не какой-то околоправительственный фонд, поэтому к задачам там подошли серьёзно. Среди них не было высосанных из пальца проблем и не было неадекватных реальности описаний.
Уже на закрытии мы узнали, что ребята из Крока заранее собрали задачи со своих реальных клиентов и отобрали лучшие на основе конкурса. Так из нескольких десятков осталось только 12.
По каждой из них была подготовлена отдельная презентация с деталями. Для каждой задачи были описаны входные данные и критерии оценки. А значит не будет ситуаций «мы хотим получить ML по видеоаналитике мусорных баков, но у нас нет для вас датасета. Придумайте что-нибудь! Просто покажите готовый к пилотированию MVP и всё, вы чо ваще как не компьютерщики».
В крайнем случае купим датасет на развес в соседнем ларьке.
Все 12 задач были интересными. Посовещавшись мы остановились на трёх:
- #9: Детектирование дефектов на производстве конфет Twix Minis. При заливке конфет шоколадом на них могут оставаться дефекты. Их нужно детектировать в режиме реального времени по видео, классифицировать и в идеале применять какие-то меры. Например, сбивать проблемные шоколадки потоком воздуха. Провайдер задачи — Mars.
- #7: Детектирование агломератов на НПЗ. Есть цех с конвейерной лентой на которую из большой мешалки периодически вываливается отработка нефтепродуктов. По внешнему виду этой отработки можно понять в каком состоянии находятся жернова: Если валится жидкая фракция, то ленту нужно аварийно останавливать, иначе весь следующий день придётся обслуживать жернова. Провайдер — Сибур.
- #8: Детектирование случаев придавливания поросят свиноматкой. Свиноматка опоросилась, но в первые две недели может случайно придавить кого-то из своих новорожденных поросят. По возможности старайтесь избегать такого, а ещё лучше предотвратить заранее. Провайдер — РусАгро.
Как не сложно догадаться, все три задачи напрямую связаны с видеоналитикой и нейросетками.
Предоставляемый заказчиком датасет был основной интригой каждой задачи. Никто до начала мероприятия не знал каким он будет.
1 И какого качества будет это видео тоже никто не знает. Слишком много неизвестных.
Задачи в списке были отсортированы нами по приоритету после беглого анализа за месяц до мероприятия. Мы рассуждали примерно так: До реальных свиноматок и агломератов нас не допустят, а значит мы ничего не сможем показать живьём — только сделаем какую-то аналитику по предоставленному видео файлу1. Будем обводить в рамку подозрительные элементы и, может, придумаем какой-то интересный UX для реагирования на эти инциденты.
Особенность кейса: нужно было отсмотреть видеоролики на которых зафиксированы инциденты. Чё, клавиатурный самурай, не такого агротеха ты ждал?
В случае с Твиксом: даже если нам не дадут дефективных конфет для какой-то имитации конвейера, мы всегда сможем сами купить их в соседнем ларьке и разметить собственный датасет. Мы даже можем попробовать сделать что-то до мероприятия не имея на руках датасета от заказчика.
Т.е. только с задачей номер 9 мы сможем показать какую-то настоящую демку, пусть она и будет собрана из говна и палок лего. Кроме того: у нас уже есть Jetson Nano на котором развёрнуты предобученные нейронки ещё со времён Цифрового Прорыва в Казани.
Открытие и брифинг
В ноябре мы без приключений добрались до Москвы, вписались в центре и к назначенному времени явились в центральный офис Крока на Волочаевской улице. Зарегистрировались и двинули в общий зал на брифинг.
А чё нельзя на всех хакатонах обратную сторону бейджа делать такой?
2 Ни один хакатон не обходится без этого абсурдного утверждения в торжественной части.
Во время открытия на котором нам как всегда не забыли напомнить что мы все уже победители2, были представлены технологические партнёры и, что главное, провайдеры задач. От каждого предприятия были представители, которые находились на площадке все два дня без перерывов. Для всех них были сделаны небольшие временные стенды, где их можно было найти и где они могли хранить какие-то дополнительные материалы связанные с задачами.
Сразу после регистрации на 9 задачу про Твикс и брифинга по ней мы пошли к представителю, которым оказался Максим — MARS WRIGLEY Unit Business Partner. Он не только проявлял живой интерес к тому, что происходило, но пытался ответить на все вопросы, даже если их задавали по несколько раз. Он направлял решения команд в утилитарное русло. Было видно, что всё происходящее ему искренне интересно и он с нетерпением хочет увидеть к чему это приведёт спустя два дня работы.
А ещё Максим привёз с собой несколько огромных коробок конфет на случай, если снятых на производстве фоток с дефектами будет недостаточно.
Датасет в итоге представлял из себя пару гигабайт фотографий конфет рассортированных по папкам с названием соответствующих дефектов. Ещё нам пошарили видео того как весь процесс выглядит живьём.
Примерно что-то такое нам досталось на анализ.
На задачу номер девять помимо нас приземлились ещё 4 команды. Однако, согласно регламенту мероприятия, до защиты по ней многие могли и не добраться, а то и все пятеро.
Нагребай и фоткай.
Система была такая: на 12 задач есть 4 десятка команд. Но разбивки на треки, как это обычно бывает, нет и к финальным защитам допустят не больше 10 команд. Это значит, что есть задачи решения по которым мы вообще не увидим. Десятка финалистов будет объявлена после коротких предварительных защит, которые пройдут перед экспертами в закрытом режиме.
Мы прифигели от того что у нас впервые есть реальный шанс совсем не добраться до защит и разошлись по рабочим местам.
Работа
Для нашей задачи были заранее определены критерии оценки:
- Высокая точность детекции
- Минимум человеческого фактора
- Соблюдение требований к инструментам и технологиям
Мы понимали, что по точности детекции мы не сможем соперничать с собравшимися на хакатон датасатанистами, которых не интересовало вообще ничего кроме метрик производительности получившейся нейросетки. Зато мы могли превзойти их по двум другим критериям и показать концепцию продукта «под ключ», а если получится то и продемонстрировать прототип работающий на какой-то импровизированной конвейерной ленте.
У нас был с собой Jetson Nano вместе с напечатанной для него оснасткой, треногой и веб-камерой. Мы подумали что разумно будет не нырять в задачу с головой, а реализовать для начала детектирование дефектов без их классификации. Сетка должна была оценивать с какой вероятностью конфета в кадре была дефективной. Этого было достаточно.
Пока Тим переобучал последний слой нашей готовой нейросети при помощи выданных нам фоток, стало ясно, что для живой демонстрации этого будет недостаточно — слишком разные ракурсы и освещения использованы в данных. В дополнение к имеющимся фоткам мы всё же решили добавить собственных.
Кирилл засел за порчу конфет, а потом при помощи тулы из набора Jetson Inference начал их фоткать той же веб-камерой, которая будет использоваться в демо.
Дима сразу же засел за презентацию, а Слава за веб-приложение, которое должно было обеспечить постоянное дообучения нейросетки при помощи данных от операторов линии. Я уже традиционно пытался превратить все наши идеи в какой-то стройный продукт, периодически бегая с вопросами к Максиму.
Время шло к полуночи. Пора сворачиваться и ехать домой. Все мы помним, что залог успешного выступления — шестичасовой сон. Кажется мы двигались по плану, но у Тима не получалось запустить обученную сетку на Джетсоне, хотя с его ноутбука всё работало неплохо.
В итоге он отказался возвращаться домой сказав, что ещё повозится и поспит на месте, если получится. Мы не стали спорить, а уходя обнаружили, что организаторы подготовили какую-то чиллаут зону с надувными матрасами. На мгновенье нам самим расхотелось тратить время на поездку домой.
На утро, Тим отрапортовал, что победил железяку и сетка работает на компактном девайсе, который мы при необходимости можем запитать хоть от пауэрбанка. Правда для подсветки дефектов нам всё-равно нужен монитор, так что портативного решения не получилось.
Если коротко, то под камеру можно было класть конфету, а на экране появлялась надпись о том нормальная она или дефективная. Для предзащиты мы даже сделали что-то типа конвейерной ленты склеив несколько листов А4 в полосу и разложив на них конфеты протягивали под камерой, а Джетсон показывал можно их продавать живым людям или нет.
Предзащита
На доске в Фигме, как всегда, больше подробностей.
Предзащиты проходили за закрытыми дверями и понять что там делают конкуренты было невозможно. Однако мы были единственными кто вообще показывал что-то живьём на настоящем видеопотоке с камеры, а не заготовленном заранее видеофайле. Для этого после окончания нашей предзащиты все эксперты встали и через весь этаж прошли к нашему столу т.к. мы не могли принести стенд с монитором к ним.
В итоге всё получилось, как мы и предполагали — специалисты показывали крутые графики и нейросети, а реальных прототипов с продуктовой концепцией были единицы. Позже я собирал фидбэк с экспертов которые были на закрытых предзащитах и выяснилось, что вообще никто не мог ответить на вопросы о железе и его стоимости, архитектуре системы и даже её интеграции в текущий процесс.
Вместо крутой нейросетки у нас была средняя, зато мы придумали из чего будет состоять пост проверки, как данные будут интегрироваться в имеющуюся систему управления производством. Мы придумали каким простым способом сотрудники смогут постоянно дообучать нейросеть, а Слава успел сделать прототип мобильного приложения для этого. Оно использовало упрощённую версию рабочей нейросетки для того чтобы помогать размечать дефекты оператору линии если это будет необходимо.
До объявления команд допущенных к финальным защитам оставалось полтора часа и мы потратили это время на то, чтобы перекроить презентацию по отзывам экспертов.
В финал мы всё-таки попали.
Защита
Финальные защиты были доступны всем. Кто-то из зала даже снимал их на видео, но залил на Ютюб лишь в 480p.
По нашей задаче в финал прошла ещё одна команда — Purple Fox и эти ребята были хороши. Мы выступали предпоследними и могу сказать, что от всех прослушанных мной защит остались только положительные впечатления. Отдельно радовало, что команд из регионов в финале тоже было достаточно.
К отбору финалистов организаторы подошли так же тщательно, как к отбору задач. Случайных людей в финале вовсе не было.
3 Всегда найдётся кто-то, кого удивит, что конкуренты соизволили сделать прототипы заранее, ведь короткое описание задач было опубликовано на сайте аж за 2 месяца до мероприятия.
Отдельно хочу остановиться на трёх защитах:
- Студенческая команда CVisioners решила задачу с агломератами. Причём после защиты у них нечего было даже спросить — они показали очень стройный продукт, который выглядел так, что я бы лучше не придумал и при этом ещё и работал, пусть и по готовому видеофайлу.
- Наши конкуренты из Purple Fox готовились к мероприятию сильно заранее. Кто-то из зала этому даже возмутился3. Их сетка хорошо делала ровно то, что нужно, а остальное их не интересовало. Была сильная защита по которой сразу было видно, что ребята хорошо разбираются в вопросе, а не пытаются вешать лапшу на уши.
- Команда Волки из школы 21, которых мы ещё накануне окрестили «волки из школки» решили задачу с поросятами. Их защита была самая фановая из всех какие я вообще когда-либо видел живьём. Спикер волновался и от этого настолько плохо импровизировал, что вызывал ровно обратный эффект, а весь зал орал от смеха не останавливаясь. Впрочем, специфика задачи позволяла. Шутки про свинячий тиндер и поросячью полицию на сигвеях так просто из головы не выкинешь. Этот парень сделал вечер всем кто был в зале.
Нашей основной тактикой было не забыть сказать в конце «А сейчас, я прошу Кирилла запустить презентацию с нашим решением для правой палочки»
Мы защитились без сюрпризов.
Итоги
После просмотра всех защит мы не очень надеялись на какие-то призовые места. Особенно в смешанном режиме, когда жюри приходилось оценивать решения совершенно разных задач.
В итоге награды распределились так:
Место | Команда | Задача | Приз |
---|---|---|---|
🥇 | CVisioners | Детектирование агломератов (#7) | 300 000 ₽ |
🥈 | 1984 | Детектирование СИЗ (#3) | 100 000 ₽ |
🥉 | EmptySet | ? | 50 000 ₽ |
4 Буквально так подписаны его имейлы
Макс с Марса4 отдельно выдал утешительные призы по своему треку. Purple Fox досталась большая коробка Твикса, а нам несколько блоков Сникерсов и Марсов поменьше. Глядя на проплывающий перед глазами ящик Твикса, на который после этих двух дней уже никто не мог смотреть, Кирилл пробухтел: «впервые рад тому, что мы не первые в треке.» В итоге по пути домой он просто раздавал полученные шоколадки случайным прохожим.
Prohack 4 оказался клёвым отраслевым хакатоном с отличной организацией и интересными задачами. Нам помогали со всем, что мы просили, и ответы обычно находились быстро. С питанием проблем не было и на него можно было не отвлекаться, а в конце организаторы даже закатили вечеринку, правда к тому моменту абсолютно все уже были без сил.
Отдельно доставили эксперты: с Максимом после этого мероприятия у нашей команды завязались некоторые отношения. Даже технологические партнёры помогали нам и всячески болели за то, что мы показывали. Ребята из BellSoft прямо на мероприятии подкинули нам совместимую с Джетсоном MIPI-камеру, которая работала значительно лучше и быстрее нашей вебки.
В общем: 10 свиноматок из 10. Один из лучших хакатонов на каком мы выступали. Поедем в следующий раз, если Крок снова решится повторить его в очном режиме.