Русский
Русский
English
Статистика
Реклама

SpatialTransformerNetworksв MATLAB

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

SpatialTransformerNetwork(STN) один из примеров дифференцируемых LEGO-модулей, на основе которых можно строить и улучшать свою нейросеть. STN, применяя обучаемое аффинное преобразование с последующей интерполяцией, лишает изображения пространственной инвариантности. Грубо говоря, задача STNсостоит в том, чтобы так повернуть или уменьшить/увеличить исходное изображение, чтобы основная сеть-классификатор смогла проще определить нужный объект. Блок STNможет быть помещен в сверточную нейронную сеть (CNN), работая в ней по большей части самостоятельно, обучаясь на градиентах, приходящих от основной сети (более детально с данной темой можно ознакомиться по ссылкам: Хабри Мануал).

В нашем случае задачей является классифицировать 99 классов лобовых стёкол автомобилей, но, для начала, начнём с чего-нибудь попроще. Для того, чтобы ознакомится с данной тематикой возьмём базу данных MNIST из рукописных цифр и построим сеть из нейронных слоёв глубокого обучения MATLABи пользовательского слоя аффинной трансформации изображения (ознакомиться со списком всех имеющихся слоёв и их функционалом можно по ссылке).

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

Для того, чтобы реализовать возможности dlarray, нам необходимо вручную прописать аффинную трансформацию изображения так как функции MATLAB, реализующие данную возможность, не поддерживают структуры dlarray. Далее представлена написанная нами функция трансформации, весь проект доступен по ссылке.

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

Также важно уточнить, какие конкретно изменения накладываются на изображения разными числами матрицы преобразования. Первая строка накладывает трансформации по оси Y, а вторая по Х. Параметры выполняют изменение размера (приближение, отдаление), поворот и смещение изображения. Более детально матрица трансформации описана в таблице.

Y

Размер

Поворот

Смещение

Х

Поворот

Размер

Смещение

Теперь, когда мы разобрались с теоретической составляющей, перейдём к реализации сети с использованием STN. На рисунках ниже представлены структура построенной сети и результаты обучения для базы данных MNIST.

Структура сети.Структура сети.Результаты обучения.Результаты обучения.

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

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

Первое различие между входными данными это то, что числа это изображения в градиенте серого, а стёкла изображения формата RGB, следовательно, нам необходимо изменить слой трансформации, добавив цикл. Будем применять отдельно трансформацию к каждому из слоёв изображения. Также, для упрощения обучения, добавим в слой трансформации веса, на которые будем домножать матрицу трансформации, и установим эти веса в 2, за исключением весов смещения изображения, их установим в 0, для того чтобы сеть училась, в первую очередь, поворачивать и изменять масштаб изображения. Также, если взять данные веса меньше, то сеть дольше будет перестраивать веса STNв поисках полезной информации, так как полезная информация у нас находится по краям изображения, а не в центре, в отличии от сети с числами. Далее нам необходимо заменить часть классификатора, так как он является слишком слабым для наших входных данных. Чтобы не изменять структуру самого STN- мы приведём изображение к виду, похожему на числа, добавив слой нормализации и dropoutдля уменьшения объёма входных данных в STN.

Сравнивая данные на входе у сети с числами и стёклами, можно увидеть, что на стёклах диапазон значений варьируется от [0;255], а в числах от [0;1], а также в числах большая часть матрицы это нули. Примеры данных на входе показаны ниже.

Данные на входе у сети с числами.Данные на входе у сети с числами.Данные на входе у сети со стёклами.Данные на входе у сети со стёклами.

Опираясь на вышеприведённые данные, нормализация будет выполняться по принципу деления входных данных на 255 и обнуления всех значений меньше 0.3 и больше 0.75, а также от трёхмерного изображения мы оставим только одно измерение. На изображении ниже видно, что подаётся на входе и что остаётся после слоя нормализации.

Вход и выход слоя нормализации.Вход и выход слоя нормализации.

Также в связи с тем, что у нас не так много данных для тестирования и обучения сети, мы искусственно увеличим их объём за счёт аффинной трансформации, а именно, поворота изображения на случайный градус в пределах [-10;10] и прибавления случайного числа к матрице изображения для изменения цветовой палитры в пределах [-50; 50]. В функции чтения мы воспользуемся стандартными функциями MATLAB, так как в ней нам не требуется оперировать dlarrayструктурами. Ниже представлена используемая функция чтения входных изображений.

Ниже представлены структура сети с внесёнными изменениями и результаты обучения этой сети.

Структура сети.Структура сети.Результаты обучения.Результаты обучения.

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

Для сравнения, возьмём и протестируем сеть без использования STN, оставив только имеющийся у нас классификатор. Ниже представлены результаты обучения этой сети.

Результаты обучения.Результаты обучения.

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

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

Источник: habr.com
К списку статей
Опубликовано: 01.12.2020 16:10:27
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Блог компании цитм экспонента

Алгоритмы

Машинное обучение

Matlab

Network

Networking

Artificial intelligence

Stn

Spatial transformer networks

Dlarray

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru