Fley's flow
121 subscribers
31 photos
1 video
32 links
In this channel I share my experience in CV/ML and what to do and not to do to be successful in the profession

Middle CV/ML Engineer

Contacts:

Telegram: t.me/fleyderer
Github: github.com/fleyderer
LinkedIn: linkedin.com/in/fleyderer/
Download Telegram
Channel created
Зачем🟡

Я в течение продолжительного времени попадаю на каналы людей в Telegram, которые состоят из публикаций наподобие:

"Мне 20 лет, я имею 21 год опыта работы в Тинькофф/Яндекс/etc., являюсь призером и чемпионом N>100 олимпиад, рассказываю о своих достижениях".

Я долго думал, какую эмоцию испытывать при виде подобных публикаций и людей в принципе.
Зависть? Я искренне рад тому, что такие люди есть, и даже тому, что я не среди них.
Негодование? Тоже нет – ведь они потратили много сил на достижение этих целей, они явно заслужили свои успехи.
Однако никакой мотивации от подобных публикаций не возникает, потому что это говорят люди с совершенно иным опытом, и заветный вопрос "А как получить первый оффер?" остается не то, что без ответа – с ответом, что нужно скорее покинуть бренную материальную оболочку, слиться с бесконечно вечным, созерцать великие фрактальные подобия, и вот тогда шансы на успех появятся.

Я справедливо подумал: "Может, я такой не один, и на самом деле существуют обычные люди, которые просто осваивают профессию и пытаются в ней реализовать себя? Ведь, если есть победители олимпиад, есть и призеры? А если есть призеры, то есть и те, кто на четвертом месте?"

Именно с этой мыслью я и решил создать этот канал. Я не отношусь к людям, которые легко вкатились или имеют опыт, который можно указывать в резюме (хотя я бы слукавил, сказав, что у меня совсем нет бэкграунда). Хочу честно писать о личном опыте при поиске первой работы, помочь этим опытом нуждающимся, оставить более осязаемое эхо в вечности, а также дополнительно отслеживать свой прогресс, поднимая самодисциплину.

Не исключаю, что и помимо этого найдется, что рассказать, поэтому постараюсь делать информацию интересной не только для товарищей по счастью.

#self
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Fley's flow

Название канала я попытался выбрать так, чтобы оно было созвучно с моим никнеймом и передавало смысл всей затеи.
Я совсем не отношу себя к людям, которые могут беспрекословно придерживаться расписания и работать стабильно и безостановочно; главная мотивация в моей жизни – это дедлайны. То есть, я нередко оказываюсь в ситуации, когда под учебный проект было выделено даже неприлично большое количество времени, и неспроста, а я сажусь за задачу в последний день. Однако, как правило, я даже успеваю с ней справиться и сдать вовремя. Впрочем, будет забавно, если на эти публикации наткнется какой-нибудь HR и разочаруется – зато я хотя бы честно признаю свои особенности.

И в эти особенности хорошо вписывается слово flowпоток, в котором я нахожусь, в котором стремлюсь к своим целям, при этом выдерживая баланс с собой, с окружающими и со своими интересами.

#self
Под эту задачу я даже сделал отдельную версию своего логотипа, который тоже содержит в себе некоторый поток, движение — хотел соблюсти символизм.
Еще один интересный факт — я очень люблю желтый цвет. В последнее время он заметно вписался в мою жизнь, но я долго не мог найти тот самый желтый, а когда делал изображение, нашел – #FFCC00 (Tangerine yellow). Он легко читается и запоминается, содержит инициалы канала, является для меня идеально сбалансированным, а также впоследствии я узнал, что это цвет Яндекса 🤷‍♂️

Позднее напишу более подробный пост о себе, в котором попытаюсь сделать выжимку всего жизненного опыта, по большей части не вписывающегося в резюме по той специальности, к которой я стремлюсь.

#offtopic
👍1
Навигация по каналу:

Личное:
#self – информация обо мне
#path – ключевые этапы жизненного пути
#recommend – рекомендации, что посмотреть или почитать
#offtopic – что-нибудь от себя

Рабочее:
#papers – статьи, разборы
#links – ссылки на мой контент
#soft – soft-скиллы
#hard – hard-скиллы
#learn – обучающие материалы
#code – код или ссылки на код
#cases – случаи и задачи из работы
#tips – небольшие советы
#results – результаты работы
#progress – результаты личного роста
#offer – путь к первому офферу
Обо мне

Как я говорил ранее, непосредственно к ML/DA/DS мой бэкграунд имеет слабое отношение, однако что-то же я делал эти 24 года? Этот пост я пишу для того, чтобы сложить цельную картинку моего "старта" к профессии. В силу большого количества различных событий в течение жизни, расположу по возможности в хронологическом порядке и разобью на несколько публикаций. Пост обещает быть длинным, а многое из написанного вообще не будет относиться к текущим интересам, но все же постараюсь писать нескучно.

🟡🟡🟡 лет.

Шли прекрасные нулевые годы: 2007-й был еще далеко впереди, а вера в светлое посткоммунистическое будущее пронизывала воздух, наполненный ароматом цветущих и распускающихся в конце апреля деревьев. Я жил совершенно обычной дворовой жизнью, где не было места ссорам и вражде — конфедерацией армян, азербайджанцев и русских мы гоняли бомжей камнями, часами не слезали с тютины (шелковицы), прыгали по гаражам, взрывали то, что взрывается, стреляли из всего, что способно стрелять, и вообще в полной мере осознавали свое величие, которое меркло разве что перед старшими приятелями, которые могли гулять в соседнем дворе через дорогу.

Моё счастливое детство омрачал лишь гнёт родителей и родственников, заставлявших меня читать, писать и считать. Несмотря на оказываемое сопротивление, я безнадежно проигрывал, и в 4 года научился читать, с 6 лет уже осваивал книги самостоятельно, а к 8 годам выиграл школьную олимпиаду "Кенгуру" по математике, заняв в регионе двузначное место.

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

🟡🟡🟡🟡лет.

За этот период жизни я не могу вспомнить практически ничего значимого и выдающегося — как и все, я ходил в обычную школу, занимался баскетболом, а впоследствии и легкой атлетикой, на карманные деньги посещал компьютерные клубы после занятий, дома же сидел на сайте vkontakte.ru с использованием 3G-модема от МТС, а также посещал занятия в компьютерной школе, где изучал Word, Excel, и мою среднестатистическую жизнь ничего не нарушало.

Время шло, одних лишь книг, игр и веб-скроллинга мне было очевидно мало, в связи с чем я уже в этом возрасте начал задумываться о том, чем буду заниматься в дальнейшем.

#self #path
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Подготовка к первому собеседованию, 14 дней

Прошло уже ± две недели подготовки — вспоминал алгоритмы, остановился на тренировках от Яндекса 1.0, там представлены любопытные задачи.

Если честно, то по большей части сложностей они не вызвали: как говорится, с помощью лома и какой-то там матери решил порядка 20 задач — пока хватит.

Если чуть подробнее, то действительно слегка пришлось поломать голову, но совокупно самые сложные задачи занимали порядка 1.5-3 часов и 2-3 попытки — если лениться самому продумать все тесты. Некоторые задачи были такого же уровня или даже точь-в-точь такие, какие я даю своим ученикам. С мыслью: "Если не сдам с первого раза, горе мне как преподавателю" я их все же успешно сдавал)
Выложил также репозиторий на github 😁 (надеюсь, однажды он обновится, и я все же решу все задачи).

Однако, на аналитику данных требуются не столько алгоритмы, сколько фундаментальное понимание теорвера и статистики, в связи с чем пора переключиться на повторение вузовских материалов + углублённый разбор популярных вопросов с собеседований. Часть материалов уже нашел, как будет готово — поделюсь. Там будут интересные конспекты, которые не раз пригодились мне в том числе и в СПбГУ.

#hard #progress #offer #code
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
К теме о навыках и об их применимости

После покупки премиума в Telegram захотел себе анимированный значок: пара запросов в 🔎 и 📺, 30 минут в 👉, 15 минут конвертации и результат готов:

👨‍💻

Даже если кажется, что старый опыт уже никогда не пригодится — это скорее всего не так.

#offtopic
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🟡🟡🟡🟡🟡лет.

В этом возрасте я осознал, что пора двигаться вперед — изменчивый мир под меня прогибаться не спешил, и я решительно вмешался в этот процесс.

Уже не помню, как это произошло, но мне стукнуло в голову, что я хочу организовывать турниры по различным онлайн-играм. К этому времени я уже достаточно хорошо ознакомился с компьютером, чтобы уметь открыть 🔗, 📺 и задать туда свои вопросы. Поэтому, недолго думая, я сделал арты, таблицы, логотипы, описал правила взаимодействия организаторов и игроков турниров, вступил в контакт с "холодными контактами" и успешно организовал и провел свой первый турнир.

Я понимал, что это только начало, — за этим турниром последовал еще десяток, я вошел в руководство большого количества сообществ, связанных с теми играми, где проводил соревнования, а в некоторых случаях организовывал такие сообщества самостоятельно. На пике деятельности турниры собирали 128 команд по 5+ человек в каждой (подумать только – 640 игроков, это ведь несколько лиг). Порой удавалось даже договариваться с официальными представителями игр и формировать призовой фонд исключительно из выделенных ими средств. В иных случаях в качестве призовых шли средства, полученные с рекламы. В рамках организации собственных сообществ я налаживал работу добровольцев-администраторов, да так, что мы упирались в пределы публикаций в сутки— больше 50 постов в день 💬 не пропускал. На себя я брал работу по турнирам, связям с общественностью, проводил стримы и конкурсы для участников сообществ.

Сам играть я тоже не забывал — был даже период времени, когда я планировал попасть в киберспорт. На сайте aim400kg, на тот момент весьма известном, я уверенно забирал топ-3 в тестах на скорость реакции среди всего СНГ. Великая киберспортивная карьера закончилась тем, что у меня на пике славы на год забрали компьютер, и я вернулся к обычному любительскому формату. Здесь я тоже не обошелся без самовыражения: монтировал видео, связанные с играми, изучая различные материалы, преимущественно на английском языке — уже тогда стало ясно, насколько велика разница между русско- и англоязычным сообществом с точки зрения количества информации. В это же время начал изучать 3D-моделирование, преимущественно Cinema4D в связке с After Effects.

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

Разумеется, времени на учебу, а главное – желания – практически не оставалось, но, несмотря на это, я даже плавно набирал обороты, а занятия математикой с родственниками позволили мне в некоторой степени проявить свои способности.

Если подводить черту этому периоду, на который пришелся переходный возраст, то, хоть и не без изъянов, прошел он достаточно спокойно. Теперь я был еще более готов к новым свершениям.

#self #path
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🟡🟡лет.

К этому времени я влился в сообщество "Потрачено", посвященное кривым переводам различных игр, к которому имею некоторое отношение и по сей день. Там же сделал своего первого бота, который на волне популярности в то время очень быстро набрал лимит в 10.000 друзей (напомню, что когда боты 💬 только появлялись, их запускали через пользовательские аккаунты, потому что платформа в принципе не была к этому готова).

Программирования в этом всем, кстати, практически не было. Существовал сайт, где можно было создавать гибкие шаблоны запросов и ответов для так называемого искусственного интеллекта, а также софт, позволявший отправлять личные сообщения пользователей на этот сайт, получать ответ и выдавать его пользователю обратно. Таким образом, мне достаточно было сделать большой набор гибких шаблонов для взаимодействия с пользователями, запустить нужную программу, и наблюдать. Результат превзошел все ожидания – несмотря на все особенности, общение с ботом было веселым и осмысленным, он сильно выделялся на фоне конвейерных поделок.

Самым сложным вопросом стал хостинг проекта. Первое время товарищ по сообществу за 50р./мес. держал его на своем ПК (надо ли говорить о том, с каким downtime мы имели дело?). Конечно, долго так продолжаться не могло, и я изучил вопрос онлайн-хостинга. Я даже не могу передать ту боль, которую испытал, когда узнал, что мой Linux-сервер – это одна лишь командная строка, через которую нужно поставить рабочий стол и все сопутствующее. С учетом всех допущенных оплошностей, на следующий день я увидел заветный рабочий стол  Ubuntu. Однако, с объемом ОЗУ ≈256 Мбайт, это был скорее рабочий стул, который при запуске 🔗 становился и вовсе нерабочим. Тогда же я узнал и о файлах подкачки и прочих премудростях для нищих. Но сам хостинг оказался неудовлетворительным, и конечный выбор остановился на RuVDS, который был на то время и удобным, и самым недорогим – за смешные 99р./мес. я получил терпимую функциональность и поддержку. На этом на ближайшие пару лет вопрос решился.

Помимо прочего, я длительное время принимал участие в одном из семейных проектов – ежегодной всероссийской конференции, где мои обязанности в раннем возрасте ограничивались базовыми задачами "подай-принеси", а к 16-ти годам и до недавнего времени (здесь немного отступлю от хронологии) я принимал все большее участие в вопросах, связанных с техническим обеспечением и взаимодействием с участниками. Когда наступил COVID-19, работа усложнилась еще и тем, что часть участников присутствовала очно, часть заочно, и в мои задачи входило обеспечение возможности всем увидеть и услышать друг друга. Задача осложнялась особенно тем, что среди них были и люди весьма почтенного возраста, и просто со своими особенностями — нужно было набраться терпения.

#self #path
Please open Telegram to view this post
VIEW IN TELEGRAM
🟡🟡лет.

Все накопленные на тот момент увлечения я лишь продолжал и развивал – участвовал и выигрывал в небольших конкурсах, мои видеоролики публиковались в официальных сообществах игровых проектов. Мы наращивали сотрудничество с сообществами близкой тематики — например, несколько раз исключительно из дружеских побуждений наши рекламные публикации оказывались в небезызвестном сообществе "Мои любимые юморески" — просто потому что неплохо складывалось личное общение с админом, который весьма альтруистично подходил к подобным вопросам. В определенный момент суммарная аудитория сообществ, которые находились под моим управлением, составляла порядка 300.000 человек, что давало мне некоторые возможности для направления аудитории на личные проекты, чем я время от времени пользовался в своих целях, или же помогал друзьям.

На тот момент в компьютерной школе я уже прошел базовые пользовательские курсы, и началось время программирования. Python как учебный язык только начал набирать обороты, поэтому учился я все еще на Pascal ABC NET, о чем, впрочем, не жалею. В рамках курса мы решали задачи для начинающих — простые задачи из геометрии, математики, ряды Тейлора, робот на координатной плоскости, базовые сортировки и так далее. Я всегда в таких вещах был "на передовой" — пытался решить эти задачи быстрее всех, что нередко удавалось, и в целом легко и быстро схватывал идеи алгоритмов.

Учеба в школе становилась всё проще, оценки всё лучше, личная жизнь кипела, да и вообще всё складывалось замечательно. Однако, над моей головой нависла угроза из трех страшных букв, и практически каждый из тех, кто прочитает этот текст, тоже в свое время прошёл (или пройдет) через этот этап.

#self #path
Please open Telegram to view this post
VIEW IN TELEGRAM
pyrssaбиблиотека для анализа временных рядов 📈

Давненько тут не было публикаций, но не потому что ничего не происходило. Сегодня хочу рассказать немного о своей магистерской дипломной работе в СПбГУ, которая продолжается и по сей день – библиотека для анализа временных рядов на основе метода Singular Spectrum Analysis.

Данный метод имеет мощную теоретическую базу с большим количеством замечательных свойств: позволяет производить разложение временных рядов на отдельные составляющие (тренд, период, шум), строить различные виды прогноза, заполнять пропуски (как частный случай прогноза, разумеется), с помощью итеративных алгоритмов позволяет улучшать разделимость компонент ряда, если они смешиваются между собой, находить момент разладки временного ряда (когда он меняет свою структуру, временно или навсегда), имеет приложение к многомерным данным или сразу к нескольким временным рядам (multivariate time series), и многое другое.

В рамках работы мне предстояло адаптировать существующую библиотеку Rssa для R на язык Python. Сделано это в таком виде, потому что переписывать заново все структуры данных и кучу рутины бессмысленно, а потери в скорости исключительно константные — перевод типов данных, да и только.

Работа оказалась объемной в силу большого количества непредвиденных сложностей адаптации типов данных, косяков в сторонних библиотеках, необходимости в полностью новой реализации графиков, написания документации, тестов, примеров, да и в целом в оформлении работы в приличную библиотеку.

Пользоваться ей можно уже сейчас, удачи только разобраться в теории, потому что для применения метода на практике сперва нужно попотеть :)

📖 Cписок литературы (увы, не бесплатно):
Singular Spectrum Analysis with R (Use R!)
Analysis of Time Series Structure: SSA and related techniques

#self #code #hard
Please open Telegram to view this post
VIEW IN TELEGRAM
🆒2
Трекинг игроков в волейболе: связка YOLOv8 + DeepSort 📼

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

Задача

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

Результат

На текущий момент удалось отладить связку YOLOv8 для детекции игроков и DeepSort для трекинга, OpenCV для проекции позиций треков на плоскость площадки, а также сверху прикрутил несколько эвристических фильтраций, чтобы отсеивать ложные детекции и неправильные треки. Более или менее адекватно оформленный ноутбук с кодом и пояснениями захостил вот здесь.

Последнее видео с лучшим результатом вот здесь.

От себя добавлю, что первоначальная установка TensorFlow для использования возможностей CUDA — это то еще приключение на 20 минут. Особенно весело было после установки узнать, что YOLOv8 переехал с TensorFlow на PyTorch 🔫🐻

TODO:

1) Определение игрового номера игрока — опираясь на эту информацию уже можно будет подводить статистику по игровым партиям.
2) Определение и трекинг мяча — нужно обучить YOLO отдельно на синтетических данных с игровыми мячами – задача несложная, но кропотливая, на этой основе уже можно будет делать выводы о розыгрышах.
3) Определение игрового действия — это уже из области легкой фантастики, но тоже реально, если удастся решить ранние задачи.

Также мне всегда интересна любая обратная связь, хотя, конечно, посты такие, что ни добавить, ни убавить.

#self #hard #code
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Алготрейдинг 💼

Предчувствуя очередное "Разбежавшись прыгну со скалы" от российского рынка, шустро набросал код для выставления стоп-ордера по рыночной цене в Tinkoff Investments API 😁

Сделаю апдейт, если все пройдет успешно (если нет — удалю пост🙂).

UPD: ИИС на внебиржевом рынке не торгуется, заявка успешно стоит, но смысла в ней нет ⭐️

#code #offtopic
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥1
Поиск работы, 69 дней 📣

Долго я не писал ничего на эту тему, хотя уже есть некоторые движения.

👀 За это время я полностью прошел курс по SQL: Практический курс для новичков по SQL и PostgreSQL (Илья Фофанов).

Опишу кратко: ранее в рамках вуза уже видел SQL, знал материал до INNER/OUTER JOIN и подзапросов, хотел заглянуть дальше, плюс расширить кругозор. Со своей задачей курс справился отлично: минимум теории, максимум практики, повествование сопровождается советами бывалого человека. Если нужен SQL на уровне побочной работы, типа Data Engineer, то хватит с головой. Курс занял 5 дней (Прямо как обещают на обложках учебников).

👀 Также я понял, что необходимо укреплять фундамент, поэтому повторно прошел курс теории вероятностей. Не так, как это часто в вузе бывает, а на любых не слишком понятных мне моментах я старался уйти вглубь (наконец-то руки дошли до доказательства, откуда же в нормальном распределении появляется множитель с числом 3⃣). В совокупности это заняло порядка 14 дней. Взял за основу вот эту книгу: Чернова Н. И. Теория Вероятностей.

Очень легко читается, много подробностей: местами лишних, местами спорных, но в совокупности для второго (❗️) прохода по ТВ очень приятная книга. Также вся эта тема сподвигла меня на ведение рукописного конспекта, который я буду со временем дополнять.

👀 Параллельно подбивал резюме и проекты, немного наполнял контентом свой Github, подавал резюме в компании.

Результат пока следующий: 4 заявки, из которых:

1 – без ответа;
1 – с негативным (уже нашли человека);
1 – с собеседованием и жду тестовое;
1 – с успешным первым тестовым и отправленным вторым.

Есть чувство, что второе тестовое тоже хорошее, время покажет.

🖼 Картинка к посту – шедевр. Мне всегда нравилось представлять, что происходит в этот момент у бедных фотомоделей в голове: "Господи, что я тут делаю?", да и эти улыбки – им анекдот на питоне написали?

class Man:

‎ ‎ ‎ ‎ def _ _init_ _(self, hat):
‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ self._hat = hat
‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ self.fits = True

#hard #learn #progress #offer
Please open Telegram to view this post
VIEW IN TELEGRAM
👥 Собеседование

Если кратко, то собеседование можно описать словом кринж (от англ. to cringe, прим. автора).

Мне пришло в голову начать рассказ о себе вообще не с профильных вещей: рассказать о левых ЯП, которые я тоже знаю и использовал, потом начал говорить про свой МаТеМаТиЧеСкИй бэкграунд, заявил, что хорош в теорвере, сразу же получил запрос "Сформулируйте ЦПТ Ляпунова", на что я неловко парировал "Знаю только в классической формулировке" и сказал что-то невнятно-неточное, но в общем по теме.

Когда дошло до матриц, попросили обратить матрицу размера 2х3. Я с умным видом заявил, что дострою рядом единичную матрицу и проведу элементарные преобразования, на что меня вполне справедливо прервали фразой "На самом деле, эта матрица необратима". МаТеМаТиК: забыл, что обратимость матриц требует квадратной формы. Через полчаса после собеседования вспомнил, что можно было бы отразить удар псевдообратной матрицей (да-да, тот самый момент, когда понимаешь через несколько часов, как надо было ответить хулигану в споре, чтобы все закончилось в твою пользу). Делаю вывод: надо пройтись и по линейной алгебре тоже.

Многие вопросы я сразу отсекал фразами наподобие "Теорию алгоритмов я не знаю, знаю только практику" (чукча не читатель — чукча писатель). По поводу TF и PyTorch были вопросы, но я даже ONNX еще не трогал: сказал, зачем он идейно, не более. Диалог получился тупиковый: спрашивать почти нечего, а обсуждать не выходит, итог: сошлись на тестовом задании.

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

С теорией вероятностей у меня все хорошо в том смысле, что я достаточно точно оцениваю вероятности событий в своей жизни, поэтому не стал удивляться, что тестовое задание пока не прислали. Буду верить, что это потому что люди заняты своими делами... 🙂

Stay tuned 👤

#offer
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚1
Тестовое задание: часть 1 ✍️

Как я ранее писал, мне после собеседования обещали тестовое задание — вот и оно.

Формулировка задания 📁

Используя PyTorch, обучить модель классификации лица по 5 основным эмоциям (angry, sad, neutral, happy, surprise). На выходе получить модель, логируя результаты в tensorboard, сравнить accuracy на train-е и валидации. Конвертировать модель в формат ONNX и выполнить инференс в ONNX Runtime. Скрипт должен иметь возможность получать изображение как с Web-камеры/видео, так и из файла.

Таким образом, требуется прислать архив (или ссылка на google colab), содерджащий все этапы обучения модели, а также конвертированный бинарный файл и скрипт инференса.

Срок — 2 дня.

Первое впечатление 🐻

На собеседовании я признался, что:

1) Модели в PyTorch я не обучал: ранее обучал лишь на TF или использовал предобученные в PyTorch.
2) Из ONNX слышал только эти четыре буквы и знаю, зачем они нужны, но сам не трогал.
3) Вполне логичный вывод из пункта 2, что инференс моделей я не делал.
4) JavaScript не знаю (почти) и не пользовался (может, это фантомное воспоминание, но такой вопрос как будто был).

А также дополню:

5) С TensorBoard я ранее тоже не взаимодействовал.

Первый вопрос, который возник: что же я делал все эти годы?
Второй: Возможно ли за 2 дня изучить PyTorch, TensorBoard, ONNX, ONNX Runtime и JS?
Третий: Это стресс-тестовое задание, которое специально подбивалось под то, чего я не умею, чтобы проверить меня на прочность? 🤔

Процесс работы

0⃣ Нулевой день

На самом деле, у меня было еще несколько часов за день до решения задания, которые я потратил на изучение известных датасетов, моделей, SOTA-решений, в какую сторону правильнее копать, плюс куча полезных ссылок, связанных с подбором параметров для обучения, на которые было удобно ссылаться впоследствии.

Что в итоге:

Датасет – FER-2013. ЧБ-изображения размера 48х48 в количестве 36к.
Модели – VGG, ResNet. Показывали в среднем более высокое качество, часто используются. EfficientNet хорошо себя проявил на другом подобном датасете, но вполне возможно, что разница в 6 лет между этим датасетом и моделью сыграла свою роль в ее популярности.

1️⃣ Первый день

Сперва я занимался предобработкой датасета, изучив баланс классов и сами изображения для каждого класса. Вердикт: не оч. Неудивительно, что SOTA-решения показывают точность около 75%, с такими-то рожами... Но, в связи с тем, что это единственный хорошо изученный и одновременно небольшой датасет, полюбить пришлось и козла.

Первым выбором стала модель VGG19, усовершенствованная версия которой светилась среди SOTA-решений этого года (Спустя 10 лет не только я оказался в этом богом забытом месте). SOTA-версию идейно я понял, а вот технически не понял, поэтому не стал юзать, хотя можно было бы изучить. Просто не захотел напороться на подводные камни там, где имел слабое представление и кучу зависимостей от старых версий библиотек.

К концу первого дня у меня была первая готовая модель, с учетом первой пробы пера обучения на PyTorch и логгирования в TensorBoard, а также ударов всеми частами тела о CUDA Out Of Memory посреди процесса, которые, конечно, не решались ни одним известным способом, потому что повторная загрузка модели съедала видеопамять, а назад не возвращала ни при каких обстоятельствах.

Точность: 73%. Близко к SOTA, за исключением того, что у меня лишь 5 классов, а не 7, как в изначальном датасете.

На этом день закончился.

#offer
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🍌1