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

Представление изображения:

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

Цветное изображение:

Цветное или RGB-изображение, каждый пиксель представлен с использованием значений R, G и B. Это означает, что вам нужно три числа для представления изображения, пиксель красного цвета будет представлен как 255, 0, 0. Значение R равно 255, G и B равны 0, это 3-канальное изображение или мульти -канальное изображение. вы обнаружите, что нейронные сети работают лучше, когда числовые значения маленькие, поэтому эти значения пикселей в диапазоне 0–255 часто масштабируются, чтобы быть в диапазоне 0–1.

Изображения в оттенках серого:

изображения в градациях серого, один канал; одно значение, представляющее пиксель, и это интенсивность пикселя. Каждый пиксель представляет только информацию об интенсивности, поэтому у вас есть одно значение в диапазоне 0–1. Значение 1 означает пиксель с наивысшей интенсивностью, 0 - пиксель без яркости.

Изображение как тензор:

изображения по сути являются просто трехмерными тензорами. Изображения могут быть представлены с помощью 3D-матрицы. Количество каналов в изображении определяет количество элементов в третьем измерении. Первые два измерения относятся к высоте и ширине изображения. Когда вы работаете с нейронными сетями и изображениями, вы будете загружать в нейронную сеть пакет или список изображений за раз. Пакет изображений может быть представлен как один 4-D тензор, где первое измерение является размерностью пакета. Это, конечно, означает, что все изображения в этом пакете должны быть одного размера; одинаковой высоты, одинаковой ширины и одинакового количества каналов.

Наиболее распространенные методы предварительной обработки:

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

  • Соотношение сторон:

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

  • Unifrom размер изображения:

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

  • Злые и возмущенные изображения:

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

  • Нормализованный ввод изображения:

Ваши нейронные сети будут обучаться быстрее, если вы будете работать с нормализованными входными изображениями. Нормализация входного изображения означает, что вы центрируете значения пикселей вокруг среднего значения 0. Вы нормализуете каждый пиксель, вычитая среднее значение пикселя для всех ваших обучающих данных или одного пакета и деля на стандартное отклонение. Это гарантирует, что каждый пиксель имеет одинаковое распределение данных. После нормализации вы можете изменить масштаб значений пикселей, чтобы они находились в диапазоне 0–1.

  • Уменьшение размерности:

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

  • Увеличение данных:

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

Преобразования PyTorch:

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

В приведенной ниже книге вы видите серию преобразований, примененных к набору данных изображений CIFAR-10.

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

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