предисловие
Спецификация данных — нормализацияЭто проблема, которую легко игнорировать и легко совершать ошибки в глубоком обучении. Все данные, на которых мы тренируемся, проходят некоторую нормализацию при подаче в модель. Например, в pytorch некоторые модели обучаются на нормализованных данных, поэтому, когда мы используем эти предварительно обученные модели, мы должны обратить внимание на нормализацию данных, прежде чем добавлять в модель собственные данные.
В моделях, которые поставляются с pytorch, мы можем выбратьпредварительно обученная модель:
-
import torchvision.models as models resnet18 = models.resnet18(pretrained=True) alexnet = models.alexnet(pretrained=True) squeezenet = models.squeezenet1_0(pretrained=True) vgg16 = models.vgg16(pretrained=True) densenet = models.densenet161(pretrained=True) inception = models.inception_v3(pretrained=True)
Предварительно обученная модель, то есть параметры веса в модели были обучены, и вес модели можно считать после построения модели.
Но есть некоторые вещи, о которых нужно знать:
- Весовые параметры модели обучаются, но убедитесь, что вводимые данные соответствуют формату данных, используемому во время предварительной подготовки.
- Помните, когда форматирование требуется, а когда нет.
То есть правильный дизайн модели - это только первый шаг. Правильность формата данных изображения, которые мы вводим, также особенно важна. Большинство изображений, которые мы обычно вводим, являются трехканальными цветными изображениями RGB, и большинство из диапазонов данных [0-255], что является 24-битным изображением в обычном смысле (8 бит для каждого из трех каналов RGB). В pytorch есть специальные модули:transforms
модуль для выполнения некоторых операций предварительной обработки изображения:
transform = transforms.Compose([
transforms.RandomResizedCrop(100),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])
текст
И в официальном представлении pytorch также упоминается, что данные, соответствующие модели предварительного обучения, используемой pytorch, должны быть:
То есть 3-канальное RGB-изображение (3 х В х Ш), причем высота и ширина желательно не менее 224 (т. размер данных изображения [0-1], используйте среднее и стандартное значение для нормализации.
Чиновник также сказал, почему это сказано, потому что все предобучающие модели получаются с использованием нормализованных данных, поэтому данные, которые мы вводим, также должны быть отформатированы, иначе легко получить взрыв потерь.
Зачем нам его форматировать?
В качестве примера возьмем группу изображений лиц Формат этой группы изображений лиц следующий:
- Сделайте 100 наборов изображений лица
- Высота и ширина изображения равны 100.
- 3 канала, диапазон пикселей [0-255]
отсюда изLabeled faces in the WildИз набора данных берутся 100 изображений лиц, каждому изображению в этом наборе данных соответствует имя, и лицо каждого изображения расположено почти посередине.
После того, как у нас есть этот набор данных, следующие шаги, как правило, следующие:
Единая форма и размер
Прежде чем вводить изображение в нейронную сеть, важно отметить, что каждое изображение должно быть гарантированно одинакового размера и размера. Большинство моделей требуют, чтобы форма входного изображения была квадратной, обычно 256 x 256, 128 x 128, 64 x 64 или другие формы, которые лучше всего подходят для обучения. Конечно, возможны и другие формы, например, прямоугольник, но если это прямоугольник, вам следует обратить внимание на дизайн канала сверточного слоя. Короче говоря, мы сначала обрезаем полярность изображения, обрезаем кадрирование в квадрат и обычно занимаем центральное положение изображения.
Например, следующее изображение лица (256 x 256) очень удобно, потому что его не нужно обрезать.
масштаб изображения
Пропорция также более важна, форма изображения определяется, но иногда, когда мы тренируемся, поскольку слой свертки становится все глубже и глубже, карта признаков становится все меньше и меньше.Для достижения некоторых функций пропорция изображения, которую мы нужно также немного меньше. При увеличении или уменьшении масштаба, при уменьшении масштаба до 100 пикселей, мы умножаем изображение выше на 0,39 (100/256). Тем не менее, при увеличении и уменьшении масштаба необходимо учитывать скругление, и будь то пол или потолок, имеет свою перспективу.
среднее, дисперсия
Среднее значение и дисперсия набора изображений могут быть хорошим обобщением информации и характеристик этого набора изображений. Среднее — это средний уровень набора данных, а дисперсия представляет собой степень разброса данных. На рисунке ниже представлены графики средних значений и дисперсии для показанных ранее карт лиц из 100. Вы можете видеть размытое лицо на средней карте слева. И видно, что лица из 100 граней распределены по центру, а на карте дисперсии справа видно, что центральный цвет темнее (меньше 100), а окружающая область ярче (больше 100) , то есть 100 снимков яркие. , распределение по изображению существенно меняется.
После нормализации таким образом в процессе обучения нейронной сети влияние градиента на каждое изображение среднее, то есть пропорционального несоответствия нет. Перед нормализацией распределение признаков каждого изображения отличается, некоторые из них крутые, а некоторые плоские.Если предварительная обработка не выполняется, то значения признаков некоторых изображений относительно велики, а некоторые относительно малы во время градиентного спуска, так что градиент Операция не может учитывать нисходящий тренд различных функций, разных размеров и разных уровней, поэтому ее трудно тренировать, и потери будут продолжать колебаться.
Форматирование (нормализация)
Говоря о сути форматирования, которое мы упоминали в начале статьи, на самом деле даже в наборе изображений пиксели каждого изображения сначала вычитаются из пикселей среднего значения всех изображений, а затем делятся на дисперсию . Это гарантирует, что все распределения изображений будут схожими, то есть легче сходятся во время обучения, то есть быстрее и качественнее обучение. Кроме того, среднее значение и стандартное значение различных диапазонов пикселей изображения различны.Как правило, мы вводим данные изображения [0-1] или [0-255].В модели pytorch ввод [0-1]], и в модели caffe мы вводим [0-255].
На следующем рисунке представлены 100 изображений лиц после форматирования.
Очевидно, что форматирование предназначено для выравнивания центров обработки данных, как, например, на диаграмме в cs231n, слева — исходные данные, посередине — распределение данных за вычетом среднего, а справа — распределение данных, деленное на дисперсию станд. конечно, в cs231n деление на std на самом деле может быть Не делайте этого, потому что пока данные следуют определенному диапазону (например, все изображения [0-255]), в этом нет необходимости.
размерное изменение
Иногда вход не является цветным изображением.В это время может быть необходимо выполнить операции уменьшения размерности данных, то есть RGB->GRAY.Конечно, есть также изменения в цветовых каналах и цветовых каналах, таких как RGB->BGR или RGB->YUV. Цветовые каналы меняются для достижения различных задач и функций, которые определяются в каждом конкретном случае.
Другие изменения: увеличение данных
В модуль преобразований pytorch внесено множество изменений, которые можно использовать для улучшения данных, таких как переворот изображения, вращение и преобразование полярных координат, которые могут получать разные «исходные изображения» для увеличения переменных обучения для достижения хорошего эффекта обучения. . Здесь особо нечего сказать, это нужно пояснить отдельно.
Справочная статья
стать человеком.love/image-data-…
На данный момент 231 you.GitHub.IO/neural-net…
Статья взята из блога OLDPAN, добро пожаловать в гости:Блог Олдпан
Добро пожаловать, чтобы обратить внимание на общедоступную учетную запись блога Oldpan и продолжать готовить статьи о глубоком обучении: