2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Свёрточные нейронные сети
Сообщение09.12.2018, 23:08 


14/10/18
5
Здравствуйте, хотелось бы прояснить некоторые нюансы. Сверточная нейронная сеть устроена следующим образом: сначала идет сверточный слой, он с помощью фильтра с некоторым смещением проходит по изображению и на выходе получается некоторая матрица. Далее может идти пулинг, а затем обычная нейронная сеть. Вопрос. Сверточный слой имеет активационные функции? То есть после свертки результаты проносятся через эти функции? Насчет каналов. У нас может быть трехканальное изображение, то есть RGB, три цвета. Надо ли делать соответствующее кол-во фильтров? В общем, можно поподробнее насчет каналов и кол-ва фильтров(зачем делать много фильтров)?

 Профиль  
                  
 
 Re: Свёрточные нейронные сети
Сообщение10.12.2018, 07:28 


18/11/18
589
Что значит "а затем обычная нейронная сеть"? Сверточных слоев может быть сколько угодно - теоретически ограничено только размерами подаваемой на первый слой картинки и размерами и количеством последующих матриц ядер (фильтров).
Касательно фильтров и RGB - цветов - все зависит от задачи. Иногда проще работать с бинарным (черно-белым) изображением, но, в основном, работают с тремя цветами, чтобы не потерять информацию - так она используется максимально возможно.
Четких указаний, когда что применять и сколько никто не даст. (Многие вообще сомневаются, что общая задача распознавания изображений вообще имеет пусть хоть какое сложное математическое (аналитическое) решение).

 Профиль  
                  
 
 Re: Свёрточные нейронные сети
Сообщение10.12.2018, 11:26 


14/10/18
5
A_I, "полносвязная" нейронная сеть. Я в курсе, что их может быть несколько. Что насчет фильтров? Зачем их делать 16 или 12, например? Для большей гибкости? Или что?

 Профиль  
                  
 
 Re: Свёрточные нейронные сети
Сообщение10.12.2018, 12:07 


18/11/18
589
Newby в сообщении #1360175 писал(а):
A_I, "полносвязная" нейронная сеть. Я в курсе, что их может быть несколько. Что насчет фильтров? Зачем их делать 16 или 12, например? Для большей гибкости? Или что?


Не знаю насчет "гибкости"...
Как пример (хотя - далеко не идеал и не оптимум) - у нас бортовая система видеораспознавания для дронов. Она решает относительно "узкую" задачу - определение любой самоходной техники на земле с определенной высоты и при определенной скорости полета самого дрона. Да к тому же в черно-белом варианте (вернее - "бесцветном", так как картинка поступает с апертурного радара). Сейчас первый слой "первичных" признаков содержит 34 фильтра.
Это кому-то что-то о чем-то говорит?.
Тут большое множество факторов. Помимо вышеуказанной конкретной задачи, ещё и как сеть обучали - достаточно ли материала, какие требования к производительности, что насчет оптимизации параметров - если нужна, в какой мере это делать и т.д. и т.п.

 Профиль  
                  
 
 Re: Свёрточные нейронные сети
Сообщение12.12.2018, 05:14 


12/07/15
3312
г. Чехов
Newby в сообщении #1360103 писал(а):
Вопрос. Сверточный слой имеет активационные функции? То есть после свертки результаты проносятся через эти функции? Насчет каналов. У нас может быть трехканальное изображение, то есть RGB, три цвета. Надо ли делать соответствующее кол-во фильтров? В общем, можно поподробнее насчет каналов и кол-ва фильтров(зачем делать много фильтров)?

1. Сверточный слой выполняет активацию функцией ReLU или аналогами. Эффективнее это делать внутри самой этой функции, но считается, что активационный слой идёт после сверточного слоя (вопрос терминологии).
2. Три цвета RGB обрабатываются в свертках-пулингах по отдельности, как будто три отдельные картинки. Но они должны в итоге слить свои данные в один полносвязный слой. Фильтры сверточных слоев для R, G и B при этом, мне кажется, должны быть разные, так как природа и характер данных R, G, B немного отличается, нечего их смешивать.
3. Фильтр свертки - это микро-2D-аналог веса полносвязной сети. И ведь известно, чем больше весов у нейросети, тем больше признаков она может извлекать. То же самое и фильтры в сверточной сети - каждый фильтр видит свои нюансы на изображении. И чем больше фильтров, тем больше нюансов на изображении распознается. Вы поняли математику фильтрующих свойств свертки? Как фильтр усиливает и как фильтр ослабляет пиксели изображения?

 Профиль  
                  
 
 Re: Свёрточные нейронные сети
Сообщение12.12.2018, 07:30 


18/11/18
589
Mihaylo в сообщении #1360618 писал(а):
2. Три цвета RGB обрабатываются в свертках-пулингах по отдельности, как будто три отдельные картинки.


Ага, так было бы в идеале (ну, или "в теории" только для алгоритмов сети "общего назначения", не привязанной ни к чему конкретно, в частности, конкретной видеокамере).
В реальности, кроме подбора ядер для разных цветов, приходится ещё опытным путем подгонять соотношения весов RGB - и для конкретной аппаратуры и для конкретного освещения и проч. проч..
Тут интересно, - сеть без учителя сможет ли оптимизировать такие веса?

 Профиль  
                  
 
 Re: Свёрточные нейронные сети
Сообщение12.12.2018, 13:07 
Заслуженный участник
Аватара пользователя


16/07/14
9144
Цюрих
Mihaylo в сообщении #1360618 писал(а):
2. Три цвета RGB обрабатываются в свертках-пулингах по отдельности, как будто три отдельные картинки.
Не всегда. Иногда на первый слой сразу подают все каналы. Иногда - все каналы в каком-то другом представлении. Например, ResNet во время обучения прибавляет ко всем пикселям изображения в RGB одно и то же значение (зависящее от изображения; см. раздел 4.1).

 Профиль  
                  
 
 Re: Свёрточные нейронные сети
Сообщение12.12.2018, 17:06 


12/07/15
3312
г. Чехов
A_I в сообщении #1360626 писал(а):
не привязанной ни к чему конкретно, в частности, конкретной видеокамере).
В реальности, кроме подбора ядер для разных цветов, приходится ещё опытным путем подгонять соотношения весов RGB - и для конкретной аппаратуры и для конкретного освещения и проч. проч..

Обычно задача распознавания не привязана к конкретной модели фото-видеоаппаратуры и месту её размещения. Обычно задача решается путем сбора примеров из разных источников.

Ну вобщем анализ RGB-каналов по отдельности - такое практикуется. Самый простой и рабочий вариант. Предобработка тоже делается. Возможны всякие усложнения и даже упрощения.

P.S. Начинающему полезно знать, что для распознавания обычно ограничиваются фотографиями размером 32х32, 48х48, 64х64. Смысла в HD-фото нет, все видно на обычном черно-белом маленьком телевизоре со сферическим экраном и мерцающим изображением.

 Профиль  
                  
 
 Re: Свёрточные нейронные сети
Сообщение13.12.2018, 17:06 


12/07/15
3312
г. Чехов
Вот еще полезный пост для начинающего:
Распознавание лиц человеческим мозгом: 19 фактов, о которых должны знать исследователи компьютерного зрения

 Профиль  
                  
 
 Re: Свёрточные нейронные сети
Сообщение14.12.2018, 03:01 


14/10/18
5
Mihaylo, да, я понял математику фильтров. Видел некоторые визуализации работы фильтров, как они находят фрагменты, которые подходят под нужное описание объекта. И видел, как еще можно применять фильтры для изменения изображения(выдать очертания объектов или сделать гауссово размытие). Насчет второго пункта. Получается, что у нас разные матрицы под каждый цвет? При этом они все еще разные, когда переходят в пулинг? И как они сливают свои данные в один полносвязный слой? Из трех матриц делаем одну? Или что-то типа того?

 Профиль  
                  
 
 Re: Свёрточные нейронные сети
Сообщение14.12.2018, 04:39 


12/07/15
3312
г. Чехов
Продолжаем вопрос №2:
Итак, R, G и B-матрицы изначально идут каждая своим путем обработки, у каждого канала свой набор сверточных ядер. (Кстати, более того, на каждой операции свертки могут быть разветвления - одно и то же входное изображение подвергается свертке с разными ядрами. В пулинге разветвлений нет: сколько веток пришло от сверточного слоя, столько веток и выходит из слоя пулинга. На последующем сверточном слое вновь разветвление, при чем надо понимать, что разветвляются разветвления, то есть итоговое количество веток равно $fork_1 \cdot fork_2 \cdot ...$, где $fork_1$ и $fork_2$ - это количество разветвлений на первом и втором сверточных слоях соответственно. В каждой ветке - матрица. И все это умножить на 3 - число цветовых каналов.)
Как только сверточно-пулинговые слои закончились, нужно все матрицы векторизовать или сплющить (flatten), то есть выстроить элементы в ряд (вектор). Все вектора склеить в один большой вектор. Это и будет входом в полносвязный слой. Порядок векторизации не важен, так как полносвязный слой ИЗНАЧАЛЬНО симметричен по отношению к входным признакам и никак не учитывает их взаимный порядок. Главное чтобы порядок векторизации в процессе обучения и эксплуатации не изменялся.

P.S. В некоторых случаях удается обойтись без полносвязного слоя, такие сверточные сети называют nonFC (non-full-connection-layer) или как-то так. Это когда в последнем слое получаются маленькие матрицы типа 5х5, 4х4 или 3х3 - к ним применяется свертка (без ReLU и пулинга!), на выходе которой матрица-число 1х1 - выход всей сети (ответ). Например, классическая CNN LeNet-1 относится к такому типу сетей.

-- 14.12.2018, 06:49 --

Кстати говоря, при написании кода изначально матрицы в каждом слое всех трех цветовых каналов можно рассматривать как один большой одномерный массив и проходиться по нему с помощью нескольких указателей (у каждой матрицы свой указатель) и тогда никакой специальной операции flatten делать не придется. Это ускорит алгоритм.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Mihaylo, YandexBot [bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group