www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Увеличение изображения для глубокого обучения с использованием Keras и выравнивания гистограммы

Дата публикации Jul 11, 2017

В этом посте мы рассмотрим:

  • Увеличение изображения: что это? Почему это важно?
  • Керас: Как использовать его для базового увеличения изображений.
  • Выравнивание гистограммы: что это? Чем это полезно?
  • Реализация методов выравнивания гистограммы: один из способов изменить файл keras.preprocessing image.py.

Увеличение изображения: что это? Почему это важно?

Глубокие Нейронные Сети, в частностиСверточные нейронные сети (CNN), особенно опытны в задачах классификации изображений. Ультрасовременные CNN, как было показано, даже превосходят возможности человека в распознавании изображений.

https://www.eff.org/ai/metrics

Однако, как мы узнали из приложения «Hot Dog, Not Hot Dog» г-на Цзянь-Яна в популярном телешоу,Силиконовая долина,(приложение теперь доступно в магазине приложений)сбор изображений в качестве обучающих данных может быть дорогостоящим и занимать много времени.

Если вы не знакомы с сериалом «Силиконовая долина», имейте в виду, что в следующем ролике используется язык NSFW:

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

https://github.com/aleju/imgaug

Использование Keras для базового увеличения изображения

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

Загрузка и форматирование данных

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

Изображения cifar10 имеют размер всего 32 x 32 пикселя, поэтому при увеличении они выглядят зернистыми, но CNN не знает, что оно зернистое, все, что он видит, - это ДАННЫЕ.

Создайте генератор изображений из ImageDataGenerator ()

Пополнить данные нашего изображения с помощью keras очень просто. Привет Джейсону Браунли, который обеспечиваетотличный учебникна этом. Сначала нам нужно создать генератор изображений, вызвавImageDataGenerator()функция и передать ему список параметров, описывающих изменения, которые мы хотим, чтобы он выполнял на изображениях. Затем мы позвонимfit()Функция на нашем генераторе изображений, которая будет применять изменения к изображениям партиями. По умолчанию изменения будут применяться случайным образом, поэтому не каждое изображение будет меняться каждый раз. Вы также можете использоватьkeras.preprocessingэкспортировать файлы дополненных изображений в папку, чтобы создать гигантский набор измененных изображений, если вы захотите это сделать.

Мы рассмотрим некоторые из наиболее визуально интересных дополнений здесь. Описание всего возможногоImageDataGenerator()параметры, а также список других методов, доступных вkeras.preprocessingможно увидеть вКерас Документация.

Случайно вращать изображения

Отразить изображения по вертикали

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

Сдвиг изображения по вертикали или горизонтали на 20%

Методы выравнивания гистограммы

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

https://www.bruzed.com/2009/10/contrast-stretching-and-histogram-equalization/
http://www-classes.usc.edu/engr/ee-s/569/qa2/Histogram%20Equalization.htm
https: //studentathome.wordpress ком / 2013/03/27 / локальные гистограммы уравнивание /

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

Выравнивание гистограммы

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

Растяжение контраста

Растяжение контраста использует подход анализа распределения плотности пикселей в изображении, а затем«Изменяет масштаб изображения, чтобы включить все интенсивности, которые попадают во 2-й и 98-й процентили».

Адаптивное выравнивание

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

Следующий код взят избиблиотека изображений Sci-KitДокументы и был изменен для выполнения трех вышеупомянутых дополнений на первом изображении нашего набора данных cifar10. Сначала мы импортируем необходимые модули из библиотеки изображений sci-kit (skimage), а затем модифицируем код издокументация по sci-kitчтобы просмотреть дополнения к первому изображению нашего набора данных.

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

Модификация keras.preprocessing для включения методов выравнивания гистограммы.

Теперь, когда мы успешно изменили одно изображение из набора данных cifar10, мы продемонстрируем, как изменить файл keras.preprocessing image.py для выполнения этих различных методов модификации гистограммы так же, как мы делали готовые дополнения keras с помощьюImageDataGenerator(), Вот общие шаги, которые мы будем выполнять для реализации этой функциональности:

обзор

  • Найдите файл keras.preprocessing image.py на своем компьютере.
  • Скопируйте файл image.py в свой файл или записную книжку.
  • Добавьте один атрибут для каждого метода выравнивания в функцию инициализации DataImageGenerator ().
  • Добавьте предложения оператора IF в метод random_transform, чтобы при вызове реализовывались дополненияdatagen.fit(),

Один из самых простых способов внести изменения в keras.preprocessing'simage.pyФайл просто скопировать и вставить его содержимое в наш код. Это тогда устранит необходимость импортировать его. Вы можете просмотреть содержимоеimage.pyфайл на githubВот.Однако, чтобы быть уверенным, что вы захватываете ту же версию файла, которую импортировали ранее, лучше взятьimage.pyфайл, который уже находится на вашем компьютере. Бегprint(keras.__file__)распечатает путь к библиотеке keras, которая находится на вашем компьютере. Путь (для пользователей Mac) может выглядеть примерно так:

/usr/local/lib/python3.5/dist-packages/keras/__init__.pyc

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

Редактированиеimage.py

В верхней части image.py вы можете закомментировать строку:from ..import backend as Kесли вы уже включили его выше.

На этом этапе также проверьте еще раз, чтобы убедиться, что вы импортируете необходимые модули scikit-image, чтобы скопированныеimage.pyмогу их увидеть.

from skimage import data, img_as_float
from skimage import exposure

Теперь нам нужно добавить шесть строк в класс ImageDataGenerator__init__ метод, чтобы он имел три свойства, которые представляют типы дополнения, которые мы собираемся добавить. Код ниже скопирован из моего текущего image.py. Линии с#####сбоку есть строки, которые я добавил.

random_transform()Функция (ниже) отвечает на аргументы, которые мы передали вImageDataGenerator()функция. Если мы установилиcontrast_stretching,adaptive_equalization, илиhistogram_equalizationпараметры дляTrueкогда мы звонимImageDataGenerator()(так же, как и для других изображений)random_transform()Затем примените желаемое увеличение изображения.

Теперь у нас есть весь необходимый код и мы можем вызвать ImageDataGenerator () для выполнения наших методов модификации гистограммы. Вот как будут выглядеть несколько изображений, если мы установим все три значения вTrue,

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

Обучите и проверьте свой Keras CNN

Последний шаг - обучить нашу CNN и проверить модель, используяmodel.fit_generator()чтобы обучать и проверять нашу нейронную сеть на дополненных изображениях.

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map