С чего начать изучение компьютерного зрения?

Доброго времени суток)

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

А интересно мне вот что:

0. Data mining
1. Компьютерное зрение
2. Нейросети и системы принятия решений
4. Системы анализа вероятностей и предсказание процессов.


Список я бессовестно скомуниздил позаимствовал у нашего любимого тостера, предварительно погуглив, что представляет каждое направление и "вычеркнув" не представляющие интереса)

К слову поступил я на математическое направление и программирования будет очень и очень мало.

Как выбрать что-то одно, когда все интересно? Но это довольно риторический вопрос, зависящий от личных предпочтений, и я это понимаю. Поэтому мне хотелось бы начать с компьютерного зрения. Среди умений в вакансиях постоянно встречается примерно вот такой список:

Математическая подготовка:
основы линейной алгебры
аналитической геометрии
теория вероятностей
Алгоритмическая подготовка:
знание базовых алгоритмов (сортировка, поиск...) и алгоритмов 3D графики и компьютерного зрения
анализ эффективности алгоритмов
знание Python и C++
технический английский


В этом списке мне ясно все. кроме
  • знание базовых алгоритмов (сортировка, поиск...) и алгоритмов 3D графики и компьютерного
  • анализ эффективности алгоритмов

Математику - буду ботать в вузе, английский это само собой, python и С++ буду учить сам (рассчитываю года за 3 научиться хоть немного писать на этих ЯП).

И вот наконец-таки сам вопрос.

Посоветуйте, что почитать по данной тематике. Книги есть, но боюсь ошибиться и выбрать какой-нибудь старый и неактуальный сухой справочник. Опыт в выборе самого ужасного материала у меня к сожалению есть. Готов читать любые книги: по математике, анализу, самой технологии компьютерного зрения. И практически упражняться тоже.

С чего начать, чем продолжить? К слову по С++ занимаюсь по книге Прата, Python постигать буду с Лутцем.

Ну и напоследок: будет ли актуально это направление ближайшие годы до конца отложенных мне дней или все мои желания зря?

Спасибо, если прочитали сей длинный и нудный рассказ)
  • Вопрос задан
  • 16277 просмотров
Решения вопроса 3
Ni55aN
@Ni55aN
Знание алгоритмов нужно лишь для решения задач, которые уже были решены ранее.
Например, для той же сортировки есть множество алгоритмов, и среди них нет универсального, который быстрее всех работал бы во всех случаях (обычно это зависит от объема и смешанности данных).
Конечно, можно поверхностно ознакомиться с алгоритмами, но на практике стоит использовать готовые решения, если нет особых требований.

С алгоритмами в 3D графике можно ознакомиться как в теории, так и с OpenGL/Direct3D поиграться (а чтобы далеко не ходить можно WebGL).

По комп. зрению, имхо, лучше просто начать с лекций

По С++ могу посоветовать
  1. Стефан Р. Дэвис - С++ Для чайников
  2. Лафоре. - Объектно-ориентированное программирование в C++

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

По остальным направлениям особо нечего добавить: по математике так вообще книги начала 2000-х вполне актуальны)))

А вот актуальность этих направлений несомненно будет на одном из первых мест. Ведь вычислительные мощности ЭВМ увеличиваются, а все больше и больше задач требуют автоматизации. Автопилоты на электрокарах, "умные" камеры видеонаблюдения и т.д - все это - уже настоящее. Но вот как-то в России с этим не складывается
Ответ написан
Комментировать
kopcap_va
@kopcap_va
SEO Consultant
Уделяйте много времени математике, даже если вдруг она вам в жизни не понадобится - это здорово развивает мозги (если это вам нужно, конечно:). Причем, когда будете проходить в вузе, например матрицы или системы линейных уравнений - сразу практикуйте их на C++/Python (сначала будет достаточно и базовых знаний). Ну и налегайте на английский.

С серьезным компьютерным зрением наскоком познакомиться непросто. Когда у вас будет необходимая математическая база и более-менее уверенное владение ЯП, тогда сможете углубиться. Например, есть отличный стэнфордский курс по компьютерному зрению.

По части выбора учебников - смотрите какой вам больше подходит, большой разницы нет. Если Лутц нравится - учите по нему, если что-то не то - читайте другой. Буквально по каждой книге отзывов навалом, ищите чтобы не было низкого рейтинга. По математике поищите среди ответов brainick ЕМНИП была подборка по каждой теме начиная со школьных учебников).

з.ы. По части базы для алгоритмов и т.п. погуглите SICP - теперь этот курс на Python.
Ответ написан
Комментировать
Deerenaros
@Deerenaros
Программист, математик, задрот и даже чуть инженер
Во-первых, компьютерное зрение - это жутко простая математика, но всё таки математика. Для того, чтобы понимать, что происходит, надо разбираться в дискретной и дифференциальной математиках, знать о способах перехода от одной к другой, иметь представление о таких вещах, как теорема Котельникова (хотя, это уже к кибернетике ближе), не говоря уже о банальных способах представления сигнала. Чтобы во всём этом разобраться, потребуется не один год обучения. Просто предупреждаю, одной книжечкой здесь не обойдёшься.

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

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

Единственное, что следует заметить, так это то, что OpenCV всё таки шлак. То есть он очень не плох для обучения, но представляет из себя разношёрстную помойку порой едва работающего кода. Этому есть логичное объяснение - её делают не профессиональные программисты, зачитывающиеся МакКоннеллом, а какие-то там профессора и аспиранты, увлекающиеся плюсами и пайтонами. Так что, не стоит брать пример с того кода, а продакшн ни в коем случае не должен содержать ни грамма этой библиотеки. Но это так, лирика.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
dimonchik2013
@dimonchik2013
non progredi est regredi
тебе несказанно повезло с практикой
ну и Python + OpenCV как бы не на русском даже есть
академические книги тоже есть, на рутрекере в том числе, да и конференции проводятся
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
ШАД: https://yandexdataschool.ru/edu-process/courses
Общие лекции по теории (в картинках): тут
Ответ написан
@AlexSku
не буду отвечать из-за модератора
Раздел Computer Vision в MatLab'е.
Ответ написан
Комментировать
lxsmkv
@lxsmkv
Test automation engineer
Сбор и анализ данных актуален сейчас и будет. На мой взгляд основная проблема всех "анализов данных": данных дофига собрали, а как получить из них полезную информацию не знаем. Подключив компьютер мы только ускорим переработку данных, график будет появляться по нажатию кнопки и.т.п. НО! основная проблема никуда не денется. Как правильно интерпретировать данные. Показывает нам график то что надо или то что мы хотим видеть. И это порой целое искусство. Чтобы составить эффективную метрику, нужно понимать природу задействованных в ней данных.
С компьютерным зрением я в практическом примении сталкивался в контексте автоматизированного тестирования. Тестирование методом сравнения изображений. Берут утвержденный дизайн, и сравнивают с тем что сверсталось на браузере. И такой тест мог выдавать для кажной пары вводных: идентичны - да/нет. Так вот представим себе что у нас количество сравнений около 40.000 и нужно получить информацию об общем состоянии соостветствия спецификации. Если брать процент "неидентичности" к общему это покажет худшую картину чем на самом деле. Потому что он срабатывает на малейшее отклонение. Вот вам и задача по анализу данных и компьютерному зрению. И, нужно отметить, я тут ни разу не упомянул ни о каком языке программирования. Инструмент-то он нужен, но не имея четкого представления о предметной области, только быстрее рассчитаешь коэффициент чепухи в ерунде. Должен сказать что математическое образование (есть коллеги у меня) дает ясность ума, структурный подход, что собщственно и важно при поиске способа решения производственной задачи.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы