Я хочу использовать классификацию изображений, чтобы определить категорию комнаты в квартире в Нью-Йорке. Моя квартира находится в здании в Ист-Виллидж, Манхэттен, и поэтому она представляет собой городской стиль жизни. Он имеет 3 спальни, 1 кухню и 1 ванную комнату. Изображения этих категорий — это то, что я хочу передать в свою модель машинного обучения, и хочу, чтобы модель предсказывала категорию комнаты на этом изображении. После некоторых исследований я понял, что для этого мы можем использовать сверточные нейронные сети. Но что такое сверточная нейронная сеть (CNN)? Если у вас самого есть этот вопрос, то следуйте дальше.

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

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

Что ж, у CNN есть скрытые слои, называемые сверточными слоями, в дополнение к другим несверточным слоям, таким как плотный слой (полностью связанный слой). Однако основой CNN являются ее сверточные слои. Но что делают эти сверточные слои? Эти сверточные слои, как и любой другой слой, принимают входные данные, применяют к ним какое-то преобразование, а затем выводят эти преобразованные входные данные на следующий слой.

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

Теперь, когда мы говорим, что фильтры обнаруживают шаблоны на изображении, что мы подразумеваем под словом шаблон? Чтобы дать вам представление высокого уровня, изображение состоит из краев, форм, текстур, объектов и т. д., и мы называем это шаблонами. Итак, один тип фильтра может обнаруживать формы на изображениях, и мы можем назвать его фильтром детектора формы. Другие фильтры могут обнаруживать углы, треугольники, круги и т. д. на изображении. Теперь эти простые фильтры — это то, что мы находим в начальных слоях CNN, и по мере того, как сеть становится глубже, фильтры становятся более сложными для обнаружения определенных объектов, таких как руки, глаза, нос и т. д. И в еще более глубоких слоях наш фильтр может иметь возможность обнаруживать более сложные объекты, такие как люди, ящерицы, рыбы и т. д.

Чтобы понять, что на самом деле происходит с этими сверточными слоями и их соответствующими фильтрами, давайте разберем пример: скажем, у нас есть сверточная нейронная сеть, которая принимает в качестве входных данных изображения рукописных цифр, например, из набора данных MNIST, и наша сеть их классифицирует. в их соответствующие категории того, является ли изображение 1 2 3 и т. д. Теперь давайте предположим, что первый скрытый слой в нашей модели является сверточным слоем, как упоминалось ранее. При добавлении сверточного слоя в модель мы также должны указать, сколько фильтров мы хотим, чтобы слой имел. Технически фильтр можно рассматривать как относительно небольшую матрицу, для которой мы определяем количество строк и количество столбцов, которые имеет эта матрица, а значения в матрице инициализируются некоторыми числами. Итак, для этого первого сверточного слоя в нашем примере мы собираемся указать, что мы хотим, чтобы слой содержал один фильтр размером 3x3.

Теперь, когда этот сверточный слой получает входные данные, фильтр будет скользить по каждому набору пикселей 3x3 из входных данных, пока он не будет скользить по каждому блоку пикселей 3x3 из всего изображения. Мы называем это скольжение свертыванием. Итак, технически мы говорим, что фильтр будет сворачиваться для каждого блока пикселей 3x3 из входных данных.

Давайте попробуем понять этот процесс свертки, используя изображение числа «7» из набора данных MNIST. Мы представляем это изображение с помощью матрицы в документе Excel, и каждое значение в матрице представляет собой отдельные пиксели изображения. Итак, это наш ввод, который передается на вход сверточному слою. Ранее мы указали, что рассматриваем только один фильтр в этом слое, и этот фильтр будет сворачиваться для каждого блока пикселей 3x3 из входных данных.

Когда фильтр впервые попадет на первый блок пикселей 3x3, скалярное произведение самого фильтра с блоком пикселей 3x3 из входных данных будет вычислено и сохранено. Это будет происходить для каждого набора пикселей 3x3, который свёртывается фильтром.

Теперь мы переходим к следующему блоку 3x3, берем скалярное произведение и затем сохраняем значение в пикселе рядом с предыдущим пикселем.

Если мы посмотрим на формулу для каждой из этих ячеек, мы увидим, что это действительно скалярное произведение фильтра с каждой секцией пикселей 3x3 из ввода.

После того, как этот фильтр свернет весь ввод, у нас останется новое представление нашего ввода, которое будет состоять из всей матрицы тех сохраненных скалярных произведений, которые мы получили от фильтра. Интересно отметить размер этого нового вывода. Если в этом преобразовании свертки используются все настройки по умолчанию, то размер этого вывода будет (N-F+1), где N — размер изображения, а F — размер фильтра. Итак, в нашем случае входное изображение из набора данных MNIST имеет размер 28x28, а размер фильтра в нашем сверточном слое - 3x3. Таким образом, размер выходного изображения этого сверточного слоя равен 28–3+1, что равно 26, т. е. новое изображение имеет размер 26x26.

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

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