Обнаружение объектов: требуется обучение или обучение не требуется?

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

  1. Таблица
  2. Бутылка.
  3. Камера
  4. Машина

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

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

Проще говоря, мой вопрос: нужны ли мне эти тысячи положительных и отрицательных объектов для идентификации объекта? Или достаточно просто 4 фото с 4 ракурсов?

Я собираюсь использовать для этого OpenCV.

Обновить

Собственно главное примерно так .. Представьте, что у меня 2 ноута. Один - Dell, а другой - HP. Оба являются ноутбуками, но, как вы знаете, у них есть четко видимые различия, включая логотип. Можем ли мы сделать это с помощью описания функций? Если нет, то насколько «сложен» «тренировочный» процесс? Сколько фото нужно?

Обновление 2. Мне нужно обнаруживать "определенные" объекты. Не все машины, не все бутылки и т. Д. Например, «Maruti Car Model 123» и «Ferrari Car Model 234» - это автомобили, но разные. Представьте, что у меня есть фотографии Maruti и Ferrari вышеупомянутых моделей, мне нужно их обнаружить. Мне не нужно беспокоиться о других автомобилях или транспортных средствах, или даже о других моделях Maruti и Ferrari. Но вышеупомянутая «Модель автомобиля Maruti 123» должна быть идентифицирована как «Модель автомобиля Maruti 123», а упомянутая выше «Модель автомобиля Ferrari 234» должна быть идентифицирована как «Модель автомобиля Ferrari 234». Сколько картинок мне нужно для этого?


person JustCause    schedule 06.05.2014    source источник
comment
Зависит от того, какой алгоритм вы собираетесь использовать.   -  person eerorika    schedule 06.05.2014
comment
Вы понимаете, что делаете 2D-фотографии 3D-объектов? Поскольку разные вращения происходят в трехмерном пространстве, распознавание должно происходить в двухмерном пространстве. Если вы можете реконструировать 3D-объект, распознавание в 3D-пространстве будет намного проще, но это большая IF.   -  person MSalters    schedule 06.05.2014
comment
@ user2079303: Пожалуйста, ознакомьтесь с моим обновлением этого вопроса.   -  person JustCause    schedule 06.05.2014
comment
@MSalters: Пожалуйста, ознакомьтесь с моим обновлением этого вопроса.   -  person JustCause    schedule 06.05.2014
comment
@HashMap вы хотите обнаружить ЛЮБУЮ бутылку / стол / камеру / машину или одну конкретную бутылку / стол / камеру / машину? Если один конкретный недеформирующийся объект - это то, что вы хотите обнаружить, пары изображений этого конкретного объекта может быть достаточно без какого-либо обучения. С другой стороны, если вы хотите обнаружить porsche carrera, пара фотографий Ford Focus может не помочь;)   -  person Micka    schedule 06.05.2014
comment
@Micka: Вы правы, мне нужно обнаружить определенные объекты. Не все машины, не все бутылки и т. Д. Например, Maruti Car Model 123 и Ferrary Car Model 234 - это автомобили, но разные. Представьте, что у меня есть фотографии марути и феррари, и мне нужно их обнаружить. Мне не нужно беспокоиться о других автомобилях или транспортных средствах, или даже о других моделях Maruty и Ferrary. Но вышеупомянутая модель Maruti Car Model 123 должна быть идентифицирована как Maruti Car Model 123, а упомянутая выше Ferrary Car Model 234 должна быть идентифицирована как Ferrary Car Model 234. Сколько изображений мне нужно для этого?   -  person JustCause    schedule 06.05.2014
comment
по крайней мере, одна сторона каждого объекта, которая может быть видна при последующих обнаружениях, чем больше, тем лучше. но если эти модели автомобилей были изменены пользователем или изменены каким-либо другим образом (цвет / дизайн и т. д.), ваша эталонная модель снова может быть недостаточно правильной, вам нужно будет обучить модель. Но почему бы вам просто не попробовать это без тренировки?   -  person Micka    schedule 06.05.2014
comment
возможно, посмотрите: course.cs.washington.edu/ курсы / csep576 / 05wi / lectures /   -  person Micka    schedule 06.05.2014
comment
@Micka: Если пользователь изменил его, то пока мы можем игнорировать его.   -  person JustCause    schedule 06.05.2014
comment
@Micka: вау! потрясающая ссылка !!! у вас есть еще что-то подобное? Вау!   -  person JustCause    schedule 06.05.2014
comment
@Micka: Могу ли я иметь представление о том, сколько фотографий мне нужно для тренировки и как это сделать? Согласно предоставленной вами ссылке, похоже, что мы должны предоставить 1 изображение в случае 2D. Так как у меня 3D, то 4 изображения с 4 сторон будет достаточно?   -  person JustCause    schedule 07.05.2014
comment
У меня нет практического опыта, но я бы подумал о 8 изображениях, включая изображения между двумя сторонами. Может быть, поискать оригинальную бумагу для просеивания (от Лоу). Если они тоже использовали некоторую базу данных   -  person Micka    schedule 07.05.2014
comment
@HashMap google также для этой статьи: Отличительные особенности изображения от масштабно-инвариантных ключевых точек - UBC ... в конце они дают некоторую информацию о базовом распознавании obj. и процитируйте их другие статьи!   -  person Micka    schedule 07.05.2014
comment
@Micka: Спасибо, все ваши советы работают в реальном времени, верно? Это означает, что камера видит объект и идентифицирует его.   -  person JustCause    schedule 08.05.2014


Ответы (2)


Ответы:

  1. Если вы хотите обнаружить определенный объект и вам не нужно учитывать изменения точки обзора, вы можете использовать 2D-функции: http://docs.opencv.org/doc/tutorials/features2d/feature_homography/feature_homography.html

  2. Чтобы различать 2 логотипа, вам, вероятно, потребуется создать детектор для каждого логотипа, который будет обучаться на наборе изображений. Например, вы можете обучить каскадный классификатор Хаара.

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

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

person GilLevi    schedule 06.05.2014
comment
Привет, Спасибо за ответ. Так что да, как я уже упоминал в своем вопросе, представьте, что у меня уже есть фотографии Maruti Car Model 123 и Ferrary Car Model 234. Итак, если камера видит эту Maruti Car Model 123 (в реальном времени), то она должна идентифицировать ее как есть. Не следует путать его с Феррари. Нам не нужно думать о других автомобилях. Позже в этом приложении мне, возможно, придется идентифицировать дверь, свет и т. Д. Этой машины. Жду вашего ответа. - person JustCause; 06.05.2014
comment
Я бы попробовал использовать функции Decaf: github.com/UCB-ICSI-Vision- Группа / декаф-релиз - person GilLevi; 06.05.2014
comment
Спасибо! Это что-то вроде course.cs.washington.edu/courses / csep576 / 05wi / lectures /? - person JustCause; 07.05.2014
comment
Спасибо. Эти советы работают в реальном времени, верно? Это означает, что камера видит объект и идентифицирует его в режиме реального времени. - person JustCause; 08.05.2014
comment
Возможно, для обнаружения в реальном времени вам следует попробовать Caffe: caffe.berkeleyvision.org Это быстрее, чем Decaff - person GilLevi; 08.05.2014
comment
Большое спасибо. Нам все еще нужно тренировать образы, верно? Сколько изображений мне нужно вложить в этот учебный процесс. Я буду делать снимки со всех 4 сторон, так что достаточно 2 снимков на каждую сторону? Таким образом получается 8 изображений. - person JustCause; 08.05.2014
comment
Я предлагаю следующий процесс: на этапе обучения извлеките функции с помощью Decaf из множества изображений и обучите классификатор. На этапе тестирования, получив тестовое изображение, извлеките из него дескриптор и передайте его классификатору. Думаю, вам понадобится гораздо больше, чем 8 изображений. Делайте много снимков при разных условиях освещения и с разных точек обзора. - person GilLevi; 08.05.2014
comment
хм .. Много изображений означает тысячи на объект? Или 20-30? на самом деле мне нужно только обнаружить определенные объекты, поэтому, если есть тысячи объектов, будет несколько миллионов изображений! - person JustCause; 08.05.2014
comment
Трудно сказать, сколько именно изображений вам понадобится. Это также зависит от того, насколько ограничены условия смены молнии и смены позы. Начните с нескольких десятков и посмотрите, насколько хорошо это работает. - person GilLevi; 08.05.2014
comment
Спасибо, сколько времени займет этот процесс? - person JustCause; 08.05.2014
comment
Извлечение функций без кофеина занимает около 1-3 секунд на изображение (на моем компьютере). Я не уверен, сколько времени продлится обучение. - person GilLevi; 08.05.2014
comment
Спасибо за ответ и постоянную поддержку. Вы что-то упомянули о ближайшем соседе, верно? Ссылка, которую я вам предоставил, похожа на это? Я только что видел, что его использовали для идентификации деталей и местоположений автомобилей! Могу я узнать вашу идею по этому поводу, пожалуйста? Еще раз спасибо за вашу постоянную поддержку - person JustCause; 08.05.2014
comment
По сути, вы можете извлекать функции из большого набора обучающих выборок. Получив тестовое изображение, извлеките из него функции и найдите наиболее близкую характеристику тестового изображения в обучающем наборе. Вы можете отнести тестовое изображение к тому же классу, что и его ближайший объект в обучающем наборе (или, чаще, его ближайший сосед). - person GilLevi; 09.05.2014
comment
Здравствуйте, у меня еще один вопрос. Что будет на выходе после обучения? XML-файл? - person JustCause; 18.05.2014
comment
В основном это зависит от реализации и среды (какой классификатор вы обучаете? На каком языке программирования? OpenCV или Matlab). Я не уверен, каковы будут результаты, если вы используете OpenCV. - person GilLevi; 19.05.2014

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

Что касается содержания вопроса, то количество возможных углов на изображении объекта бесконечно. Если у вас всего четыре изображения в вашем обучающем наборе, тестовый пример можно сделать под углом, который находится на полпути между обучающим примером A и обучающим примером B, что затрудняет распознавание для вашего алгоритма. Чем больше обучающая выборка, тем выше вероятность распознать объект. Будьте осторожны: вы никогда не достигнете абсолютной уверенности в том, что ваш алгоритм распознает объект. Это становится более вероятным.

person cangrejo    schedule 06.05.2014
comment
Спасибо за ответ. Собственно главное примерно так .. Представьте, что у меня 2 ноута. Один - Dell, а другой - HP. Оба являются ноутбуками, но, как вы знаете, у них есть четко видимые различия, включая логотип. Можем ли мы сделать это с помощью описания функции? (docs.opencv .org / doc / tutorials / features2d / feature_description /) Если нет, то насколько сложен процесс обучения? Сколько фото нужно? - person JustCause; 06.05.2014