Завершив курс профессора Эндрю Нг Машинное обучение на Coursera (настоятельно рекомендуется), я решил немного расширить один из проектов, чтобы посмотреть, как нейронная сеть будет работать с моей коллекцией изображений персонажей Симпсонов. Этот первый пост более высокого уровня и охватывает результаты. Если вам нужны подробности, вы можете перейти к Часть 2, где я погружаюсь в часть кода.

Обзор

Что я сделал, так это взял более 2000 изображений персонажей Симпсонов в оттенках серого размером 80x60 пикселей и передал их в нейронную сеть, которую я написал в Octave. Для каждого изображения я указал, является ли персонаж в кадре Гомером, Бартом, Лизой или Мардж. Нейронная сеть сглаживает изображение в массив из 4800 пикселей и использует прямое и обратное распространение, чтобы «узнать», какой из четырех символов присутствует на изображении. Конечный результат показан как прогнозируемое значение.

Я понимаю, что существует бесконечно много способов улучшить весь этот процесс, и меня больше интересовало, будет ли он достаточно хорошо работать с моими данными. Я тоже хотел повеселиться :)

Результаты

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

[идентификатор подписи = ”attachment_260 align="alignnone" ширина = ”452]

Примеры изображений Симпсонов[/caption]

Мы разделяем данные на наборы для обучения и перекрестной проверки и выполняем 450 итераций данных. Модель состоит из 4800 входных узлов (по одному на каждый пиксель) плюс 50 скрытых узлов, заканчивающихся нашими 4 выходными узлами (Гомер, Барт, Лиза, Мардж). Вы можете представить что-то подобное, но с еще тысячами кругов и линий.

[идентификатор подписи = ”attachment_250 align = ”alignnone” ширина = ”500]

Источник из Википедии Glosser.ca[/caption]

Визуализировать то, что происходит под капотом (в слое с синим кругом), сложно. Мы можем посмотреть, что «видит» наш скрытый слой, отобразив значения для 50 скрытых узлов. Давайте возьмем одно изображение Симпсонов и пропустим его через нашу сеть.

[идентификатор подписи = ”attachment_241 align="alignnone" ширина = ”564]

Скрытые узлы Симпсонов[/caption]

То, что вы видите, — это 4800 пикселей для одного изображения, отображаемого для каждого из 50 скрытых узлов в сети. Некоторые узлы, похоже, уловили закономерности (какими бы непонятными они ни были). В то время как другие узлы, кажется, имеют «статический» или случайный шум. Это может заставить нас пересмотреть количество скрытых узлов или, возможно, скорректировать наши обучающие данные. Но пока продолжим.

На следующем шаге каждый из этих 50 узлов будет передаваться каждому из 4 выходных значений (Гомер, Барт, Лиза, Мардж). Мы будем использовать комбинированные значения этих 50 узлов, чтобы «голосовать», какой персонаж наиболее вероятен на этом изображении. Узел символа с наибольшим значением становится предсказанным символом. Мы сравниваем эти прогнозы с выходными данными, чтобы измерить нашу общую точность.

[идентификатор подписи = ”attachment_242 align="alignnone" ширина = ”603]

Точность модели Симпсонов[/caption]

Похоже, что наша модель очень хорошо справилась с обучением (99,8%), но не так хорошо, когда дело дошло до новых изображений (75,7%). Это связано с тем, что нейронные сети склонны к переоснащению. С достаточным количеством итераций они могут изучить что-то слишком хорошо, чтобы не обобщать новые данные. Тем не менее, учитывая, что наши данные были равномерно распределены по четырем символам, мы получили 3-кратный прирост прогностической способности по сравнению со случайным угадыванием 1 из 4. Неплохо.

Я разбил точность по персонажам, где 1=Гомер, 2=Барт, 3=Лиза, 4=Мардж. Интересно, что у Мардж была самая высокая прогностическая ценность (может быть, ее волосы?). Остальные персонажи кажутся похожими. В последнем столбце показана наиболее распространенная неправильная классификация этого символа. Похоже, эта сеть склонялась к Гомеру или Барту. Давайте посмотрим, как это выглядит на практике для 4 наших прогнозов:

В нашей выборке оказались 2 Барта, 1 Мардж и 1 Гомер. В соответствии с нашим общим числом точности, мы получили 3 из 4 правильных из них. Изображение Мардж, которое мы использовали здесь, вероятно, было не самым лучшим с ее более отдаленной спиной и включением большей части ее тела.

Заключение

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

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

[идентификатор подписи = ”attachment_257 align="alignnone" ширина = ”356]

Предсказание цифр[/caption]

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

[идентификатор подписи = ”attachment_258 align="alignnone" ширина = ”497]

Прогноз числа NN[/caption]