«Полковник приходил нас хайрить, но мы уже зарабатывали больше, чем он». Как лейтенант запаса, призёр Kaggle из Минска изучает компьютерное зрение в Германии

25 октября 2018, 09:12

Артём Санакоев учился на факультете прикладной математики и информатики и военной кафедре БГУ. На последних курсах он увлёкся компьютерным зрением и решил получить PHD в Гейдельбергском университете. dev.by поговорил с лейтенантом запаса, победителем соревнований на Kaggle, PhD студентом в Computer Vision о его опыте в ИТ и учёбе за границей.

Первые проекты: покер и трекер

Родился я в Горках, в семье инженеров-строителей. Где-то с 6 класса программировал на Pascal и участвовал в школьных олимпиадах по математике и физике, часто занимал призовые места. Я, в отличие от других подростков, точно знал, кем стану: математиком либо программистом.

В 11 классе на олимпиаде МФТИ по математике я взял диплом I степени, который равнялся 100 баллам единого государственного экзамена по математике. Я мог поступить в Высшую школу экономики в Москве, на аэрокосмический факультет в МФТИ и другие престижные российские вузы. Но я сказал «ай, не хочу» и остался в Минске. Сдал ЦТ и пошёл на ФПМИ, на кафедру дискретной математики и алгоритмов, а с третьего курса начал заниматься также на военной кафедре (это как дополнительное занятие, если хочешь получить воинское звание).

Где-то на третьем курсе я начал знакомиться с немецкой наукой, ездил на стажировки в Германию, участвовал в белорусско-немецком исследовательском проекте. Мы работали над ультразвуковым сканером конечностей человека без внедрения ионизирующей радиации — по сути, это альтернатива рентгену. Эти исследования мы проводили для компании UltraOsteon GmbH, которая занимается медицинским оборудованием. Конкретно я на этом проекте разрабатывал алгоритм обработки ультразвуковых данных. Этот алгоритм строил 3D реконструкцию кости человека по набору 2D контуров и анализировал кость на предмет повреждений и деформаций.

Меня не особо привлекали такие языки программирования, как C#, но мне всегда нравился С++ — фундаментальный язык, который позволяет иметь тонкий контроль над всеми ресурсами системы. Но в 2014 году компании, которым нужны были С++ разработчики, можно было сосчитать по пальцам.

К поиску первого официального места работы я подошёл основательно. Viaden, которая разрабатывала кроссплатформенный клиент для игры в iPoker, показалась мне интересной. К тому же я немного играл в покер. Мне перезвонили буквально через 4 часа после собеседования и предложили на $200 больше, чем я просил. Но с условием, что больше не буду ходить по собеседованиям. Я, долго не думая, согласился. Просился на полставки, но мне сказали, что 4 часа — это вообще ни о чём, поэтому договорились на 6-часовой рабочий день. График был гибкий: мог сегодня 8 часов отработать, завтра 4, а по четвергам вообще не ходил на работу, потому что у меня была военная подготовка.

Мне очень повезло с ментором и командой, до сих пор вспоминаю эту компанию с ностальгией. Мы писали универсальный клиент для покер-румов под все платформы, кроме десктопных. Я занимался ядром всего клиента, процессами взаимодействия с сервером. Благодаря этому проекту я заглянул в тёмные уголки С++, а их очень много, плотно поработал с синхронизацией процессов и потоков в высоконагруженном проекте. Самый важный скил, который я там приобрёл, — умение разбираться в чужом С++ коде. Обычно это сложно, но в iPoker переменные сами за себя говорили. Я до сих пор пользуюсь этим навыком. Иногда быстрее разобраться в чужом коде, чем написать новый.

Если ты разрабатываешь клиент iPoker, это ещё не значит, что ты умеешь играть в покер. Но в нашей команде периодически проходили турниры по покеру, играть более или менее умели все. В первом турнире я, можно сказать, слился, не вышел в призёры. Но через полгода взял матч-реванш: занял первое место. Спустя год моей работы в компании, к сожалению, проект свернули в Минске и перенесли в Болгарию.

Когда минскую команду iPoker распустили, мой ментор из Viaden посоветовала своего экс-работодателя и даже написала ему в Skype, что я ищу работу.

Интервью в новую компанию было слегка туманным: мне ничего не рассказали о продукте, который там разрабатывают. Сказали только, что есть какая-то маленькая штучка, даже не уточнили, что это спортивный гаджет. В общем, я не понимал, что там делают, но, когда пришёл оффер, принял его.

После трудоустройства мне, конечно, выдали этот загадочный гаджет, и я наконец-то понял, какой продукт разрабатывает компания PIQ — спортивный трекер, который определяет силу и скорость удара (например, в боксе или теннисе), высоту прыжка или угол удара (в гольфе).

Вместе с сенсором мне выделили камеру GoPro, потому что наше устройство должно было взаимодействовать с камерой. Мне нужно было заниматься акселерометром, отслеживать сигнал, который с него поступает, снимать показания и разбираться, почему сенсор «уплывает». Дело в том, что у акселерометра есть погрешность, и наш сенсор, когда лежал на столе, почему-то куда-то двигался. Нужно было это поправить.

«Написал десяти профессорам». Как попасть в Германию для погружения в Computer Vision

Будь у меня тогда знания, которые есть сейчас, я бы решал эти задачи по-другому и справился гораздо быстрее. Мне вообще кажется, что я всё тогда делал неправильно, слишком прямолинейно. Зато в этой компании я начал погружаться в Computer Vision, потому что мне нужно было детектировать сенсор на видео, распознавать устройство, считывать с экрана тепловой код, т. е. его физический адрес, чтобы связать наш гаджет с мобильным телефоном.

Я читал научные статьи по компьютерному зрению, проходил обучение в школе анализа данных «Яндекса», но на практике впервые начал обучать нейронные сети только в Гейдельбергском университете. Попал я сюда, кстати, отчасти благодаря связям, которые завёл ещё в вузе. Я ездил в Германию на стажировки, общался с профессурой и в одной из моих поездок познакомился с профессором, который занимается анализом биологических изображений. Даже хотел писать с ним дипломную работу, но потом одумался, всё-таки клетки — это не то, чему я бы хотел посвятить так много времени.

Когда решил поступать в Германию, я написал, наверное, десяти профессорам в разные университеты с просьбой взять меня в аспирантуру. Многие просто проигнорировали. Профессора — занятой народ. Если они прямо сейчас не ищут помощника на кафедру, они просто игнорируют сообщение. Особенно это распространено в Германии и Швейцарии. Тогда я прямо негодовал от этого, а сейчас и сам грешу такой привычкой: студенты пишут, а мне некогда ответить.

В итоге откликнулось пять профессоров: из Бонна, Дрездена и три из Гейдельберга. К одному из них, который занимается компьютерным зрением, я и попал. Мы с ним несколько часов по Skype разговаривали на английском, и в конце он сказал: «Не нужен тебе этот TOEFL, у тебя нормальный английский. Подготовь презентацию для комиссии, чтобы получить стипендию, и приезжай». Весной я приехал. Выступало около 50 человек, а стипендии дали троим, я был в их числе. Если бы не вошёл в эту тройку, я бы не расстроился. Профессор сказал: «Попробуй здесь, если не получится, найдём деньги в другом месте».

Гейдельберг, где я живу уже четвёртый год, входит в топ-5 самых дорогих городов Германии. Но мне хватает того, что я зарабатываю, несмотря на то, что жизнь здесь дороже, чем в Минске. Однокомнатная квартира стоит около 500-600 евро, и желательно знать немецкий язык, чтобы её получить. Сообщения на английском языке арендодатели зачастую игнорируют. Часто говорят: «Мы вам перезвоним» — и не перезванивают. Я пробовал искать жильё сам, но за две недели так ничего и не нашёл. На первый месяц устроился в двухэтажном гестхаусе от университета, где деревянному дому было лет 100, наверное. И стоила комната там 600 евро в месяц. Хотел снять комнату в двухэтажном новом коттедже с двумя ванными комнатами, большой кухней, террасой и уборщицей, но подвернулся более дешёвый вариант студенческого жилья прямо в кампусе университета.

Стилизация изображений с помощью глубоких нейронных сетей

Один из моих проектов в Гейдельбергском университете — стилизация изображений с помощью Generative adversarial networks — глубоких нейронных сетей, которые состязаются друг с другом без участия учителя.

Мы вычленяем стиль конкретного художника по его картинам и совмещаем с любым другим изображением. Эта концепция не нова, похожие разработки есть, например, у Prisma. Чем мы отличаемся:

  • Мы пытаемся понять стиль художника по группе его картин, а не по одной работе, как делают в стартапах. Использование группы картин историки искусств валидируют как правильный способ понять стиль, т. к. стиль — это групповая характеристика, а не одиночная.
  • Контент сохраняется в той степени, в какой этого требует стиль. Например, для Поллока почти весь контент будет выброшен, для кубизма Пикассо будут игнорироваться высокочастотные текстуры, для ван Гога мелкие детали будут выкинуты и т. д. Это достигается за счёт хитрой целевой функции, которая адаптируется под конкретный стиль во время тренировки.
  • Можем генерить стилизации в действительно большом разрешении (4MP, например). Разрешение теоретически не ограничено, но картинка может не влезть в видеокарту.

Наш алгоритм может отрисовывать до 10 картин в секунду в HD разрешении. Прототип работает на компьютере, в теории можем запустить его и на телефоне, но у нас нет такой цели. Чтобы это сделать, нужно как минимум полгода работы. Зачем, если есть Prisma? Мы делаем это ради исследования.

Помимо этого я учусь управлять оравой студентов-бакалавров и студентов-магистрантов. Если ученик толковый, тогда мы с ним пишем научную статью. Но у меня нет цели выпустить как можно больше статей, чтобы потом скрепить их степлером, положить в обложку и получить диссертацию. У нас немного не так: нужно эти статьи пропустить через себя, нельзя запихнуть в одну большую работу несовместимые вещи. В моей сфере можно агрегировать статьи, переписывать их и делать на их основе кандидатскую работу. Слышал, что в консервативных сферах запрещено использовать уже опубликованные статьи в кандидатских. Поэтому люди несколько лет пишут их и не публикуют.

В Германии, в отличие от Беларуси, более лояльное отношение к студентам. Преподаватели ставят хороший балл, если человек старался. А то, что там ни одного правильно решённого задания — не важно. И студенты этим злоупотребляют, ленятся, ищут обходные пути. Я считаю, что если задача решена неверно, то можно, конечно, учесть старания, но минимально.

Зато в повседневной жизни немцы очень правильные, и чаще всего эта правильность — показная. Все поступают так, как написано в конституции, но, когда начинаешь разбираться, узнаёшь, что не всё так просто. Иногда их правильность выглядит слишком приторно. Например, когда я только приехал в Германию, столкнулся с такой ситуацией: администратор дал студенту доступ к компьютеру и серверам. Во время работы у него вдруг завис сервер. Я говорю ему: «Перезагрузи. В чём проблема?». А он сидит, потупившись, и отвечает, что ему администратор не давал разрешения на перезагрузку, поэтому он не может это сделать.

Вот ещё пример: обычно на конференциях есть стандарты для постеров, на которых нужно представлять свою работу. На сайте написано, что размер доски должен быть не более двух метров, а размер постера в два раза меньше. Немцы делают всё по правилам, от этого их постеры даже не видно на фоне американских, размеры которых несопоставимы с немецкими.

Почему Kaggle не средство заработка

Прошлой весной тяга к мозговому соперничеству привела меня на Kaggle. Первое моё соревнование было посвящено подсчёту морских львов. Природоохранная организация NOAA Fisheries (National Oceanic and Atmospheric Administration), которая следит за их популяцией, сделала серию снимков с дронов, и нам нужно было посчитать, сколько там львов и каких: малыши, подростки, молодые самцы и самки. Раньше, наверное, NOAA Fisheries вручную считала, тратя на это месяцы работы. А потом решила автоматизировать труд и выставила на Kaggle призовой фонд в $50 тысяч.

Трудность в том, что эти животные кучкуются, их может быть до 500 штук на одном фото.

Мы c другом бодро вышли ко второму месту, а после того, как организаторы провели тестирование на закрытой части тестовой выборки, мы слетели со второго на четвертое место. Но мы не расстроились, а скорее наоборот, захотели ещё раз поучаствовать.

В этот раз решали задачу по сегментации машин. Компании, которая продаёт подержанные автомобили, нужно было отделить фон на фото от машины. Раньше они, наверное, индусов для этого нанимали. За первое место давали $12 тысяч. Я уже был на 3-ем месте, а Саша Буслаев на 2-м. Мы с ним объединились, взяв в команду парня из Калифорнии Владимира Игловикова, и заняли 1-е место.

Мне нравятся соревнования, для меня это азарт, игра, но как средство заработка я их не рассматриваю, слишком много участников и рисков. Я приверженец работы, за которую гарантированно заплатят. К тому же рекрутеры пишут постоянно, в основном из автомобильных компаний вроде BMW, Porsche, но я нечасто им отвечаю. Возможно за полгода до окончания учёбы займусь поиском работы.

«Не собираюсь оставаться в Германии»

Возвращение в Беларусь не исключаю, там хорошее движение в ИТ началось, я слежу за новостями. 

Про создание ИТ-роты слышал и понимаю, зачем это делается. В 2014 году к нам на кафедру приходил полковник и хайрил нас в эту роту — возможно, это было что-то другое, но они хотели привлечь именно математиков-программистов. Наши ребята сказали: нет, спасибо. Все к тому моменту уже работали в ИТ-компаниях и получали больше, чем этот полковник.

Оставаться в Германии не планирую, здесь нет интересных для меня ИТ-компаний, где я мог бы заниматься исследованиями, разве что стартапы в Берлине. Автопром слишком консервативен, в Штаты я не стремлюсь. Мне больше по душе Канада, Швейцария, Британия, Франция и, конечно, Беларусь.

Обсуждение