Разница между обнаружением признаков и обнаружением объектов

Я знаю, что наиболее распространенное обнаружение объектов включает каскады Хаара и что существует множество методов обнаружения функций, таких как SIFT, SURF, STAR, ORB и т. д., но если моей конечной целью является распознавание объектов, оба способа не дают у меня тот же результат? Я понимаю использование методов признаков для простых форм и узоров, но для сложных объектов эти алгоритмы признаков, кажется, также работают.

Мне не нужно знать разницу в том, как они функционируют, но достаточно ли наличия одного из них, чтобы исключить другой. Если я использую каскадирование Хаара, нужно ли мне возиться с SIFT? Зачем беспокоиться?

Благодарность

РЕДАКТИРОВАТЬ: для своих целей я хочу реализовать распознавание объектов для широкого класса вещей. Это означает, что любые кубки, имеющие форму, аналогичную чашкам, будут подбираться как часть кубков класса. Но я также хочу указать экземпляры, то есть кубок Нью-Йорка будет взят как кубок экземпляра Нью-Йорка.


person mugetsu    schedule 29.09.2011    source источник
comment
Вы знакомы с тем, как работают алгоритмы классификации? На мой взгляд, обнаружение признаков — это просто часть обнаружения объектов. Смотрите мой ответ.   -  person Peter O.    schedule 30.09.2011
comment
@ПитерО. знаете ли вы о методах обнаружения объектов, которые включают методы обнаружения, которые я упомянул? Насколько мне известно, Хаар с ними не связан. Или это более мощное обнаружение функций ограничивается разработчиком, самостоятельно включающим машинное обучение?   -  person mugetsu    schedule 30.09.2011


Ответы (3)


Обнаружение объекта обычно состоит из двух этапов: обнаружение признаков и классификация.

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

Эти функции являются входными данными для второго шага, классификации. (Насколько мне известно, для обнаружения признаков можно использовать даже каскад Хаара.) Классификация включает в себя такие алгоритмы, как нейронные сети, K-ближайший сосед и так далее. Цель классификации состоит в том, чтобы выяснить, соответствуют ли обнаруженные признаки признакам, которыми должен обладать обнаруживаемый объект. Классификация обычно относится к области машинного обучения.

Обнаружение лица, например, является примером обнаружения объекта.

РЕДАКТИРОВАТЬ (9 июля 2018 г.):

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

person Peter O.    schedule 29.09.2011
comment
спасибо за ваш ответ, я искал ответ на этот вопрос, так как я запутался между тем, чтобы границы с оценкой bbox считали обнаруженной функцией? или какие функции можно обнаружить на изображениях, например, если я работаю над субтитрами - person user5520049; 27.06.2021

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

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

person Flexo    schedule 29.09.2011
comment
так для чего люди используют обнаружение признаков? Чтобы указать экземпляр объекта? - person mugetsu; 30.09.2011
comment
поэтому для моих целей вы бы сказали, что обнаружение объекта может использоваться для определения экземпляра, а обнаружение функции может использоваться для определения класса? Я знаю, что Хаар неплохо разбирается в конкретных объектах, но плохо определяет широкий класс. Разве с помощью обнаружения признаков я не смогу найти общие черты объектов одного и того же класса, а затем определить их как один и тот же класс? - person mugetsu; 30.09.2011

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

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

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

person sumodds    schedule 28.10.2011