Уменьшает ли точность обучения CNN с несколькими метками на данных одного класса?

Я построил CNN для классификации с несколькими метками, то есть для прогнозирования нескольких меток на изображение.

Я заметил, что ImageNet и многие другие наборы данных фактически включают набор примеров для каждой метки. Они структурировали данные так, что при наличии метки есть список примеров для этой метки. А именно: метка -> список изображений. Также Keras, который я использую, поддерживает структуру данных папки для каждой метки и в каждой папке список изображений в качестве примеров для метки.

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

Мой первый вопрос: 1) Может ли это (то есть одна метка на изображение в реальных условиях) снизить потенциальную точность сети?

Если это так, я подумал о создании набора данных в форме: image1, {список его ярлыков} image2, {список его ярлыков} и т. Д.

2) Будет ли такая структура давать лучшие результаты?

3) Какая хорошая научная статья по этому поводу?


person Chewbacca    schedule 29.01.2018    source источник
comment
Вы читали ответы?   -  person Marcin Możejko    schedule 04.02.2018
comment
Да, и написал дополнительные вопросы ниже ...   -  person Chewbacca    schedule 13.02.2018


Ответы (2)


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

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

person braaterAfrikaaner    schedule 29.01.2018
comment
Спасибо за ответ, я ценю это. В моем случае это проблема с несколькими ярлыками, и многие ярлыки сосуществуют для одного и того же изображения. Это означает, что у меня не может быть вероятностей, добавляемых к 1, я хочу, чтобы каждая метка была сопоставлена ​​с оценкой достоверности / вероятностью от 0 до 1 сама по себе (то есть от 0 до 1 для изображения, а не для суммы). Что вы думаете? - person Chewbacca; 07.02.2018

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

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

Чтобы ответить на ваши вопросы:

  1. По моему опыту (и зная, как работают обычные функции потерь), если вы настроите обучение только для одного класса - в идеальном сценарии это приведет к назначению 50% -50% (в случае двух классов истинности), 33% - 33% -33% (в случае трех классов достоверности) и т. Д. Как видите, это может вызвать проблемы, например с установкой порога классификации. Я лично выбрал бы стратегию с отдельным выходом с sigmoid для каждого класса - помните, что наличие нескольких частей информации об изображении в целом должно привести к лучшей производительности модели.

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

  3. Здесь у вас есть хорошая статья по вашему делу.

person Marcin Możejko    schedule 29.01.2018
comment
Спасибо за Ваш ответ. Я прочитал твой ответ и статью. У меня есть пара дополнительных вопросов: 1. Является ли метод, предложенный в этом документе, стандартным? Я нашел целый список документов в справке, предлагающих разные способы решения этой проблемы .. Хотя кажется, что они сильно отличаются друг от друга. 2. Насколько, по вашему мнению, важно иметь размеченные данные обучения для получения хороших результатов? Я имею в виду, что если я тренирую модель, как это было предложено в документе, который вы отправили по данным одного класса, вместо того, чтобы делать это с данными с несколькими метками, какова разница в точности? - person Chewbacca; 07.02.2018