Какую функцию потерь использовать при большом количестве выходов? - PullRequest
0 голосов
/ 15 июня 2019

Данные, аналогичные изображениям размером 1000 x 1 пикселей, получены с оборудования. Где-то на изображении может быть 1, 2 или более объектов.

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

Мне кажется, что "категорическая кроссентропия" не подходит, потому что, например: в обучающих данных я укажу, что объекты находятся в 10 и 90 пикселях. И нейронная сеть будет предсказывать, что объекты находятся на 11 и 89 пикселей. Это не большая потеря. Но для сети это будет такая же потеря, как если бы она предсказывала объекты на 500 и 900 пикселей.

Какая функция потерь подходит для такого случая? Я использую Keras

Ответы [ 3 ]

1 голос
/ 15 июня 2019

При обнаружении объектов в основном у нас есть две задачи - локализация и классификация. Таким образом, у нас есть две потери для двух задач: одна - локализация, а другая - потеря классификации. Он рассчитывается с использованием IoU (пересечение через Союз). подробнее здесь.

0 голосов
/ 15 июня 2019

Как утверждает Сиддхарт, вы будете использовать две функции потерь, поскольку у вас есть проблема регрессии и проблема классификации.См. https://www.youtube.com/watch?v=GSwYGkTfOKk для более подробной информации.В частности, обратите внимание на этот слайд:

enter image description here

То есть первая задача просто классифицирует, присутствует ли объект (потеря логистической регрессии), а втораяЗадача находит ограничивающие рамки (квадрат ошибки при потере).

0 голосов
/ 15 июня 2019

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

Например, у вас есть 10 пикселей, а метка истинности земли равна 3 и вы выбрали 3 соседей.

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

[0 0 1 0 0 0 0 0 0 0]

ВРешение, которое я предложил, вы должны использовать это

[0 1 1 1 0 0 0 0 0 0]

Или это может быть так, в основном наложение гаусса вместо плоских меток.

[0 0,5 1 0,5 0 0 0 0 0 0]


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

[0 1 0 0 0 0 0 0 0] (фактические пиксели)

[- - 1 - - - - 0 - -] (сгруппировать в 2группы из 5. Ваша сеть теперь имеет только два выхода. Думайте об этом как о стадии биннинга, поскольку фактический пиксель принадлежит группе 1. эта подсеть использует двоичную кросс-энтропию).

[1 0] (первая классификационная сетьoutput)

[- 10 0] (этот второй этап можно рассматривать как дельта-сеть, он берет классифицированное значение бина из первого этапа и выводит корректирующее значение, так как первый бин привязан к индексу 2,вам нужно предсказать -1, чтобы переместить его в индекс 1. Эта сеть обучается с использованием сглаженной потери l1.

Теперь сразу возникает проблема, что, если в группе 1 есть два объекта?Это печальная проблема, которая также существует в архитектуре обнаружения объектов.Способ обойти это - определить слегка смещенные и масштабированные позиции бина (или якоря).Таким образом, вы можете обнаружить в одном пикселе максимум N объектов, где N - это количество якорей, определенных в этом пикселе.

...