Примечание: нарушу свое же правило о локальности контента отрывком из статьи камрада sunset на ods про собеседования Computer Vision Engineer
==================================
Взгляд со стороны работодателя
Чтобы понять, что спрашивают на собеседовании на компьютр вижн инженера, нужно сначала понять какие навыки нужны от вас работодателю.
Во-первых, от кандидата требуется знание что такое machine learning в теории. Люди, которые везде пихают нейросетки потому что ничего другого не знают, не принесут большой пользы бизнесу. В основном потому, что не смогут сформулировать задачу и смоделировать мир. "Модель" - это ведь просто преобразование окружающей действительности в математическую формулировку; уметь это делать важнее, чем знать сколько слоёв в VGG.
Во-вторых, понятно, что нужны навыки, специализированные в какую-то часть стэка. Если собеседуетесь за диплёрнинг, то нужны навыки диплёрнинга. Если в вижн, то это segmentation, detection, итп. Если в Lidar, то методы инференс на point clouds. Ну итп. Вот здесь есть хороший обзор того, что используется в Perception стэке (см. секцию V [https://arxiv.org/pdf/1906.05113.pdf]) Идеальный кандидат будет знать, какие основные методы решения соответствующих задач и будет уметь объяснить детали методов, особенно в какой-то одной части где они эксперт. Кандидат также сможет объяснить преимущества и недостатки методов, так как на работе нужно будет уметь выбрать, какую модель строить. Это как бы понятно.
Но секрет, который все знают и боятся признаться, это что накодить саму модель - это самая простая часть диплёрнинга. Ну что там, сотня строчек на керасе или торче, а все кишки уже написаны до вас. Сложная часть - это выбрать какую модель писать, как подфайнтюнить лосс и пофиксить мелкие баги... ну и конечно, препроцессить фичи.
Например я недавно для персонального проекта тренировал простенький SSD. Оказалось, что препроцессор фич просто медленный, и сетка раз в 50 быстрей обучается чем получает фичи от программы на питоне. Поэтому мне пришлось переписать препроцессинг в тензоры на GPU, что совсем нетривиально и заняло пару дней (сама сетка для SSD пишется за 10 минут). Умение отдебажить программу и сделать алгоритм более эффективным - это не диплёрнинг, но препроцессингом фич для своих моделей заниматься будете именно вы.
А значит от вас нужен кодинг. В вижне вообще очень много кодинга по сравнению со, скажем, NLP (преобразования изображений далеко не все идут из стандартных библиотек, аугментации практически везде есть domain-specific, итп) и кодинг этот нетривиальный.
Ещё пример, хотите вы посмотреть, насколько хорошо сенсоры распознают велосипедистов, которые близко к роботу. Надо для этого пройтись по размеченному датасету (скорее всего в каком-нибудь биг дэйта фрэймворке), и найти ближайшего велосипедиста (быстрый поиск ближайших объектов), и потом придумать как сделать полученные данные diverse, чтобы скажем 100 экземпляров были из разных сцен, а не 100 кадров одной сцены. Когда я представляю весь кодинг, который для этого и для других подобных задач нужен, сразу понимаю, что уровень знания алгоритмов должен быть высокий, выше чем в какой-нибудь гугл или фэйсбук.
==================================
Взгляд со стороны работодателя
Чтобы понять, что спрашивают на собеседовании на компьютр вижн инженера, нужно сначала понять какие навыки нужны от вас работодателю.
Во-первых, от кандидата требуется знание что такое machine learning в теории. Люди, которые везде пихают нейросетки потому что ничего другого не знают, не принесут большой пользы бизнесу. В основном потому, что не смогут сформулировать задачу и смоделировать мир. "Модель" - это ведь просто преобразование окружающей действительности в математическую формулировку; уметь это делать важнее, чем знать сколько слоёв в VGG.
Во-вторых, понятно, что нужны навыки, специализированные в какую-то часть стэка. Если собеседуетесь за диплёрнинг, то нужны навыки диплёрнинга. Если в вижн, то это segmentation, detection, итп. Если в Lidar, то методы инференс на point clouds. Ну итп. Вот здесь есть хороший обзор того, что используется в Perception стэке (см. секцию V [https://arxiv.org/pdf/1906.05113.pdf]) Идеальный кандидат будет знать, какие основные методы решения соответствующих задач и будет уметь объяснить детали методов, особенно в какой-то одной части где они эксперт. Кандидат также сможет объяснить преимущества и недостатки методов, так как на работе нужно будет уметь выбрать, какую модель строить. Это как бы понятно.
Но секрет, который все знают и боятся признаться, это что накодить саму модель - это самая простая часть диплёрнинга. Ну что там, сотня строчек на керасе или торче, а все кишки уже написаны до вас. Сложная часть - это выбрать какую модель писать, как подфайнтюнить лосс и пофиксить мелкие баги... ну и конечно, препроцессить фичи.
Например я недавно для персонального проекта тренировал простенький SSD. Оказалось, что препроцессор фич просто медленный, и сетка раз в 50 быстрей обучается чем получает фичи от программы на питоне. Поэтому мне пришлось переписать препроцессинг в тензоры на GPU, что совсем нетривиально и заняло пару дней (сама сетка для SSD пишется за 10 минут). Умение отдебажить программу и сделать алгоритм более эффективным - это не диплёрнинг, но препроцессингом фич для своих моделей заниматься будете именно вы.
А значит от вас нужен кодинг. В вижне вообще очень много кодинга по сравнению со, скажем, NLP (преобразования изображений далеко не все идут из стандартных библиотек, аугментации практически везде есть domain-specific, итп) и кодинг этот нетривиальный.
Ещё пример, хотите вы посмотреть, насколько хорошо сенсоры распознают велосипедистов, которые близко к роботу. Надо для этого пройтись по размеченному датасету (скорее всего в каком-нибудь биг дэйта фрэймворке), и найти ближайшего велосипедиста (быстрый поиск ближайших объектов), и потом придумать как сделать полученные данные diverse, чтобы скажем 100 экземпляров были из разных сцен, а не 100 кадров одной сцены. Когда я представляю весь кодинг, который для этого и для других подобных задач нужен, сразу понимаю, что уровень знания алгоритмов должен быть высокий, выше чем в какой-нибудь гугл или фэйсбук.