Страницы

Поиск по вопросам

Показаны сообщения с ярлыком распознавание. Показать все сообщения
Показаны сообщения с ярлыком распознавание. Показать все сообщения

четверг, 23 января 2020 г.

Распознавание дубликатов видео

#алгоритм #видео #распознавание


Ищу open-source проект для решения следующей задачи:
Дано множество видеофайлов, среди которых нужно найти одинаковые. При этом одинаковые
видеозаписи в разном качестве и под разными кодеками тоже должны детектиться. То есть
сравнение по хэшу или по длине не подойдет, нужен глубокий анализ.
Лучшее, что я сейчас нашел -- это SOTU, но его исходники закрыты.
Так же буду благодарен за ссылки на хорошую теорию по этой теме.    


Ответы

Ответ 1



Как вариант от себя: если транскодер ничего не делает с видео, а только ужимает его (т.е. таймлайн остается равный), то можно сделать так (ну чисто теоретически): разделить видео на несколько кадров (сколько душе угодно) сравнить эти кадры Методы сравнения изображений можно подчерпнуть тут: http://compsciclub.ru/node/2003

четверг, 26 декабря 2019 г.

Распознавание простых жестов на Android

#распознавание #android #java


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


Ответы

Ответ 1



openCV

Ответ 2



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

Ответ 3



Во первых вам нужно убедиться что жесты показывает именно человек а не другие сучества (нимфы-хоббиты, мало ли...) - для этого нужно определить если ли челлицо в кадре. Неплохо с этой задачей справляется OpenCV - https://docs.opencv.org/3.3.0/d7/d8b/tutorial_py_face_detection.html Однако еще лучше DLIB - http://dlib.net/face_detector.py.html Масса других примеров есть, поищите - python, C++, java Затем нужно взять фрагмент кожи лица (лучше всего в районе щеки, так как там нет волос и не закрывается аксессуарами) и найти цветовые доминанты (K-means clustering) - https://docs.opencv.org/3.1.0/d1/d5c/tutorial_py_kmeans_opencv.html Удобно для этой цели использовать цветовые схемы Lab, HSV/HSL - в opencv можно конвертировать из BGR в любую. Затем с помощью OpenCV InRange отфильтровать исходное изображение по всем K цветовым доминантам - получите K бинарных масок, их нужно объединить с помощью bitwise_or. Теперь в областях с белыми битами ищите руки - они должны быть где-то соразмерно недалеко от лица. А дальше всё будет зависеть от ловкости Ваших рук (никакого мошенства) - для анализа позы руки применение CNN или другой подходящей нейросети уже вполне соразмерно задаче. Неплохой материал https://www.youtube.com/watch?v=xML2S6bvMwI - под видео ссылка на статью.

воскресенье, 1 декабря 2019 г.

Применение результатов сегментации изображения для дальнейшего анализа

#алгоритм #opencv #распознавание #машинное_обучение


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

Допустим, нужно выделить на топографической карте однородные объекты(например деревья),
а далее выделить на этой карте леса(скопления деревьев)


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

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

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


По расстоянию Махаланобиса тоже ничего внятного не написано, только в общих чертах,
откуда конкретно брать например данные для матрицы ковариации?
    


Ответы

Ответ 1



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

суббота, 30 ноября 2019 г.

Распознавание лиц на видео и поиск совпадений в базе данных

#изображения #видео #нейронные_сети #распознавание_образов #распознавание


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

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

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


Ответы

Ответ 1



Советую использовать фреймворк компании Neurotechnology: SentiVeillance SDK Обнаружение лица в реальном времени Одновременное отслеживание нескольких лиц или объектов в на кадре Расширенное обнаружение и классификация людей и отслеживание транспортных средств Классификация по половому признаку, оценка возраста, распознование наличие очков и волос на лице Поддержка больших систем наблюдения за счет подключения до 10 камер на одном компьютере и быстрая синхронизация между сетевыми компьютерами Кроссплатфовренный SDK, поддерживающий несколько языков программирования Подробнее... Так же на сайте доступны для скачки 30-ти дневная триал версия и демо приложение. Цена лицензии

Ответ 2



Как я понял, вам требуется готовая система распознавания лиц. The MegaFace Benchmark Можете посмотреть качество существующих алгоритмов по международному конкурсу The MegaFace Benchmark: http://megaface.cs.washington.edu/results/fgnetresults.html http://megaface.cs.washington.edu/results/fgnetresults_challenge2.html Там же приводятся названия алгоритмов/компаний к которым вы можете обратиться, чтобы купить/получить доступ к API их алгоритмов (коммерческие решения) или получить исходный код (open source решения). Из российских компаний хорошие позиции по качеству распознавания занимает NTechLab. Использование готовых API Также хорошим решением будет использование готового API качественного сервиса для распознавания лиц, чем писать с нуля свою собственную систему и выводить ее на конкурентный уровень качества (на что уйдут годы работы, т.к. для нормального качества распознавания недостаточно библиотеки Open CV, там надо внедрять полноценную 3D реконструкцию лица). Например, вот хороший вариант: https://www.faceplusplus.com/ У них множество API на самые разные случаи распознавания лиц (Face Searching, Face Detection, Return Face Attributes, Return Face Details) с возможностью ведения собственной базы данных "подозрительных" лиц (Add Face, Remove Face, Create FaceSet). В базовом варианте система бесплатна, в расширенном функционале они берут 0.001$ за запрос, а также можно купить лицензию на месяц/год. У вас приложение ориентировано на коммерческий сектор, потенциальные клиенты поймут, если вы включите в стоимость количество распознаваемых лиц (даже при ежедневном трафике магазина в 1000 человек дополнительные расходы у вас будут всего 1$). Алгоритм работы Можете использовать такое решение: Направляем анализируемые видеопотоки на собственные сервера, где проводим их покадровый разбор и сжатие информации до получения набора различающихся между собой фотографий. При помощи библиотеки Open CV вытаскиваете из получившегося набора фотографии лиц, по которым требуется провести распознавание. Сверяем фотографии по схожести хэшей или базовым признакам (чтобы не отправлять на распознавание повторно фото одного и того же лица в разные моменты времени или с другого ракурса). Если фотография лица уникальная, то отправляем ее через API сервиса (тот же Face++ или любой другой), получаем результат. В случае нахождения совпадения по базе выводим предупреждение пользователям системы (через SMS, Push-уведомления или интерактивный web-интерфейс на WebSockets). Отдельным моментом будет формирование базы "подозрительных" лиц. Если вы планируете ее делать "на лету" по данным вашего приложения, то можете сделать интерфейс добавления на основе снимка из видеопотока.

понедельник, 25 ноября 2019 г.

Как сравнить два аудиофайла?


Требуется, например, звук глотания отличить от кашля. 

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

Есть ли что-то для сравнения двух аудиофайлов и определения их похожести?
    


Ответы

Ответ 1



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

Ответ 2



Очевидно, если вы нашли примеры распознавания речи, то пример распознавания нейросетью изображения вам найти не составит труда. Есть немножко туповатый, но вполне работающий способ распознавания звуков по их графическом "изображению" при котором требуется лишь базовое знание нейросетей на уровне 2-3 курса ВУЗа. Для этого нужно: Подготовка: 1) Записать сэмплы эталонных команд, которые вы собираетесь распознавать. (Количество распознаваемых команд зависит от каскадности используемой нейросети и способа её обучения) 2) Сформировать для каждого сэмпла графики зависимости амплитуды(громкости) от времени и сохранить их в виде Bitmap. 3) Нормализовать полученные изображение по размеру (все изображения должны быть одинаковы по размеру) 4) Обучить нейросеть на полученные эталонные изображения. Работа: 1) Получить потоковый звук с микрофона 2) Определить границы распознаваемого фрагмента по околонулевым значениям амплитуды (тишина) 3) Сформировать для записанного сэмпла график зависимости амплитуды(громкости) получить Bitmap 4) Масштабировать Bitmap до тех же размеров, что и эталонные 5) Распознать полученное изображение, подав на вход нейросети. В данном случае распознавание звука сводится к классическому распознаванию изображений примеров которого в интернете достаточно много. В качестве источника для изображения может использоваться не только амплитуда, но и любая другая зависимость, делающая фрагмент гарантированно уникальным. Данный метод - это редкостный изврат, но он работает (проверял еще в 2003 году) требует от программиста лишь базовых навыков по созданию нейросетей (а с появлением Vuforia и OpenCV и их не нужно) и околонулевых знаний в МатАне. В чем то вам может помочь вот эта статья на Habrahabr P.S. Если же все же решитесь делать "по-человечески" - вот статья, с которой стоит начать: Простыми словами о преобразовании Фурье

Ответ 3



Как сравнить два аудиофайла? Ответить самому себе на вопрос: какие конкретно алгоритмические различия должны быть выделены; Потратить годы на изучение технологий распознавания и анализа речи/звуков; Накопить целевую экспертизу; Вовлечь в проект специалистов по теме; Реализовать проект и получить PROFIT; Стать с новой технологией вторым Марком Цукербергом. Как-то так. Я совсем не понимаю тех, кто проголосовал за поднятие этого вопроса. Наверное, эт просто было бы круто, вот так вот взять и привести здесь код, который "различал" бы два аудио-файла по неизвестно каким требованиям и параметрам. Наверняка именно это и побудило апвотеров так проголосовать. Но вопрос, на мой взгляд глубоко теоретический, затрагивающий весьма специфические технологии, которые до сих пор "сидят" в инкубаторах крупных технологических компаний, и в которые [технологии] инвестируются миллионы долларов. Короче говоря, этот вопрос не имеет однозначного ответа, потому что он, во-первых задан без необходимых условий и дополнений; а во-вторых, задан без предварительного самостоятельного поиска решений. Если уж очень хочется ответ на именно такой вопрос – используйте для сравнения HEX-редактор ;)

Ответ 4



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

Ответ 5



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

Ответ 6



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

суббота, 6 июля 2019 г.

Зачем распознавать отдельные фонемы?

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


Ответ

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

пятница, 5 июля 2019 г.

Алгоритм распознавания состояний глаз - открыты/закрыты

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


Ответ

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

Изображения мною взяты исключительно для примера, но в реальности, если съёмка ведётся с обычной вебкамеры, области глаз получаются значительно меньше. Это просто в следствие того, что специально подносить собственную физиономию близко к объективу редко у кого возникает желание. Но именно в следствие этого (условий съёмки, упоминаемых мною в самом начале) как правило и начинаются расхождения в подходах к определению местоположения зрачка.
Методов по детекции зрачка разработано довольно много. От самых простых, до комплексных. Очень многие подробно расписаны (к сожалению в подавляющем большинстве случаев на английском). А для некоторых имеется и вполне свободный доступ к исходникам. На том же гитхабе можно обнаружить довольно много различных решений. Например такое или такое. Последнее, кстати, не требует локализации области глаз, только лишь лица.
Вообще, детекция зрачка кажется очевидным путём для решения поставленной задачи: зрачок есть - глаз открыт, нет зрачка - глаз закрыт. Но у многих методов, идущих этим путём, имеется проблема с детекцией в том случае, если глаз полуприкрыт или закрыт вовсе. В этом случае происходят ложные срабатывания алгоритмов и те выдают местоположение зрачка аккурат на ресницах, "лежащих" на соединении верхнего и нижнего века. То есть, искомое состояние о закрытии глаза способны выдавать далеко не все методы.
Для решения этой проблемы можно использовать машинное обучение или даже предварительно сделать образцы открытого и закрытого глаз, а затем сравнивать с этими шаблонами новые кадры. Но можно пойти и от обратного, например, применив самый простой детектор кожи. Очевидно, что если глаз закрыт, цветом кожи будет покрыто практически всё изображение глаза, а если открыт, то далеко не всё.
int main() { // Загрузить изображения открытого и закрытого глаз из файлов. cv::Mat eye_opened_mat = cv::imread("eye-opened.jpg"); cv::Mat eye_closed_mat = cv::imread("eye-closed.jpg");
// Показать, что загрузили в отдельных окошках. cv::imshow("eye-opened", eye_opened_mat); cv::imshow("eye-closed", eye_closed_mat);
// Сконвертировать цветовое пространство изображений в YCbCr. cv::Mat opened_mat, closed_mat; cv::cvtColor(eye_opened_mat, opened_mat, cv::COLOR_BGR2YCrCb); cv::cvtColor(eye_closed_mat, closed_mat, cv::COLOR_BGR2YCrCb);
// Изъять из картинок указанные диапазоны значений пикселей // для каждого из цветовых каналов YCbCr. cv::inRange(opened_mat, cv::Scalar(0,133,77), cv::Scalar(255,173,127), opened_mat); cv::inRange(closed_mat, cv::Scalar(0,133,77), cv::Scalar(255,173,127), closed_mat);
// Показать результат в отдельных окошках. cv::imshow("grd-opened", opened_mat); cv::imshow("grd-closed", closed_mat); cv::waitKey();
return 0; }
Этот код использует OpenCV. Результат будет следующий:

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

четверг, 4 октября 2018 г.

Распознавание лиц на видео и поиск совпадений в базе данных

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


Ответ

Советую использовать фреймворк компании Neurotechnology:
SentiVeillance SDK
Обнаружение лица в реальном времени Одновременное отслеживание нескольких лиц или объектов в на кадре Расширенное обнаружение и классификация людей и отслеживание транспортных средств Классификация по половому признаку, оценка возраста, распознование наличие очков и волос на лице Поддержка больших систем наблюдения за счет подключения до 10 камер на одном компьютере и быстрая синхронизация между сетевыми компьютерами Кроссплатфовренный SDK, поддерживающий несколько языков программирования
Подробнее...
Так же на сайте доступны для скачки 30-ти дневная триал версия и демо приложение
Цена лицензии

Распознавание лиц на видео и поиск совпадений в базе данных

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


Ответ

Советую использовать фреймворк компании Neurotechnology:
SentiVeillance SDK
Обнаружение лица в реальном времени Одновременное отслеживание нескольких лиц или объектов в на кадре Расширенное обнаружение и классификация людей и отслеживание транспортных средств Классификация по половому признаку, оценка возраста, распознование наличие очков и волос на лице Поддержка больших систем наблюдения за счет подключения до 10 камер на одном компьютере и быстрая синхронизация между сетевыми компьютерами Кроссплатфовренный SDK, поддерживающий несколько языков программирования
Подробнее...
Так же на сайте доступны для скачки 30-ти дневная триал версия и демо приложение
Цена лицензии

понедельник, 1 октября 2018 г.

Какой метод коллективного распознавания использовать для классификации цифр/символов?

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

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

Метод областей компетентности
Идея коллективной классификации на базе областей компетентности в том, что каждый базовый классификатор может работать хорошо в некоторой области пространства признаков (область компетентности), превосходя в этой области остальные классификаторы по точности и достоверности решений. Область компетентности каждого базового классификатора должна как-то оцениваться. Соответствующая программа называется рефери. Задача классификации решается таким образом, что каждый алгоритм используется только в области своей компетентности, т.е. там, где он дает наилучшие результаты по сравнению с другими классификаторами. При этом в каждой области принимается во внимание решение только одного классификатора. Однако, необходимо иметь какой-то алгоритм, который для любого входа определяет, какой из классификаторов наиболее компетентен.
Один из подходов предполагает, что вместе с каждым классификатором используется специальный алгоритм (рефери), который предназначен для оценки компетентности классификатора. Под компетентностью классификатора в данной области пространства представления объектов классификации понимается его точность, т.е. вероятность правильной классификации объектов, чье описание принадлежит этой области.
Общая же схема обучения коллективному распознавания на основе оценки компетентности состоит из 2 шагов (рис. 1). На 1-м шаге производится обучение и тестирование каждого конкретного базового классификатора. Этот шаг не отличается от обычных схем обучения. На следующем шаге, после тестирования каждого классификатора, обучающая выборка, которая использовалась на этапе тестирования для некоторого классификатора, разделяется на два подмножества, L+ и L−. При этом в первое подмножество включаются те экземпляры исходной тестовой выборки, которые при тестировании были классифицированы правильно. Во второе подмножество включаются остальные экземпляры тестовой выборки, т.е. те, которые были классифицированы ошибочно. Рассматривая эти множества данных в качестве областей компетентности и некомпетентности классификатора соответственно, их можно использовать в качестве обучающих данных для обучения алгоритма «рефери». При классификации новых данных задача рефери состоит в том, чтобы для каждого входного примера определить, принадлежит ли он области компетентности алгоритма или нет, и если принадлежит, то какова вероятность правильной классификации этого примера. После этого рефери поручает наиболее компетентному классификатору решать задачу классификации.

Нейросетевые подходы.
Нейросетевые подходы коллективной классификации делятся на методы, которые используют объединение классификаторов с помощью нейронной сети, ансамбли сетей (ensembles of neural networks) и те, которые используют нейронные сети, построенные из модулей.
Нейросеть для объединения классификаторов
Один из подходов, рассматривает использование нейронной сети для объединения решений базовых классификаторов (рис. 2).
Выходом каждого базового классификатора является вектор решений (вектор, содержащий в качестве значений мягкие метки), значения элементов которого принадлежат некоторому числовому интервалу [a, b]. Эти значения подаются на вход нейронной сети (она должна быть обучена объединению решений классификаторов базового уровня), выходом которой является решение в пользу того или иного класса. Выходом сети также может являться вектор, размерность которого равна количеству классов распознаваемых объектов, который на каждой позиции имеет значение некоторой меры доверия в пользу того или иного класса. В этом случае в качестве решения может быть выбран класс с максимальным значением такой меры.
Система объединения решений функционирует следующим образом:
выбирается и обучается множество базовых классификаторов; подготавливаются мета-данные для обучения нейронной сети. Для этого базовые классификаторы тестируются с использованием интерпретированной выборки данных и формируется для каждого тестового примера вектор решений базовых классификаторов, к которому добавляется компонента, в которую вносится имя истинного класса принадлежности тестированного примера; выборка мета-данных используется для обучения нейронной сети, выполняющей объединение решений.

Метод модульных нейросетей
Для модульных нейронных сетей предлагается использовать так называемую шлюзовую сеть (“gating network”), нейронную сеть для оценки компетентности классификаторов для конкретного входного вектора данных предъявляемых классификаторам. Этот вариант рассматривает нейросетевую парадигму для объединения решений на основе оценок компетентности. Соответствующая теория здесь называется mixture of experts — «смесь экспертов». Каждому классификатору ставится в соответствие программа «рефери», которая предсказывает степень его компетентности по отношению к конкретному входу, подаваемому на вход множества классификаторов базового уровня (рис. 3).
В зависимости от входного вектора Х решения различных классификаторов могут быть выбраны и использованы для принятия объединенного решения. Количество входов предсказывающей сети равно размерности входного вектора пространства признаков. Количество выходов сети равняется количеству классификаторов, т.е. L. Предсказывающая нейросеть обучается предсказывать меру компетентности каждого классификатора при предъявлении ей конкретного входного вектора, т.е. оценку того факта, что классификатор выдает правильное решение. Степень компетентности оценивается числом из интервала [0,1]

Ансамбли нейронных сетей
Также, предлагается архитектура системы объединения решений, которая состоит из нескольких экспертов (нейросетей). Объединение знаний нейронных сетей в ансамбле доказало свою эффективность, продемонстрировав перспективность применения технологий коллективного распознавания в преодолении проблемы "хрупкости".
Ансамбль нейронных сетей – это набор нейросетевых моделей, принимающий решение путем усреднения результатов работы отдельных моделей. В зависимости от того, как конструируется ансамбль, его использование позволяет решить одну из двух проблем: склонность базовой нейросетевой архитектуры к недообучению (эту проблему решает мета-алгоритм boosting), либо склонность базовой архитектуры к переобучению (мета-алгоритм bagging).
Существуют различные универсальные схемы голосования, для которых победителем является класс:
максимальное – с максимальным откликом членов ансамбля; усредняющее – с наибольшим средним откликом членов ансамбля; большинством – с наибольшим числом голосов членов ансамбля.

Некоторые другие методы
Существуют также такие ансамблевые алгоритмы машинного обучения как:
Random forest (заключающийся в использовании комитета (ансамбля) решающих деревьев) Adaboost (алгоритм усиления классификаторов, путём объединения их в комитет, предложенный Йоавом Фройндом)

Мой вопрос
Вопрос состоит в том, какую схему коллективного распознавания лучше использовать для распознавания символов/цифр/автономеров. Источники данных, с которых я брал информацию о различных схемах групповой классификации датируются 2006 годом и боюсь, что некоторые методы могли устареть. Какую схему будет более рационально использовать с точки зрения актуальности какого-либо метода.
Мною были упомянуты следующие схемы:
на базе областей компетентности на базе использования одной нейронной сети для объединения классификаторов на базе использования модульной нейросети на базе ансамблей нейронных сетей комитетные методы Random forest и Adaboost
Какой из подходов в потенциале может выдать лучшие показатели точности и производительности в сфере распознавания символов/цифр/автономеров. Возможно, некоторые методы устарели или показали свою несостоятельность в определенных сферах. Возможно есть и другие более эффективные и актуальные методы коллективного распознавания (групповой классификации).

Источники с подробным описанием (оттуда я брал информацию о методах коллективного распознавания):
Методы и алгоритмы коллективного распознавания: Обзор (В. И. Городецкий, 2006, pdf) Актуальные вопросы использования сверточных нейронных сетей и их комитетов в распознавании образов цифр (Кузьмицкий Н.Н., 2012, pdf) Random forest (Wiki) AdaBoost (Wiki)


Ответ

Данный ответ представляет собой микс перевода ответа пользователя D.W.♦ в этом вопросе на английском языке и ответов других экспертов StackExchange в моем вопросе в Cross Validated с похожей формулировкой.

Ответ пользователя D.W.♦ в этом вопросе
Современные методы для распознавания образов цифр не предполагают использование коллективного распознавания, областей компетентности, ансамблей или других алгоритмов упомянутых в вопросе. Вместо этого, современные методы для распознавания цифр используют сверточные нейронные сети. Только одну сверточную нейросеть: нет нужды для использования нескольких CNN или каких-то других изощрений. Вместо этого, акцент делается на конкретной архитектуре сверточной нейросети (например, какое кол-во слоев, какой тип операции объединения (pooling type) и на процедурах обучения (например, корректировка коэффициента скорости обучения в методе стохастического градиента, отсеве (dropout), «пакетной» нормализации (batch normalization) и др.) Насколько я знаю, это также является справедливым и для распознавания объектов/символов. Мой совет таков: хоть упомянутые в вопросе алгоритмы выглядят красиво на бумаге, они на самом деле могут и не быть необходимы или полезны в реальности для интересующих вас задач. Я не рекомендую использовать их на практике.

Часть ответа Franck Dernoncourt в этом вопросе
В одной из современных систем для классификации изображений получено ощутимое преимущество при использовании ансамбля (как и в большинстве других систем, насколько я знаю). Отражено в статье авторов He Kaiming, Xiangyu Zhang, Shaoqing Ren, и Jian Sun (эксперты Microsoft):
Deep residual learning for image recognition/Глубинное остаточное обучение для классификации изображений (ENG, 2015, PDF)
В статье приведены таблицы:
Перевод: Таблица 4. Коэффициенты ошибок (%) в результатах с одиночными моделями (без ансамблей) на базе проверочного/контрольного множества (validation set) ImageNet. Перевод: Таблица 5. Коэффициенты ошибок (%) в результатах с ансамблями. Top-5 error метрика на базе тестового множества ImageNet. P.S. Top-5 error — метрика, в которой алгоритм может выдать 5 вариантов класса картинки и ошибка засчитывается, если среди всех этих вариантов нет правильного. Заметка: объяснение о том, что такое top-1 error и top-5 error также дается здесь: ImageNet: what is top-1 and top-5 error rate?
Команда MSRA c их моделью ResNets выиграли первое место на соревновании Large Scale Visual Recognition Challenge 2015 (ILSVRC2015)

Часть ответа пользователя jean в этом же вопросе
Предполагаю, что глубинное обучение достаточно актуально в большинстве задач компьютерного зрения (распознавание, обнаружение, получение сверхразрешения, выделение границ и т.д.) кроме специфичных задач вроде SLAM, где глубинное обучение еще пока не дотягивает до существующих методов. Часто, чтобы получить некоторое процентное преимущество для победы в соревнованиях по распознаванию, используют ансамбли и усреднение. Но сети становятся настолько качественными, что это уже не влияет так сильно на результаты. Я бы сказал, что в течение 20 последующих лет, большинство продуктов компьютерного зрения будет использовать глубинное обучение, даже в том случае, если появится что-то более эффективное. Добавлю к ответу Франка, что алгоритмы глубинного обучения меняются так быстро, что ResNets от Kaiming He уже не являются наиболее актуальными на данный момент. Сейчас на базе CIFAR, SVHN в свете софитов находятся: - "Densely Connected Convolutional Networks/Плотно связанные сверточные сети" и - SGDR: Stochastic Gradient Descent with Restarts/Метод стохастического градиента с перезапусками. Но даже эти результаты скоро могут перестать быть актуальными на ближайшем ILSVRC 2016

Какой метод коллективного распознавания использовать для классификации цифр/символов?

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

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

Метод областей компетентности
Идея коллективной классификации на базе областей компетентности в том, что каждый базовый классификатор может работать хорошо в некоторой области пространства признаков (область компетентности), превосходя в этой области остальные классификаторы по точности и достоверности решений. Область компетентности каждого базового классификатора должна как-то оцениваться. Соответствующая программа называется рефери. Задача классификации решается таким образом, что каждый алгоритм используется только в области своей компетентности, т.е. там, где он дает наилучшие результаты по сравнению с другими классификаторами. При этом в каждой области принимается во внимание решение только одного классификатора. Однако, необходимо иметь какой-то алгоритм, который для любого входа определяет, какой из классификаторов наиболее компетентен.
Один из подходов предполагает, что вместе с каждым классификатором используется специальный алгоритм (рефери), который предназначен для оценки компетентности классификатора. Под компетентностью классификатора в данной области пространства представления объектов классификации понимается его точность, т.е. вероятность правильной классификации объектов, чье описание принадлежит этой области.
Общая же схема обучения коллективному распознавания на основе оценки компетентности состоит из 2 шагов (рис. 1). На 1-м шаге производится обучение и тестирование каждого конкретного базового классификатора. Этот шаг не отличается от обычных схем обучения. На следующем шаге, после тестирования каждого классификатора, обучающая выборка, которая использовалась на этапе тестирования для некоторого классификатора, разделяется на два подмножества, L+ и L−. При этом в первое подмножество включаются те экземпляры исходной тестовой выборки, которые при тестировании были классифицированы правильно. Во второе подмножество включаются остальные экземпляры тестовой выборки, т.е. те, которые были классифицированы ошибочно. Рассматривая эти множества данных в качестве областей компетентности и некомпетентности классификатора соответственно, их можно использовать в качестве обучающих данных для обучения алгоритма «рефери». При классификации новых данных задача рефери состоит в том, чтобы для каждого входного примера определить, принадлежит ли он области компетентности алгоритма или нет, и если принадлежит, то какова вероятность правильной классификации этого примера. После этого рефери поручает наиболее компетентному классификатору решать задачу классификации.

Нейросетевые подходы.
Нейросетевые подходы коллективной классификации делятся на методы, которые используют объединение классификаторов с помощью нейронной сети, ансамбли сетей (ensembles of neural networks) и те, которые используют нейронные сети, построенные из модулей.
Нейросеть для объединения классификаторов
Один из подходов, рассматривает использование нейронной сети для объединения решений базовых классификаторов (рис. 2).
Выходом каждого базового классификатора является вектор решений (вектор, содержащий в качестве значений мягкие метки), значения элементов которого принадлежат некоторому числовому интервалу [a, b]. Эти значения подаются на вход нейронной сети (она должна быть обучена объединению решений классификаторов базового уровня), выходом которой является решение в пользу того или иного класса. Выходом сети также может являться вектор, размерность которого равна количеству классов распознаваемых объектов, который на каждой позиции имеет значение некоторой меры доверия в пользу того или иного класса. В этом случае в качестве решения может быть выбран класс с максимальным значением такой меры.
Система объединения решений функционирует следующим образом:
выбирается и обучается множество базовых классификаторов; подготавливаются мета-данные для обучения нейронной сети. Для этого базовые классификаторы тестируются с использованием интерпретированной выборки данных и формируется для каждого тестового примера вектор решений базовых классификаторов, к которому добавляется компонента, в которую вносится имя истинного класса принадлежности тестированного примера; выборка мета-данных используется для обучения нейронной сети, выполняющей объединение решений.

Метод модульных нейросетей
Для модульных нейронных сетей предлагается использовать так называемую шлюзовую сеть (“gating network”), нейронную сеть для оценки компетентности классификаторов для конкретного входного вектора данных предъявляемых классификаторам. Этот вариант рассматривает нейросетевую парадигму для объединения решений на основе оценок компетентности. Соответствующая теория здесь называется mixture of experts — «смесь экспертов». Каждому классификатору ставится в соответствие программа «рефери», которая предсказывает степень его компетентности по отношению к конкретному входу, подаваемому на вход множества классификаторов базового уровня (рис. 3).
В зависимости от входного вектора Х решения различных классификаторов могут быть выбраны и использованы для принятия объединенного решения. Количество входов предсказывающей сети равно размерности входного вектора пространства признаков. Количество выходов сети равняется количеству классификаторов, т.е. L. Предсказывающая нейросеть обучается предсказывать меру компетентности каждого классификатора при предъявлении ей конкретного входного вектора, т.е. оценку того факта, что классификатор выдает правильное решение. Степень компетентности оценивается числом из интервала [0,1]

Ансамбли нейронных сетей
Также, предлагается архитектура системы объединения решений, которая состоит из нескольких экспертов (нейросетей). Объединение знаний нейронных сетей в ансамбле доказало свою эффективность, продемонстрировав перспективность применения технологий коллективного распознавания в преодолении проблемы "хрупкости".
Ансамбль нейронных сетей – это набор нейросетевых моделей, принимающий решение путем усреднения результатов работы отдельных моделей. В зависимости от того, как конструируется ансамбль, его использование позволяет решить одну из двух проблем: склонность базовой нейросетевой архитектуры к недообучению (эту проблему решает мета-алгоритм boosting), либо склонность базовой архитектуры к переобучению (мета-алгоритм bagging).
Существуют различные универсальные схемы голосования, для которых победителем является класс:
максимальное – с максимальным откликом членов ансамбля; усредняющее – с наибольшим средним откликом членов ансамбля; большинством – с наибольшим числом голосов членов ансамбля.

Некоторые другие методы
Существуют также такие ансамблевые алгоритмы машинного обучения как:
Random forest (заключающийся в использовании комитета (ансамбля) решающих деревьев) Adaboost (алгоритм усиления классификаторов, путём объединения их в комитет, предложенный Йоавом Фройндом)

Мой вопрос
Вопрос состоит в том, какую схему коллективного распознавания лучше использовать для распознавания символов/цифр/автономеров. Источники данных, с которых я брал информацию о различных схемах групповой классификации датируются 2006 годом и боюсь, что некоторые методы могли устареть. Какую схему будет более рационально использовать с точки зрения актуальности какого-либо метода.
Мною были упомянуты следующие схемы:
на базе областей компетентности на базе использования одной нейронной сети для объединения классификаторов на базе использования модульной нейросети на базе ансамблей нейронных сетей комитетные методы Random forest и Adaboost
Какой из подходов в потенциале может выдать лучшие показатели точности и производительности в сфере распознавания символов/цифр/автономеров. Возможно, некоторые методы устарели или показали свою несостоятельность в определенных сферах. Возможно есть и другие более эффективные и актуальные методы коллективного распознавания (групповой классификации).

Источники с подробным описанием (оттуда я брал информацию о методах коллективного распознавания):
Методы и алгоритмы коллективного распознавания: Обзор (В. И. Городецкий, 2006, pdf) Актуальные вопросы использования сверточных нейронных сетей и их комитетов в распознавании образов цифр (Кузьмицкий Н.Н., 2012, pdf) Random forest (Wiki) AdaBoost (Wiki)


Ответ

Данный ответ представляет собой микс перевода ответа пользователя D.W.♦ в этом вопросе на английском языке и ответов других экспертов StackExchange в моем вопросе в Cross Validated с похожей формулировкой.

Ответ пользователя D.W.♦ в этом вопросе
Современные методы для распознавания образов цифр не предполагают использование коллективного распознавания, областей компетентности, ансамблей или других алгоритмов упомянутых в вопросе. Вместо этого, современные методы для распознавания цифр используют сверточные нейронные сети. Только одну сверточную нейросеть: нет нужды для использования нескольких CNN или каких-то других изощрений. Вместо этого, акцент делается на конкретной архитектуре сверточной нейросети (например, какое кол-во слоев, какой тип операции объединения (pooling type) и на процедурах обучения (например, корректировка коэффициента скорости обучения в методе стохастического градиента, отсеве (dropout), «пакетной» нормализации (batch normalization) и др.) Насколько я знаю, это также является справедливым и для распознавания объектов/символов. Мой совет таков: хоть упомянутые в вопросе алгоритмы выглядят красиво на бумаге, они на самом деле могут и не быть необходимы или полезны в реальности для интересующих вас задач. Я не рекомендую использовать их на практике.

Часть ответа Franck Dernoncourt в этом вопросе
В одной из современных систем для классификации изображений получено ощутимое преимущество при использовании ансамбля (как и в большинстве других систем, насколько я знаю). Отражено в статье авторов He Kaiming, Xiangyu Zhang, Shaoqing Ren, и Jian Sun (эксперты Microsoft):
Deep residual learning for image recognition/Глубинное остаточное обучение для классификации изображений (ENG, 2015, PDF)
В статье приведены таблицы:
Перевод: Таблица 4. Коэффициенты ошибок (%) в результатах с одиночными моделями (без ансамблей) на базе проверочного/контрольного множества (validation set) ImageNet. Перевод: Таблица 5. Коэффициенты ошибок (%) в результатах с ансамблями. Top-5 error метрика на базе тестового множества ImageNet. P.S. Top-5 error — метрика, в которой алгоритм может выдать 5 вариантов класса картинки и ошибка засчитывается, если среди всех этих вариантов нет правильного. Заметка: объяснение о том, что такое top-1 error и top-5 error также дается здесь: ImageNet: what is top-1 and top-5 error rate?
Команда MSRA c их моделью ResNets выиграли первое место на соревновании Large Scale Visual Recognition Challenge 2015 (ILSVRC2015)

Часть ответа пользователя jean в этом же вопросе
Предполагаю, что глубинное обучение достаточно актуально в большинстве задач компьютерного зрения (распознавание, обнаружение, получение сверхразрешения, выделение границ и т.д.) кроме специфичных задач вроде SLAM, где глубинное обучение еще пока не дотягивает до существующих методов. Часто, чтобы получить некоторое процентное преимущество для победы в соревнованиях по распознаванию, используют ансамбли и усреднение. Но сети становятся настолько качественными, что это уже не влияет так сильно на результаты. Я бы сказал, что в течение 20 последующих лет, большинство продуктов компьютерного зрения будет использовать глубинное обучение, даже в том случае, если появится что-то более эффективное. Добавлю к ответу Франка, что алгоритмы глубинного обучения меняются так быстро, что ResNets от Kaiming He уже не являются наиболее актуальными на данный момент. Сейчас на базе CIFAR, SVHN в свете софитов находятся: - "Densely Connected Convolutional Networks/Плотно связанные сверточные сети" и - SGDR: Stochastic Gradient Descent with Restarts/Метод стохастического градиента с перезапусками. Но даже эти результаты скоро могут перестать быть актуальными на ближайшем ILSVRC 2016