Компьютерное зрение: Осваиваем компьютерное зрение — 8 основных шагов / Habr – Как работает компьютерное зрение. Изучаем основные алгоритмы, чтобы овладеть data science

Содержание

Осваиваем компьютерное зрение — 8 основных шагов / Habr

Привет, читатель.

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

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


Минимальные знания, необходимые для освоения компьютерного зрения



Итак, теперь давайте приступим непосредственно к этапам.

Шаг 1 — Базовые методики работы с изображениями


Этот шаг посвящен техническим основам.

Посмотрите — отличный YouTube-плейлист «Древние секреты компьютерного зрения» от Joseph Redmon.

Прочтите — третью главу книги Ричарда Шелиски «Компьютерное зрение: Алгоритмы и приложения».

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

Шаг 2 — Отслеживание движения и анализ оптического потока


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

Пройдите курс — курс по компьютерному зрению на Udacity, в особенности урок 6.
Посмотрите — 8-ое видео в YouTube-списке и лекцию об оптическом потоке и трекинге.


Прочтите — разделы 10.5 и 8.4 учебника Шелиски.

В качестве учебного проекта разберитесь с тем, как с помощью OpenCV отслеживать объект в видеофрейме.

Шаг 3 — Базовая сегментация


В компьютерном зрении, сегментация — это процесс разделения цифрового изображения на несколько сегментов (суперпиксели). Цель сегментации заключается в упрощении и/или изменении представления изображения, чтобы его было проще и легче анализировать.

Так, преобразование Хафа позволяет найти круги и линии.

Посмотрите эти видео:

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

Шаг 4 — Фитинг


Для различных данных требуется специфичный подход к фитингу и свои алгоритмы.

Посмотрите видео:


Прочтите — разделы 4.3.2 и 5.1.1 учебника Шелиски.

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

Шаг 5 — Совмещение изображений, полученных с разных точек осмотра


Посмотрите Youtube-плейлист


Прочтите — сопроводительное письмо.

Для проекта можно взять собственные данные. Например, сфотографировать с разных сторон что-то из мебели и сделать в OpenCV из альбома плоских изображений 3D-объект.

Шаг 6 — Трёхмерные сцены


Умея создавать 3D-объекты из плоских изображений, можно попробовать создать и трёхмерную реальность.

Пройдите — курс по стереозрению и трекингу

Посмотрите видео:


В качестве проекта попытайтесь реконструировать сцену или сделать трекинг объекта в трехмерном пространстве.

Шаг 7 — Распознавание объектов и классификация изображений


В качестве фреймворка для глубокого обучения удобно использовать TensorFlow. Это один из наиболее популярных фреймворков, поэтому вы без труда отыщете достаточно примеров. Для начала работы с изображениями в TensorFlow пройдите этот туториал.

Далее, пользуясь ссылками, рассмотрите следующие темы:


В качестве проекта создайте в TensorFlow нейросеть, определяющую по изображению марку автомобиля или породу собаки.

Шаг 8 — Современное глубокое обучение


Прочитайте — лекции Стенфордского курса

Посмотрите видео:


На этом наши шаги в изучении компьютерного зрения подошли к концу. Надеюсь вы узнали для себя что-нибудь новое. Как принято на Хабре, понравился пост — поставь плюс. Не забудьте поделиться с коллегами. Также, если у вас есть то, чем вы можете поделиться сами — пишите в комментариях. Больше информации о машинном обучении и Data Science на Хабре и в телеграм-канале Нейрон (@neurondata).

Всем знаний!

Компьютерное зрение. Лекция для Малого ШАДа Яндекса / Яндекс corporate blog / Habr

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

Лекция рассчитана на старшеклассников – студентов Малого ШАДа, но и взрослые смогут почерпнуть из нее много полезного.

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

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

Разница между зрением человека и компьютера

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

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

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

Мальчик или девочка?

Представим, что нам нужно научиться с одного взгляда определять пол человека (одетого!) по фотографии. Для начала нужно определить факторы, которые могут указывать на принадлежность к тому или иному объекту. Кроме того, нужно собрать обучающее множество. Желательно, чтобы оно было репрезентативным. В нашем случае возьмем в качестве обучающей выборки всех присутствующих в аудитории. И попробуем на их основе найти отличительные факторы: например, длина волос, наличие бороды, макияжа и одежда (юбка или брюки). Зная, у какого процента представителей одного пола встречались те или иные факторы, мы сможем создать достаточно четкие правила: наличие тез или иных комбинаций факторов с некоей вероятностью позволит нам сказать, человек какого пола на фотографии.
Машинное обучение

Конечно, это очень простой и условный пример с небольшим количеством верхнеуровневых факторов. В реальных задачах, которые ставятся перед системами компьютерного зрения, факторов гораздо больше. Определять их вручную и просчитывать зависимости – непосильная для человека задача. Поэтому в таких случаях без машинного обучения не обойтись никак. Например, можно определить несколько десятков первоначальных факторов, а также задать положительные и отрицательные примеры. А уже зависимости между этими факторами подбираются автоматически, составляется формула, которая позволяет принимать решения. Достаточно часто и сами факторы выделяются автоматически.
Изображение в цифрах

Чаще всего для хранения цифровых изображений используется цветовое пространство RGB. В нем каждой из трех осей (каналов) присваивается свой цвет: красный, зеленый и синий. На каждый канал выделяется по 8 бит информации, соответственно, интенсивность цвета на каждой оси может принимать значения в диапазоне от 0 до 255. Все цвета в цифровом пространстве RGB получаются путем смешивания трех основных цветов.

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

Но существуют и другие цветовые пространства. Весьма интересно в нашем контексте пространство HSV (Hue, Saturation, Value). В нем присутствует ось Value, обозначающая количество света. На него выделен отдельный канал, в отличие от RGB, где это значение нужно вычислять каждый раз. Фактически, это черно-белая версия изображения, с которой уже можно работать. Hue представляется в виде угла и отвечает за основной тон. От значения Saturation (расстояние от центра к краю) зависит насыщенность цвета.

HSV гораздо ближе к тому, как мы представляем себе цвета. Если показать человеку в темноте красный и зеленый объект, он не сможет различить цвета. В HSV происходит то же самое. Чем ниже по оси V мы продвигаемся, тем меньше становится разница между оттенками, так как снижается диапазон значений насыщенности. На схеме это выглядит как конус, на вершине которого предельно черная точка.

Цвет и свет

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

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

Локальные и глобальные признаки

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

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

Детектирование и сегментация

В компьютерном зрении этот процесс называется детектированием и сегментацией. Сегментация – это разделение изображения на множество частей, связанных друг с другом визуально, либо семантически. А детектирование – это обнаружение объектов на изображении. Детектирование нужно четко отличать от распознавания. Допустим, на той же картинке с автомобилем можно детектировать дорожный знак. Но распознать его невозможно, так как он повернут к нам обратной стороной. Так же при распознавании лиц детектор может определить расположение лица, а «распознаватель» уже скажет, чье это лицо.

Дескрипторы и визуальные слова

Существует много разных подходов к распознаванию.

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

Один из наиболее распространенных способов называется Difference of Gaussians (DoG). Размывая картинку с разным радиусом и сравнивая получившиеся результаты, можно находить наиболее контрастные фрагменты. Области вокруг этих фрагментов и являются наиболее интересными.

Далее эти области описываются в цифровом виде. Области разбиваются на небольшие участки, определяется, в какую сторону направлены градиенты, получаются векторы.

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

Чтобы одинаковые дескрипторы признавались таковыми независимо от поворотов в плоскости, они разворачиваются так, чтобы самые большие векторы были повернуты в одну сторону. Делается это далеко не всегда. Но если нужно обнаружить два одинаковых объекта, расположенных в разных плоскостях.

Дескрипторы можно записывать в числовом виде. Дескриптор можно представить в виде точки в многомерном массиве. У нас на иллюстрации двумерный массив. В него попали наши дескрипторы. И мы можем их кластеризовать – разбить на группы.

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

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

Совпадение дескрипторов – еще не гарантия идентичности содержащих их объектов. Один из способов дополнительной проверки – геометрическая валидация. В этом случае проводится сравнение расположения дескрипторов относительно друг друга.

Распознавание и классификация

Для простоты представим, что мы можем разбить все изображения на три класса: архитектура, природа и портрет. В свою очередь, природу мы можем разбить на растения животных и птиц. А уже поняв, что это птица, мы можем сказать, какая именно: сова, чайка или ворона.

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

Компания Яндекс — Технологии — Компьютерное зрение

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

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

Человек учится распознавать — то есть находить и отличать от других — объекты всю жизнь. Он видел дома, деревья и горы бессчётное количество раз: как в действительности, так и на картинах, фотографиях и в кино. Он помнит, как выглядят те или иные предметы в разных ракурсах и при разном освещении.

Машины создавались для того, чтобы работать с числами. Необходимость наделить их зрением возникла относительно недавно. Распознавание номерных знаков автомобилей, чтение штрихкодов на товарах в супермаркете, анализ записей с камер наблюдения, поиск лиц на фото, создание роботов, умеющих находить (и обходить) препятствия, — всё это задачи, которые требуют от компьютера способности «видеть» и интерпретировать увиденное. Набор методов, позволяющих обучить машину извлекать информацию из изображения — будь то картинка или видеозапись, — называется компьютерным зрением.

Как учится компьютер

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

После того как мы составили выборку, в дело вступает машинное обучение. В ходе обучения компьютер анализирует изображения из выборки, определяет, какие признаки и комбинации признаков указывают на то, что на картинке — домик, и просчитывает их значимость. Если обучение прошло успешно (чтобы удостовериться в этом, проводятся проверки), то машина может применять полученные знания «на практике» — то есть находить домики на любых картинках.

Анализ изображения

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

Сначала на картинке выявляют потенциально значимые места — то есть предполагаемые объекты или их границы. Это можно сделать несколькими способами. Рассмотрим, к примеру, алгоритм Difference of Gaussians (DoG, разность гауссиан). Он подразумевает, что исходную картинку несколько раз подвергают размытию по Гауссу, каждый раз используя разный радиус размытия. Затем результаты сравнивают друг с другом. Этот способ позволяет выявить на изображении наиболее контрастные фрагменты — к примеру, яркие пятна или изломы линий.После того как значимые места найдены, их описывают в числах. Запись фрагмента картинки в числовом виде называется дескриптором. С помощью дескрипторов можно быстро, полно и точно сравнить фрагменты изображения, не используя сами фрагменты. Существуют разные алгоритмы получения дескрипторов — например, SIFT, SURF, HOG и многие другие.

Поскольку дескриптор — это числовое описание данных, то сравнение изображений — одна из важнейших задач в компьютерном зрении — сводится к сравнению чисел. Дескрипторы выражены довольно большими числами, поэтому их сравнение может требовать заметных вычислительных ресурсов. Чтобы ускорить вычисления, дескрипторы распределяют по группам, или кластерам. В один и тот же кластер попадают похожие дескрипторы с разных изображений. Операция распределения дескрипторов по кластерам называется кластеризацией.

После кластеризации данный дескриптор изображения сам по себе можно не рассматривать; важным становится лишь номер кластера с дескрипторами, наиболее похожими на данный. Переход от дескриптора к номеру кластера называется квантованием, а сам номер кластера — квантованным дескриптором. Квантование существенно сокращает объём данных, которые нужно обработать компьютеру.

Опираясь на квантованные дескрипторы, компьютер выполняет такие задачи, как распознавание объектов и сравнение изображений. В случае с распознаванием квантованные дескрипторы используются для обучения классификатора — алгоритма, который отделяет изображения «с домиком» от изображений «без домика». В случае со сравнением картинок компьютер сопоставляет наборы квантованных дескрипторов с разных изображений и делает вывод о том, насколько похожи эти изображения или их отдельные фрагменты. Такое сравнение лежит в основе поиска дубликатов и поиска по загруженной картинке.Это лишь один подход к анализу изображения, поясняющий, как компьютер «видит» предметы. Существуют и другие подходы. Так, для распознавания изображений всё чаще применяются нейронные сети. Они позволяют выводить важные для классификации признаки изображения непосредственно в процессе обучения. Свои методы работы с изображением используются и в узких, специфических областях — например, при чтении штрихкодов.

Где используется компьютерное зрение

В умении распознавать человек, однако, пока оставляет компьютер далеко позади. Машина преуспела лишь в определённых задачах — например, в распознавании номеров или машинописного текста. Успешно распознавать разнородные объекты и произвольные сцены (разумеется, в условиях реальной жизни, а не лаборатории) компьютеру всё ещё очень трудно. Поэтому когда мы вводим в поисковую строку в Яндекс.Картинках слова «карбюратор» или «танцующие дети», система анализирует не сами изображения, а преимущественно текст, который их сопровождает.

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

Часто бывает достаточно просто найти (то есть детектировать) лицо на фотографии, не определяя, кому оно принадлежит. Так работает фильтр «Лица» в Яндекс.Картинках. Например, по запросу [формула-1] будут найдены главным образом фотографии гоночных болидов. Если же уточнить, что нас интересуют лица, Яндекс.Картинки покажут фотографии гонщиков.

В иных ситуациях нужно не только отыскать лицо, но и узнать по нему человека («Это — Вася»). Такая функция есть в Яндекс.Фотках. При распознавании система берёт за образец уже размеченные фотографии с человеком, поэтому область поиска сильно сужается. Имея десять фотографий, на которых уже отмечен Вася, узнать его на одиннадцатом снимке будет несложно. Если Вася не хочет, чтобы его знали в лицо, он может запретить отмечать себя на фото.

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

Постановка задачи компьютерного зрения / Habr


Последние лет восемь я активно занимаюсь задачами, связанными с распознаванием образов, компьютерным зрением, машинным обучением. Получилось накопить достаточно большой багаж опыта и проектов (что-то своё, что-то в ранге штатного программиста, что-то под заказ). К тому же, с тех пор, как я написал пару статей на Хабре, со мной часто связываются читатели, просят помочь с их задачей, посоветовать что-то. Так что достаточно часто натыкаюсь на совершенно непредсказуемые применения CV алгоритмов.
Но, чёрт подери, в 90% случаев я вижу одну и ту же системную ошибку. Раз за разом. За последние лет 5 я её объяснял уже десяткам людей. Да что там, периодически и сам её совершаю…

В 99% задач компьютерного зрения то представление о задаче, которое вы сформулировали у себя в голове, а тем более тот путь решения, который вы наметили, не имеет с реальностью ничего общего. Всегда будут возникать ситуации, про которые вы даже не могли подумать. Единственный способ сформулировать задачу — набрать базу примеров и работать с ней, учитывая как идеальные, так и самые плохие ситуации. Чем шире база-тем точнее поставлена задача. Без базы говорить о задаче нельзя.

Тривиальная мысль. Но все ошибаются. Абсолютно все. В статье я приведу несколько примеров таких ситуаций. Когда задача поставлена плохо, когда хорошо. И какие подводные камни вас ждут в формировании ТЗ для систем компьютерного зрения.

Первые примеры

Плохие

Одна из самых частых идей, про которую меня спрашивают (даже предлагали взяться) — это распознавание этикеток в магазинах: «Добрый день! Я придумал классный стартап: человек приходит в магазин, снимает ценник, мы находим товар, цену и смотрим в каком магазине товар самый дешевый! Я всё уже сделал, но остался только модуль распознавания!«. За последние два года с аналогичными предложениями мне писали раз пять…
И действительно! В сознании человека, который редко сталкивается с задачами распознавания, есть чёткая картина: «Распознать строчку текста на этикетке — это расплюнуть!». Ведь есть ABBYY, которые распознают текст страницами, есть Smart Engines (1, 2), у которых и карточки с кучей цифр распознаются, и этикетки даже! Задача давно решена! Какая разница, Ikea или Ашан? Все этикетки похожи, единый модуль справится.
Обычно после такого хочется сказать человеку: «Сходите в три разных сети, сделайте десять кадров и посмотрите на них«. На что обычно можно получить ответ: «Что я там не видел! Вчера был в Перекрёстке и смотрел на них!«.
Посмотрим?

Это не самые плохие примеры (фотографии кликабельны). На всех примерах тут человек может прочитать/додумать информацию. А машина?
• Фотографии часто нерезкие, текст расплывается и сливается. Зачастую буквы написаны так близко друг к другу, что сегментация практически невозможна.
• По краям ценников очень много артефактов, часто буквы обрезаны, или по ним идёт полоса.
• Если съёмка со вспышкой — будут блики, часто полностью перекрывающие текст.
• На одном ценнике часто 2-3 цены, написанные разными шрифтами (а часто ценники могут стоять в упор друг к другу).
• Шрифт изменяется даже в пределах одной торговой сети.
• Формат ценников изменяется даже в пределах одной торговой сети.
Некоторые, особо упёртые продолжают настаивать: «Вы всё придумали! Вот есть пост у Smart Engines, где всё работает и ценники распознаются!»
И действительно! Замечательный пример корректно поставленной задачи: ищется прямоугольник заданного размера, на красном фоне, шрифт один и тот же. Определив границы прямоугольника можно примерно уже сегментировать код. Эвристика есть, но минимальная: связать три блока на картинке, расположенных в известном порядке.
Да: будут пересветы, будут блики, уголки могут быть загнуты, кто-то черканёт на ценнике свой автограф, а у кого-то камера всегда выдаёт нерезкие кадры. Но когда вы знаете положение каждой цифры, всё остальное уже не так важно. И в большинстве случаев всё будет работать замечательно.
N.B. Я не говорю, что задача распознавания ценников не решаема в общем случае. Решаема. И сегодняшний прогресс делает это решение всё ближе и ближе. Google уже распознаёт номера домов. А ABBYY настраивается под любой заранее заданный формат текста. Но решение такой задачи находится на границе современных технологий, решение будет неидеально, или будет требовать огромного времени и средств на разработку. Конечно, можно сделать распознавание цены на ценниках (без текста) и такая система будет неплохо работать на некоторых ценниках. А иногда можно прочитать штрих-код (из приведённых ценников открытым форматом штрих-код написан на одном). Часто есть способы срезать углы и упростить постановку задачи.
Отвлечёмся от этикеток

Вы скажете что это примеры из воздуха и что так не бывает?.. Приведу пример который даже публиковался на Хабре: habrahabr.ru/post/265209.
Прежде чем читать дальше, попробуйте понять, почему метод не будет работать.
— Для тех кому лень читать. Автор предлагает ставить клеймо на дерево из трёх точек. И считает, что пересечения прямых между точками с годичными кольцами позволят однозначно маркировать и классифицировать бревно с камеры.

Вот такую красивую картинку он приводит. Метод сразу ясен и понятен. Неправда ли?
— Сам автор статьи обращался ко мне где-то за неделю до публикации с вопросом, будет ли это всё работать. Я сказал, что скорее всего не будет, привел несколько примеров, а так же сказал, как нужно модифицировать алгоритм, чтобы всё заработало. Но статью он написал в ключе, что это рабочий метод. И никто в десятке комментариев не возразил. Всего два дислайка… (Чорт, каюсь, один из них — я).
Попробуем разобраться. Во-первых, как выглядит «годичное кольцо»? Попросим Яндекс выдать нам бревно:

Идеальное. Красивые кольца! Прямо как на рисунке выше. Постойте… А что же это?

Тоже кольца… А что если у нас фотоаппарат чуть-чуть промазал с резкостью?

Блин. Половина колец пропало. А если у нас вечереет и поднялось ISO?

Опять…
Ну ладно, может не всё так плохо? Придумаем критерий, чтобы выбирать только достаточно большие годовые полосы, будем генерировать несколько вариантов для каждого дерева. Ок?

Нет, ещё есть трещины, которые могут поменять геометрию и ситуации когда полос вообще почти нет. И это первые 20 идеальных картинок из выдачи Яндекса. Вывод напрашивается за пять минут. Но ведь есть же классная идея! Зачем смотреть картинки из поиска?..

Сама по себе задача, на мой взгляд, скорее решаема. Если брать отметки как опорные точки и сравнивать теми же методами, которыми сравнивают глаза. Но, опять же, пока не протестируешь базу хотя бы на пару сотен примеров — никогда не узнаешь, можно ли работу успешно выполнить. Но почему-то такое предложение не понравилось автору статьи… Жаль!
Это два наиболее осмысленных и репрезентативных, на мой взгляд, примера. По ним можно понять, почему нужно абстрагироваться от идеи и смотреть реальные кадры.
Ещё несколько примеров, с которыми я встречался, но уже в двух словах. Во всех этих примерах у людей не было ни единой фотографии на момент, когда они начали спрашивать о реализуемости задачи:
1) Распознавание номеров у марафонцев на футболках по видеопотоку (картинка из Яндыкса)

Хы. Пока готовил статью натолкнулся на это. Очень хороший пример, на котором видны все потенциальные проблемы. Это и разные шрифты, это и нестабильный фон с тенями, это нерезкость и замятые углы. И самое главное. Заказчик предлагает идеализированную базу. Снятую на хороший фотоаппарат солнечным днём. Попробуйте посмотреть номера спортсменов на майках поискав поиском яндыкса.
Хы.Хы За пару часов до публикации автор заказа внезапно вышел на меня сам с предложением взяться за работу, от которого я отказался:) Всё же это карма, добавить это в статью.

2) Распознавание текста на фотографиях экранов телефонов

3) И, мой любимый пример. Письмо на почту:
» нужна программа в коммерческий сектор для распознания избражений.
Алгоритм работы такой. оператор программы задает изображения предмета(-ов) в нескольких ракурсах и т.п.
потом при появленини этого или максимально похожего изображения предмета, програма совершает требуемое/заданное действие.
деталей естественно не могу пока рассказать.
» (орфография, пунктуация сохранены)

Хорошие

Но не всё так плохо! Ситуация, когда задача ставится идеально, встречается часто. Моя любимая: «Нужно ПО для автоматического подсчета лосей на фото.
Пример фото с лосями высылаю.»

Оба фото кликабельны.
До сих пор жалею, что с этой задачей не срослось. Сначала кандидатскую защищал и был занят, а потом заказчик как-то энтузиазм потерял (или нашёл других исполнителей).
В постановке нет ни малейшей трактовки решения. Только две вещи: «что нужно сделать», «входные данные». Много входных данных. Всё.
Мысль — вывод

Единственный способ поставить задачу — набрать базу и определить методологию работы по этой базе. Что вы хотите получить? Какие границы применимости алгоритма? Без этого вы не только не сможете подойти к задаче, вы не сможете её сдать. Без базы данных заказчик всегда сможет сказать «У вас не работает такой-то случай. Но это же критичная ситуация! Без него я не приму работу».
Как сформировать базу

Наверное, всё это был приквел к статье. Настоящая статья начинается тут. Идея того, что в любой задаче CV и ML нужна база для тестирования — очевидна. Но как набрать такую базу? На моей памяти три-четыре раза первая набранная база спускалась в унитаз. Иногда и вторая. Потому что была нерепрезентативна. В чём сложность?
Нужно понимать, что «сбор базы» = «постановка задачи». Собранная база должна:
1. Отражать проблематику задачи;
2. Отражать условия, в которых будет решаться задача;
3. Формулировать задачу как таковую;
4. Приводить заказчика и исполнителя к консенсусу относительно того, что было сделано.
Время года

Пару лет назад мы с другом решили сделать систему, которая могла бы работать на мобильниках и распознавать автомобильные номера. Что-то даже получилось, и мы писали серию статей про это (http://habrahabr.ru/company/recognitor/ ). На тот момент мы были весьма умудрённые в CV системах. Знали, что нужно собирать такую базу, чтобы плохо было. Чтобы посмотрел на неё и сразу понял все проблемы. Мы собрали такую базу:

Сделали алгоритм, и он даже неплохо работал. Давал 80-85% распознавания выделенных номеров.
Ну да… Только летом, когда все номера стали чистые и хорошие точность системы просела процентов на 5…
Биометрия

Достаточно много в своей жизни мы работали с биометрией (1, 2, 3). И, кажется, наступили на все возможные грабли при сборе биометрических баз.
• База должна быть собрана в разных помещениях. Когда аппарат для сбора базы стоит только у разработчиков — рано или поздно выяснится, что он завязан на соседнюю лампу.
• В биометрических базах нужно иметь 5-10 снимков для каждого человека. И эти 5-10 снимков должны быть сделаны в разные дни, в разное время дня. Подходя к биометрическому сканеру несколько раз подряд, человек сканируется одним и тем же способом. Подходя в разные дни — по-разному. Некоторые биометрические характеристики могут немножко меняться в течении суток.
• База, собранная из разработчиков нерепрезентативна. Они подсознательно считываются так, чтобы всё сработало…
• У вас новая модель сканера? А вы уверены, что он работает со старой базой?
Вот глаза собранные с разных сканеров. Разные поля работы, разные блики, разные тени, разные пространственные разрешения, и.т.д.
База для нейронных сетей и алгоритмов обучения

Если у вас в коде используется какой-то алгоритм обучения — пиши пропало. Вам нужно формировать базу для обучения с его учётом. Предположим, в вашей задаче распознавания имеется два сильно отличающихся шрифта. Первый встречается в 90% случаев, второй в 10%. Если вы нарежете эти два шрифта в данной пропорции и обучитесь по ним единым классификатором, то с высокой вероятностью буквы первого шрифта будут распознаваться, а буквы второго нет. Ибо нейронная сеть/SVM найдёт локальный минимум не там, где распознаётся 97% первого шрифта и 97% второго, а там где распознаётся 99% первого шрифта и 0% второго. В вашей базе должно быть достаточно примеров каждого шрифта, чтобы обучение не ушло в другой минимум.
Как сформировать базу при работе с реальным заказчиком

Одна из нетривиальных проблем при сборе базы — кто это должен делать. Заказчик или исполнитель. Сначала приведу несколько печальных примеров из жизни.
Я нанимаю вас, чтобы вы решили мне задачу!

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

Однажды директор весьма крупной компании (человек 100 штата + офисы во многих странах мира) предложил пообщаться. В продукте, который выпускала эта компания часть функционала была реализована очень старыми и очень простыми алгоритмами. Директор рассказал нам, что давно грезит о модификации данного функционала в современные алгоритмы. Даже нанимал две разных команды разработчиков. Но не срослось. Одна команда по его словам слишком теоретизировала, а вторая никакой теории не знала и тривиальщину делала. Мы решили попробовать.
На следующий день нам выдали доступ к огромному массиву сырой информации. Сильно больше, чем я бы сумел просмотреть за год. Потратив на анализ информации пару дней мы насторожились спросили: «А что собственно вам нужно от новых алгоритмов?». Нам назвали десятка два ситуаций, когда текущие алгоритмы не работают. Но за пару дней я видел лишь одну-две указных ситуации. Просмотрев ещё пачку данных смог найти ещё одну. На вопрос: «какие ситуации беспокоят ваших клиентов в первую очередь?», — ни директор ни его главные инженеры не смогли дать ответа. У них не было такой статистики.
Мы исследовали вопрос и предложили алгоритм решения, который мог автоматически собрать все возможные ситуации. Но нам нужно было помочь с двумя вещами. Во-первых, развернуть обработку информации на серверах самой фирмы (у нас не было ни достаточной вычислительной мощности, ни достаточного канала к тому месту, где хранились сырые данные). На это бы ушла неделя работы администратора фирмы. А во-вторых, представитель фирмы должен был классифицировать собранную информацию по важности и по тому как её нужно обрабатывать (это ещё дня три). К этому моменту мы уже потратили две-три недели своего времени на анализ данных, изучение статей по тематике и написание программ для сбора информации (никакого договора подписано на этот момент не было, всё делали на добровольных началах).
На что нам было заявлено: «Мы не можем отвлекать на эту задачу никого. Разбирайтесь сами». На чём мы откланялись и удалились.
Заказчик даёт базу

Был и другой случай. На этот раз заказчик поменьше. А система, которой занимается заказчик разбросана по всей территории страны. Зато заказчик понимает, что мы базу не соберём. И из всех сил старается собрать базу. Собирает. Очень большую и разнообразную. И даже уверяет, что база репрезентативна. Начинаем работать. Почти доделываем алгоритм. Перед сдачей выясняется, что на собранной базе-то алгоритм работает. И условиям договора мы удовлетворяем. Но вот база-то была нерепрезентативной. В ней нет 2/3 ситуаций. А те ситуации, что есть — представлены непропорционально. И на реальных данных система работает сильно хуже.
Вот и получается. Мы старались. Всё что обещали — сделали, хотя задача оказалась сильно сложнее, чем планировали. Заказчик старался. Потратил много времени на сбор базы.
Но итоговый результат — хреновый. Пришлось что-то придумывать на ходу, хоть как-то затыкать дырки…
Так кто должен сформировать базу?

Проблема в том, что очень часто задачи компьютерного зрения возникают в сложных системах. Системах, которые делались десятки лет многими людьми. И разобраться в такой системе часто сильно дольше, чем решить саму задачу. А заказчик хочет чтобы разработка началась уже завтра. И естественно, предложение заплатить за подготовку ТЗ и базы сумму в 2 раза больше стоимости задачи, увеличить сроки в 3 раза, дать допуск к своим системам и алгоритмам, выделить сотрудника, который всё покажет и расскажет, вызывает у него недоумение.
На мой взгляд решение любой задачи компьютерного зрения требует постоянного диалога между заказчиком и исполнителем, а так же желания заказчика сформулировать задачу. Исполнитель не видит всех нюансов бизнеса заказчика, не знает систему изнутри. Я ни разу не видел чтобы подход: «вот вам деньги, завтра сделайте мне решение» сработал. Решение-то было. Но работало ли оно как нужно?
Сам я как огня пытаюсь шарахаться от таких контрактов. Работаю ли я сам, или в какой-то фирме, которая взяла заказ на разработку.
В целом ситуацию можно представить так: предположим, вы хотите устроить свою свадьбу. Вы можете:
• Продумать и организовать всё самому от начала до конца. По сути данный вариант — «решать задачу самому».
• Продумать всё от начала до конца. Написать все сценарии. И нанять исполнителей для каждой роли. Тамаду для того чтобы гости не скучали, ресторан, чтобы все приготовили и провели. Написать основную канву для тамады, меню для ресторана. Этот вариант — это диалог. Обеспечить данными исполнителя, расписать всё, что требуется.
• Можно продумать большими блоками, не вникая в детали. Нанять тамаду, пусть делает, что делает. Не согласовывать меню ресторана. Заказать модельеру подбор платья, причёски, имиджа. Головной боли минимум, но когда начнутся конкурсы на раздевание, то можно понять что что-то было сделано не так. Далеко не факт, что сформулировав задачу в стиле «распознайте мне символ» исполнитель и заказчик поймут одно и то же.
• А можно всё заказать свадебному агентству. Дорого, думать совсем не надо. Но вот, что получится — уже не знает никто. Вариант — «сделайте мне хорошо». Скорее всего, качество будет зависеть от стоимости. Но не обязательно
Есть ли задачи, где база не нужна

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

А как же учёные? Неужели под каждую работу они собирают отдельную базу?
Обычно нет. В интернете можно найти очень много открытых баз данных. Обычно универсальных, для каких-то классических примеров. Например есть несколько сайтов с базами для биометрии (самый известный). Есть сайты с базами для тестирования различных алгоритмов обучения (1 2 3).
Проблема всех этих баз зачастую в том, что они малоприменимы и нерепрезентативны. Взять например легендарный MNIST — базу изображений цифр с ручным написанием:

Все алгоритмы машинного распознавания тестируются на ней. Всё бы хорошо, но… Топовые алгоритмы давным давно имеют точности вида 99.5%, 99.6%, 99.6351%, и.т.д. Не распознаётся 30-40 картинок, которые всем хорошо известны. Половину из них даже человеку нереально распознать. Хитрыми настройками можно чуть-чуть поправить точность и сделать +0.1%. Но ведь понятно, что ни к реальным данным, а уж там более к качественной оценке алгоритма ничего этого отношения не имеет.
Зачастую получается, что написанный по таким базам алгоритм будет работать только в тех условиях и при тех параметрах при которых собрана вся база.
Приводите свои примеры!

На хабре есть множество людей, которые занимаются обработкой изображений и наверняка имеют большой опыт в этом (статьи некоторых из них я читал ещё будучи студентом): SmartEngines sergeypid BelBES mephistopheies rocknrollnerd YUVladimir Nordavind BigObfuscator Vasyutka
(Простите, если кого отметил не по делу, но большинство из отмеченных писали классные статьи по CV и ML). Наверняка у вас есть собственные мысли о том, как сделать постановку задачи идеальной и собрать классную базу. Поделитесь? А может закритикуете написанное, как ересь от начала до конца?:)

как за нами наблюдает ИИ / Microsoft corporate blog / Habr

Недавно мы рассказывали о том, как нас анализируют в кинотеатрах с помощью технологии компьютерного зрения: эмоции, жесты и вот это всё. Сегодня публикуем разговор с нашим коллегой из подразделения Microsoft Research. Он занимается созданием того самого зрения. Под катом подробности о развитии технологии, немного о GDPR, а также о сферах применения. Присоединяйтесь!

С технической точки зрения, эксперты по компьютерному зрению «создают алгоритмы и системы для автоматического анализа изображений и извлечения информации из видимого мира». С точки зрения непрофессионала, они создают машины, которые могут видеть. Именно этим занимаются главный научный сотрудник и руководитель научно-исследовательского отдела доктор Ган Хуа (Gang Hua) и команда экспертов по компьютерному зрению. Для таких устройств, как персональные роботы, беспилотные автомобили и дроны, с которыми мы сталкиваемся все чаще в повседневной жизни, зрение очень важно.

Сегодня доктор Хуа расскажет нам о том, как последние достижения в области ИИ и машинного обучения помогли усовершенствовать технологии распознавания изображений и «понимания» видео, а также поспособствовали развитию в области искусства. Он также объяснит, в чем заключается суть распределенного ансамблевого подхода к активному обучению, в рамках которого люди и машины вместе работают в лаборатории над созданием систем компьютерного зрения, способных видеть и распознавать открытый мир.


Ган Хуа, главный научный сотрудник и руководитель научно-исследовательского отдела. Фотография любезно предоставлена Maryatt Photography.

Интервью


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

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

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

Сегодня доктор Хуа расскажет нам о том, как последние достижения в области ИИ и машинного обучения помогли усовершенствовать технологии распознавания изображений и «понимания» видео, а также поспособствовали развитию в области искусства. Он также объяснит, в чем заключается суть распределенного ансамблевого подхода к активному обучению, в рамках которого люди и машины вместе работают в лаборатории над созданием систем компьютерного зрения, способных видеть и распознавать открытый мир. Об этом и многом другом — в новом выпуске подкаста Microsoft Research.

Вы – главный научный сотрудник и руководитель научно-исследовательского отдела в MSR (Microsoft Research), а ваша специализация – компьютерное зрение.

Да.

Если в общих чертах, то ради чего специалист по компьютерному зрению встает по утрам? Какова его главная цель?

Компьютерное зрение — относительно молодая область исследований. Если коротко, то мы пытаемся создать такие машины, которые смогут увидеть мир и воспринимать его так же, как человек. Говоря более техническим языком, информацию, которая поступает в компьютер в виде простых изображений и видео, можно представить как последовательность чисел. Мы хотим извлечь из этих чисел некие структуры, описывающие мир, некую семантическую информацию. Например, я могу сказать, что какая-то часть изображения соответствует кошке. А другая часть соответствует машине, я имею в виду интерпретацию подобного рода. Вот она, цель компьютерного зрения. Людям это кажется простой задачей, однако, чтобы научить этому компьютеры, нам пришлось проделать огромную работу за последние 10 лет. Впрочем, компьютерному зрению как области исследований уже 50 лет. И тем не менее нам предстоит решить еще много проблем.

Да. 5 лет назад вы говорили следующее, я перефразирую: «Почему после 30 лет исследований мы все еще работаем над проблемой распознавания лиц?» Расскажите, как вы ответили на этот вопрос тогда и что изменилось за это время.

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

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

Верно.

Когда мы заговорили о разнице условий в полностью контролируемой и в непредсказуемой средах, мне вспомнились несколько ученых, гостей подкаста, которые отмечали, что компьютеры терпят неудачу, когда данные не достаточно полны… например, последовательность «собака, собака, собака, собака с тремя лапами» – компьютер начинает сомневаться, является ли последняя тоже собакой?

Да.

Ведь правда? Итак, что именно, недоступное ранее, методы глубокого обучения позволяют вам сегодня сделать в области распознания?

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

С помощью комплексных методов глубокого обучения можно научить систему определять правильное числовое представление «собаки». Благодаря глубине структур мы можем создавать действительно сложные модели, способные осваивать большое количество данных для обучения. Таким образом, если мои данные для обучения охватывают все возможные варианты и представления шаблона, то в конце концов я смогу распознать его в более широком контексте, потому что рассмотрел почти все возможные комбинации. Это первое.

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

Итак, значит, основная тема конференции CVPR — это распознавание шаблонов компьютерным зрением.

Да, верно.

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

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

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

Да, конечно.

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

Да. Выражение «понимание видео» говорит само за себя. В качестве входящей информации мы вместо изображений используем видео. Здесь важно не только распознать пиксели, но и учитывать, как они двигаются. Для компьютерного зрения распознание изображений — это пространственная проблема. В случае с видео она становится пространственно-временной, потому что появляется третье – временное – измерение. И если взглянуть на многие реальные задачи, связанные с потоковым видео, будь то камеры наблюдения внутри помещений или дорожные камеры на шоссе, то суть в том, что объект движется в рамках постоянного потока кадров. И нам нужно выделить информацию из этого потока.

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

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

Пожалуйста, воплотите эту идею!

Постараемся!

Кто из нас не стоял на красном сигнале светофора, хотя на зеленый по другому направлению почти никто не проезжал?

Вот именно!

Вот-вот, задаешься вопросом: почему мне приходится ждать?

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

Я думаю, что это великолепная идея, потому что в большинстве случаев мы принимаем такие решения, основываясь на наших собственных идеях, а не на данных, посмотрев на которые мы могли бы сказать: «Эй, а знаете, вот тут велосипедная дорожка пришлась бы очень кстати. А здесь она только усложнит движение».

Совершенно верно. Иногда для этого используют другие датчики. Нанимают компанию, которая устанавливает на дорогах специальное оборудование. Но это экономически неэффективно. А ведь дорожные камеры уже установлены и просто висят без дела. Потоки видео уже доступны. Так ведь? Так почему бы не воспользоваться этим?

Согласна. Это отличный пример того, как можно применять машинное обучение и «понимание» видео.

Именно.

Итак, еще одна важная область применения — это распознавание лиц. Мы опять возвращаемся к вопросу «Почему мы все еще работаем над проблемой распознавания лиц?».

Именно так.

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

Если оглянуться назад, то технология распознавания лиц изучалась Microsoft, когда я еще работал в Live Labs Research. Тогда мы создали первую библиотеку для распознавания лиц, которую могли использовать различные группы по разработке продуктов. Впервые эту технологию начали применять в Xbox. Тогда разработчики пытались использовать распознавание лиц для автоматического входа в систему. Думаю, это был первый случай. Со временем центр по изучению распознавания лиц сместился в Microsoft Research Asia, где у нас все еще работает группа исследователей, с которыми я сотрудничаю.

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

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

То есть вы хотите сохранить узнаваемость лица, которое пытаетесь воссоздать?

Верно.

Кстати, мне интересно, будет ли эта технология работать продолжительное время, по мере старения человека, или придется постоянно обновлять базу с лицами?

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

Подождите-ка, это не вы.

Да, совершенно не похоже. К этому вопросу можно подойти с нескольких сторон. Человеческие лица на самом деле не сильно меняются в промежутке между 17-18 годами и примерно 50. Но что происходит сразу после рождения? Лица детей сильно меняются, потому что растут кости, а также изменяются форма лица и кожа. Но как только человек вырастает и переходит в стадию зрелости, изменения начинают происходить очень медленно. Сейчас мы проводим исследования, в рамках которых разрабатываем модели процесса старения. Они помогут создать улучшенную систему распознавания лиц с учетом возраста. На самом деле это очень полезная технология, которую можно применить в правоохранительной сфере, например, для того, чтобы распознать похищенных много лет назад детей, которые…

Выглядят совсем по-другому.

Да, выглядят по-другому. Если бы умные алгоритмы распознавания лиц могли рассмотреть исходную фотографию…

И сказать, как они выглядели бы лет в 14, если они были похищены намного раньше, или что-то в таком духе?

Да-да, именно.

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

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

И желание творить.

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

Ван Гога?

Да, или любого другого художника…

Ренуар или Моне… или Пикассо.

Да, любого из них. Любого, кого только сможете вспомнить…

Интересно. С помощью пикселей?

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

Похоже, для этого исследования требуются знания из множества областей. Где вы находите специалистов, способных…

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

Демократизировать их.

Да, демократизировать искусство, как вы и говорите.

Это впечатляет.

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

У меня особый интерес вызывает то, что, с одной стороны, мы говорим о работе с цифрами: информатике, алгоритмах, математике. А с другой стороны, речь об искусстве — гораздо более метафизической категории. И все же вы объединили их, и это показывает, что мозг ученого может иметь художественную сторону.

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

Интересно.

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

Мы уже говорили о технической стороне вопроса, но давайте еще немного углубимся в технические детали… В некоторых ваших недавно опубликованных работах – которые наши слушатели могут найти на веб-сайте MSR, а также на вашем сайте – вы говорили о новом распределенном ансамблевом подходе к активному обучению. Расскажите нам, в чем особенность этого подхода и какие преимущества он дает?

Замечательный вопрос. Когда мы говорим об активном обучении, мы имеем в виду процесс, в котором участвует некий человек-надзиратель. В традиционном активном обучении у нас есть… обучающаяся машина. Эта машина может разумно выбирать некие образцы данных, а затем попросить человека-надзирателя предоставить дополнительные данные. Обучающаяся машина выбирает образцы и просит человека-надзирателя предоставить, например, метку для изображения. Процесс ансамблевого машинного обучения гораздо сложнее. Мы пытаемся осуществить активное обучение в краудсорсинговой среде.

Рассмотрим, например, платформу Amazon Mechanical Turk. Люди отправляют на нее свои данные и просят других пользователей присвоить этим данным метку. Однако если не быть осторожным и не следить за процессом, то результат может получиться прескверный. Вы не сможете использовать полученные метки. Чтобы решить подобные проблемы, мы пытаемся достичь двух целей. Во-первых, мы хотим разумно распределить данные, чтобы сделать расстановку меток как можно более экономически выгодной. Во-вторых, нам нужно оценить качество проведенной работы, чтобы впоследствии пользователь мог отправлять свои данные только хорошим работникам.

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

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

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

И появляются переменные, о которых вы не подумали.

Именно. Я задумался о том, как привлечь людей к процессу, чтобы они могли помогать машине, когда это необходимо, и при этом сформировать некий механизм, который помог бы ей справиться с аналогичными ситуациями в будущем. Я приведу очень конкретный пример. Когда я работал в Технологическом институте Стивенса, то занимался проектом от NIH, который мы назвали ко-роботами (co-robots).

Какими-какими роботами?

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

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

Чем вы занимались до работы в Microsoft Research и как оказались здесь?

Я работаю в Microsoft второй раз. Я уже упоминал, что работал здесь в 2006-2009 годах в лаборатории под названием Live Labs. Это был мой первый раз. Тогда я создал первую библиотеку распознавания лиц. После этого мне захотелось изучить внешний мир, так сказать. Я поработал в Nokia Research, IBM Research и в конце концов остался в Технологическом институте Стивенса в качестве преподавателя…

Это в Нью-Джерси, верно?

Да, это в Нью-Джерси, на восточном побережье. Я вернулся в Microsoft Research в 2015 году и начал работать в лаборатории в Пекине. Моя семья оставалась здесь, поэтому в 2017 году я перевелся обратно.

Значит после Пекина вы оказались в Редмонде. Как это произошло?

Моя семья всегда жила в Сиэтле. Лаборатория Microsoft Research в Пекине — замечательное место. Мне там очень нравилось. Одно из уникальных преимуществ той лаборатории — невероятно динамичная программа стажировки. Круглый год в лаборатории работает несколько сотен стажеров. И все они тесно сотрудничают со своими наставниками. Очень динамичная среда. Я немного поэкспериментировал вдали от дома, но моя семья жила в Сиэтле, так что, когда Intelligent Group создала здесь команду по компьютерному зрению, я к ней присоединился.

И вы снова живете в Сиэтле.

Да.

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

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

Что можно… я задаю этот вопрос, потому что он заставляет людей задуматься: Так, у меня есть эта мощная технология, как она может навредить? Итак, что можно сделать, какие законы принять, чтобы решить эту проблему?

Microsoft очень серьезно относится к общему регламенту по защите данных (GDPR). И я думаю, что это здорово, ведь этот механизм призван обеспечить соответствие всего, что мы производим, определенным правилам. С другой стороны, необходимо искать баланс между практичностью технологии и безопасностью или конфиденциальностью. Когда вы используете какой-нибудь онлайн-сервис, все ваши действия оставляют след. Это способ сделать вашу жизнь проще в будущем. Если вы хотите удобства, иногда приходится раскрывать какую-то часть информации. Но никто не хочет предоставлять всю информацию о себе, не так ли? Это сложный вопрос, и ответ на него неоднозначен, он выходит за рамки черного и белого. Нужно тщательно контролировать происходящее. Мы должны получать только ту информацию, которая необходима для лучшего обслуживания клиента, а не иметь неограниченный доступ к его личным данным и той информации, которой он не хотел бы делиться…

Да, сегодня важно получить разрешение от пользователя. Он должен иметь возможность сказать: «Я не против этого. Но вот это мне не нравится».

Да, верно.

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

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

Есть и другие моменты, особенно, когда речь идет о «понимании» видео. Это комплексная проблема, для решения которой необходимо работать с пространственно-временными категориями и учитывать концепции познания, такие как причинное следствие. Если что-то случилось, то что действительно стало этому причиной? Методы машинного обучения в основном работают с корреляцией между данными. Корреляция и причинность — две совершенно разные концепции. Я думаю, стоит поработать над этим. Существуют и некоторые другие фундаментальные проблемы, такие как обучение на основе малых данных и языка, которые в перспективе необходимо решить. Обратите внимание на то, как обучаются люди. Мы учимся на опыте, но есть еще один способ. Мы учимся с помощью языка. Мы учимся в процессе разговора. Например, сегодня я уже узнал от вас много нового…

А я от вас.

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

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

Да, именно так!

Чтобы узнать больше о докторе Ган Хуа, а также об удивительных достижениях в области компьютерного зрения, посетите наш сайт: Microsoft.com/research

Почему компьютерное зрение очень мало используется на практике / Habr

На самом деле правильнее было бы назвать «машинное зрение», но так я думаю понятнее будет, если кто не знает то это не охранное видеонаблюдение, а распознавание или измерение чего либо c помощью камер. Существует много задач и областей, где компьютерное зрение было бы очень востребовано и могло бы использоваться повсеместно, но на практике оно используется очень редко.

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

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

Этот алгоритм 100% работает и проверен на практике. Конечно, есть несколько моментов типа фильтрации оптического шума, освещения и др. сильно влияющие на погрешность измерений, но все это успешно решается, как программно (авто-коррекция коэффициентов цветов и др), так и аппаратно — камеры которые сразу могут фильтровать шумы, физически в условиях производства легко реализуется стабильное освещение в закрытой части где устанавливается камера.
На практике погрешность получается меньше 1% для неподвижной продукции и до 3% для подвижной.

Есть множество разработок, например Open CV (Open Computer Vision) кстати на Хабре есть пост про историю этой библиотеки, существует много систем распознавания образов, номеров, лиц и др., все это есть готовое и можно использовать.
А на практике очень мало используются решения с компьютерным зрением. Но что больше всего интересно так это то, что все эти задачи все равно решаются разными, но совсем другими, способами, с помощью другого оборудования, причем гораздо более дорогостоящего. Большая часть таких внедренных мной систем была установлена на предприятиях по причине выхода из строя этого оборудования для подсчета, дороговизны ремонта или приобретения нового. Я не видел это оборудования в действии, видел только количество датчиков, механики, электроники и т.д. По отзывам заказчиков, старые системы работали хуже, медленнее а некоторые даже с бОльшей погрешностью. Причем стоимость такого оборудования как минимум с 4-мя нулями в USD, при том, что система с «компьютерным зрением» на порядок дешевле, и стоит все полностью с компьютером, камерой и софтом меньше $1000 можно вложиться даже в $500 т.к. есть готовое решение. Большая мощность компьютера не нужна, будет работать без тормозов даже на самом дешевом нетбуке. Кроме площади можно определять цвета продукции, дефекты поверхности, брак/бой и многое другое.

Недавно прочитал на Хабре «Костыльный программист» о подходах программирования и особенно проектирования программных решений и хочу на этом примере рассказать о Костылях при реализации подобного проекта другой командой. Мне довелось пообщаться с программистами этой команды и я был сильно удивлен чего они там наворотили. Алгоритмы используются строго математические, куча сторонних библиотек, высшая математика, не говоря уже про ООП с сотнями классов и т.д. Для определения типов фигур, координат, положений и т.д. используют OpenCV (о которой я писал выше), а площадь вычисляется по сложным формулам, по сторонам, углам, кривизне и т.д. В результате продукт получился очень кривой, требует большой мощности компьютера и на практике очень плохо работает, нужны длительные и сложные настройки под конкретный тип продукции и много другое не говоря уже о погрешности, которая доходит до 10%. Про саму OpenCV я не хочу особо говорить, т.к. это отдельная тема, скажу только что многие вещи там очень плохо работали, во всяком случае раньше работали плохо или не работали вовсе, это было лет 5 назад, когда она еще была Интеловской, я думаю именно поэтому Intel от нее отказались и сбросили ее в Open Source. Но что меня больше всего поразило так это то, что некоторые программисты даже не допускают мысли, что решение может быть намного проще и надежнее. Это была небольшая фирма, но грешат этим и многие именитые компании, которые нанимают таких программистов.

В итоге многие проекты разваливаются, затягиваются сроки и самое худшее это то, что получаются кривые и глючные продукты. И очень часто, не потому что плохой код или программисты, а потому что плохие алгоритмы и плохой подход в проектировании изначально.
Я этот пример привел к тому что сейчас все больше программистов вместо того чтобы все упрощать – все усложняют, используют ООП, шаблоны проектирования и т.п. там где оно вообще никаким боком не нужно и тогда когда оно еще или вообще не нужно. Светлые головы настолько забиты категориями, объектами и классами, что многие просто уже не могут по другому думать. Абстракция нужна не для усложнения а для упрощения системы, в первую очередь чтобы упростить понимание и посмотреть с другой стороны. Другая проблема в том, что многие выбирают не те библиотеки и не те технологии. Особенно меня пугают программисты, которые начитавшись новомодных книжек, и посетив несколько семинаров по ООП считают себя профессионалами и начинают рассказывать, как нужно «правильно» делать и т.п., они могут строить огромные UML диаграммы, что-то моделировать, писать какие-то абстрактные(пустые) классы, без какого-либо функционала и т.д. при этом что-то реально работающее придумать и сделать не могут. Чаще всего такие люди как раз и есть самые настоящие «Костыльные программисты» которые порождают Костыльные проекты с Костыльной архитектурой, это примерно как «Астронавты Архитектуры» (Д. Спольски). Конечно, новичкам может показаться что это очень круто, и т.п. но это как правило не так, потому что большая часть таких проектов проваливается, в других случаях сильно расстягиваются, до тех пор пока заказчик готов платить за неработающий продукт, но в итоге все равно разваливается либо переписывается уже другой командой. Бывают конечно исключения и получаются хорошие продукты, бывает что виноват и плохой код, при хорошем алгоритме и инструментарии, но это бывает намного реже, по крайней мере в моей, не маленькой, практике, таких случаев было очень мало.
ООП не хотел бы затрагивать конечно, т.к. боюсь, что будет очень длинная и никому не нужная дискуссия, это отдельная тема, я во многом согласен с авторами этой знаменитой дискуссии: Почему объектно-ориентированное программирование провалилось. ООП и в частности ОО Проектирование сверху вниз, применимо только в очень больших и очень сложных проектах, но далеко не во всех, таких проектов реально очень мало. А проектирование в подавляющем большинстве случаев, нужно начинать снизу вверх, с базового функционала и базовых прототипов, т.к. после получения первых результатов все может в корне изменится, станет более понятна предметная область и суть задачи, не говоря уже про «баго-фичи» (многие хорошие технологии появились благодаря багам, которые впоследствии становились отличными «фичами»). И конечно самое главное выбрать правильный алгоритм решения поставленной задачи. Если проект очень сложный, и не укладывается в голове то в большинстве случаев ООП, UML и системы проектирования, моделирования и т.п. все равно скорее всего не решат проблему и не упростят ничего, а скорее даже усложнят. Поэтому для создания очень сложной, но реально работающей системы лучше разделять на несколько проектов, направлений или библиотек и минимизировать потоки обмена данными между всем этим хозяйством. Помните что все гениальное просто.

Я думаю что «Компьютерное зрение» мало используется на практике, потому что нет хороших отраслевых решений и хороших реализаций, которые можно было бы легко установить и настроить без помощи специалистов в этой области. А те, что есть – либо слишком дороги, либо не раскручены и о них мало кто знает.

Обзор задач компьютерного зрения в медицине / Habr


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

Автоматическое детектирование циркулирующих опухолевых клеток



Циркулирующие опухолевые клетки скрестившиеся с с несколькими флуоресцентными антителами

Циркулирующие опухолевые клетки — это клетки, которые отделяются от места основной опухоли и распространяются через кровоток, образуя вторичные опухоли в других органах.

Раннее обнаружение таких клеток и оценивание прогрессирования болезни очень важно для эффективного лечения, поэтому сейчас активно разрабатываются системы для автоматического обнаружения опухолевых клеток. Например, исследователи из Германии [2] получили accuracy > 99%, recall = 88% и precision = 86% на экспериментальном датасете небольшого размера.

Источники:

  1. Automated Detection of Circulating Cells Using Low Level Features
  2. Automated Detection of Circulating Tumor Cells with Naive Bayesian Classifiers
  3. bioview.com/applications/circulating-tumor-cells

Автоматическое обнаружение диабетической ретинопатии



Классификация изображений в зависимости от степени заболевания: a) normal; b) mild; c) moderate; d) severe; e) prolific

Авторы соревнований на kaggle по обнаружению диабетической ретинопатии утверждают, что 40-45% американцев, страдающих диабетом, также подвержены и диабетической ретинопатии (думаю, что в России показатели примерно такие же). Прогрессирование ухудшения зрения может быть замедленно или предотвращено, если вовремя обнаружить заболевание. Таким образом, разработка систем по обнаружению диабетической ретинопатии также является актуальной.

Самый лучший результат quadratic weighted kappa на соревнованиях составил 0.84958 (Private Leaderboard). Некоторые исследователи разрабатывают адаптеры для смартфонов для получения снимков сетчатки. Делают они это при помощи 28D или 40D линз (стоят такие линзы около 300$) и насадки для смартфона, которую печатают на 3d принтере.


Адаптер для получения снимков сетчатки

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

Источники:

  1. www.kaggle.com/c/diabetic-retinopathy-detection
  2. Algorithms for the Automated Detection of Diabetic Retinopathy Using Digital Fundus Images: A Review
  3. 3D Printed Smartphone Indirect Lens Adapter for Rapid, High Quality Retinal Imaging
  4. Smartphone fundoscopy. Ophthalmology

Сегментация МРТ изображений



Снимки МРТ головного мозга

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

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


Пример работы алгоритма сегментации. Слева — истинная разметка; справа — полученная разметка

Авторам из [1] удалось получить следующую точность сегментации для анатомических структур(показатель DSC — мера сходства Дайса):

  • Мозжечок — 0,885 ± 0,05
  • Паллидум — 0,7442 ± 0,009
  • Желудочек — 0,9 ± 0,02
  • Кровеносные сосуды — 0,2 ± 0,001
  • Средний мозг — 0,8474 ± 0,0073

Источники:
  1. А. Ю. Зубов, О. В. Сенюкова. GraphiCon 2015. Сегментация изображений магнитно-резонансной томографии головного мозга с помощью сопоставления с несколькими атласами
  2. Sequence-independent segmentation of magnetic resonance images

Анализ ультразвуковых изображений


Для примера возьмём задачу по нахождению нервной структуры шеи с недавних соревнований на kaggle.
Слева — ультразвуковое изображение шеи, справа — нервная структура; на изображениях видно, что нахождение нервной структуры является нетривиальной задачей даже для человека (не являющимся специалистом в этой области)

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

Наилучший результат по мере сходства Дайса DSC на kaggle составил — 0.73226.

Источники:

  1. Identify nerve structures in ultrasound images of the neck

Анализ лазерных спекл-картин



Лазерная спекл-картина руки, показывающая перфузию до и после растирания небольшой области руки

Автоматический анализ лазерных спекл-картины применяют для измерения кровотока. В частности, это помогает при лазеротерапии повреждённых тканей.

Источники:

  1. Laser speckle contrast imaging for measuring blood flow
  2. Laser speckle contrast imaging in biomedical optics

Заключение


Рассмотренные задачи лишь капля воды в море. В области анализа медицинских изображений большой простор для исследований.

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

Отправить ответ

avatar
  Подписаться  
Уведомление о