Оценка глубины с помощью глубоких нейронных сетей, часть 1
Проводя опрос с моим коллегой Махмуд Селми о современных методах использования глубоких нейронных сетей для оценки карт глубины по 2-мерным изображениям, мы решили вести мини-блоги, которые, как мы надеемся, принесут пользу любой, кто знаком с NN, несмотря на область, в которой он их применяет, при условии, что НИКАКИХ предыдущих знаний в этой области не было.
Что ж, для начала мы должны знать, каковы наши входные и выходные данные, а затем мы должны найти, какую функцию стоимости (например, ошибки или потери) мы можем использовать для обратного распространения, чтобы обучить сеть. И вот о чем эта часть. Затем приступайте к поиску подходящей архитектуры.
Ввод:
Двухмерное RGB-изображение.
Вывод:
Карта глубины для этого изображения. Это просто двумерная матрица того же размера, что и входное изображение, которая содержит информацию, касающуюся расстояния поверхностей объектов сцены от точки обзора камеры. то есть: чем больше значение пикселя, тем дальше находится объект.
Функция потерь:
В этой статье используется следующая формула функции стоимости: «Прогнозирование глубины, нормалей поверхности и семантических меток с помощью общей многомасштабной сверточной архитектуры Дэвида Эйгена и Роба Фергуса» и многих других связанных статей.
Где:
D = журнал (прогнозируемая карта глубины)
D * = log (наземная карта глубины)
d =D - D*
di = Di - D * i = разница между прогнозируемой и реальной глубиной для пикселя i
n = общее количество пикселей
Потери, инвариантные к масштабу, помогают измерить отношения между точками сцены независимо от абсолютного глобального масштаба.
Итак, мы знакомы с первым членом, который равен 1 / n * сумме разницы между log Di и log D * i для всех i в диапазоне от первого пикселя до последнего пикселя n. Это можно просто назвать среднеквадратичной ошибкой (также известной как ошибка L2). Он измеряет только среднее отклонение между предсказанием глубины каждого пикселя и глубиной истины.
А как же второй срок ?!
Давайте посмотрим, какова его цель, а затем перейдем к тому, как ее достичь.
используя эту визуализацию этих предсказанных и наземных карт глубины.
По человеческим оценкам, этот результат считается почти идеальным.
Однако стандартная среднеквадратическая ошибка будет большой из-за того, что цветовой диапазон каждого изображения масштабируется отдельно.
С другой стороны, наша функция потерь с добавленным членом приведет к гораздо меньшей ошибке, поскольку основная проблема заключается в том, чтобы отношения относительной глубины между пикселями хорошо сохранялись.
Но как этого добиться с помощью этого члена функции затрат?
Этот термин (с отрицательным знаком) засчитывает ошибки, если они в одном направлении, и наказывает их, если они возражают. Таким образом, несовершенный прогноз будет иметь меньшую ошибку, если его ошибки согласуются друг с другом. Давайте воспользуемся примером с числами, чтобы как можно быстрее получить интуицию.
Итак, как показано выше: вычитая этот член в каждом случае из первого члена в стоимости, мы можем обнаружить, что первый случай более благоприятен для общих потерь, чем второй, достигнув того, что мы упоминали ранее:
признает ошибки, если они в одном направлении, и наказывает их, если они возражают. Таким образом, несовершенный прогноз будет иметь меньшую ошибку, если его ошибки согласуются друг с другом.
Мы говорили о числах, так что давайте разберемся с интуицией на другом примере.
Подумав об этом, мы можем фактически обнаружить, что это приводит к предпочтению обученной сети, которая имеет отклонения в прогнозах, а не базовой истине, которая сохраняет отношения относительной глубины между всеми пикселями изображения (для простоты рассмотрим прогноз Di = 2D * i для каждого пикселя i), чем другая обученная сеть, которая идеально предсказывает некоторые пиксели, скажем, объекта X в середине изображения, в то время как другой объект Y, по прогнозам, находится ближе к камере, чем X, хотя на самом деле он находится дальше по глубине. Хотя без этого термина, вторая сеть будет предпочтительнее, особенно если Y - небольшой объект (то есть: представлен небольшим количеством пикселей).
Хотя первая сеть предсказывала глубину, масштабированную на 2 больше, чем наземная истина, она сохранила относительные отношения глубины между X и Y, предсказав, что Y дальше, чем X. И наша новая потеря выбрала этот первый случай, придав ему меньшую стоимость.
Это то, чего мы стремимся достичь… yaaaay!
Основываясь на этом, к функции затрат добавляется новый член следующего вида:
Недавно добавленный термин сравнивает градиенты изображения предсказания с наземной истинностью, наказывая внезапное изменение (в любом направлении в 2-м пространстве) разницы между предсказанной и наземной истинными картами. Таким образом, если пиксели i и являются двумя соседними пикселями, этот термин заставляет разницу между di и dj быть как можно более минимальной, а значения карты глубины ведущего пикселя i и j должны быть почти равными, если их истинная истинность равна (то есть: пиксели i и j имеют одинаковую глубину) и меняются, если их основные истинные значения были разными (т. е. пиксели i и j имеют разную глубину). Это способствует тому, чтобы прогнозы имели не только близкие значения, но и схожую локальную структуру. Экспериментально установлено, что выходные данные лучше соответствуют градиентам глубины без ухудшения измеренных характеристик L2, что приводит к более точным прогнозам.
На сегодня все. Надеюсь, вы поняли, что незначительные изменения традиционных функций потерь могут улучшить производительность.
В следующем блоге (часть 2) мы намерены подробно изучить различные архитектуры для достижения этой области, а затем еще один, богатый кодом реализации и иллюстрациями.
Если вас интересуют эта и другие серии статей, относящиеся к другим областям, особенно связанным с предсказаниями на основе последовательностей (например, классификация видео), которые не очень хорошо освещаются в большинстве курсов, пожалуйста, дайте этому посту хлопнуть в ладоши и следите за другими, которые будут опубликованы в ближайшее время.
На этот пост сильно повлияли следующие статьи:
Со мной можно связаться: Linkedin