Numpy и Pillow для генерации изображений
Необходимо сгенерировать изображения, не затрачивая при этом много времени? Предлагаю обратить внимание на две библиотеки, которые помогут это сделать - Pillow и Numpy.
Компьютерное зрение большая область машинного обучения. Если вы решили попробовать свои силы в детектирование объектов, то сегодня я покажу, как, не прибегая к обучению GAN-моделей для генерации изображений быстро подготовить генератор используя библиотеки Numpy и Pillow.
В результате, Вам не нужно будет тратить время на сбор и разметку изображений, иначе вся мотивация может закончится на сборе данныхJ.
Спойлер: в конце поста покажу как его использовать при обучении моделей для детекции объектов.
Суть алгоритма:
*Объект меняет свое местоположение на изображении, размер и угол от 0 до 360.
Перед началом работы я подготовил две папки:
1 – для фоновых изображений.
2 – для объектов.
Импортирую необходимые библиотеки:
Перейду к более детальному рассмотрению.
Вспомогательная функция для случайного распределения выбора класса объекта:
Еще одна вспомогательная функция для добавления шума на объекты.
Основная функция.
Создам массив из 0. X-основа для изображения, Y-основа для объекта.
Аргументы функции:
batch_size – сколько изображений будет сгенерировано за один вызов функции,
size_img – размер изображений.
Обрабатываю объект, случайным образом определяя его. Размер объекта тоже выбирается случайно относительно размеров изображения, чтобы не получился слишком маленький объект, либо наоборот большой. Если у вас только один класс объектов, то необходимо использовать код ниже для обработки изображений.
Если Вы разделили объекты по классам, то следует их разделить по папкам, которые будут означать отдельный класс, и использовать для обработки код ниже. Количество условий должно равняться количеству классов.
Также не забудьте исправить функцию flip_coin.
Создам пустое изображение, которое нам пригодится для конкатенации изображения и объекта:
Обработаю фон:
На данный момент у меня подготовлен объект и фон.
Перейду к финальной части. В ней будет подготовлен финальный вид изображения, а также аннотация.
Аннотация: первые 3 числа координаты объекта, остальные - кодировка класса.
Изображения, которые мы загрузили.
Объекты, которые мы загрузили.
Изображения, которые получили. Объект на изображении поворачивается от 0 до 360, зеркально отражается, обрезает углы, меняет свой размер, местоположение и яркость, а также добавляет шум. У второго объекта был фон, но на итоговом изображении его не будет. В этом вы можете убедиться, посмотрев ниже.
Как и обещал - добавлю код, который Вы можете использовать для обучения моделей.
На выходе я получил изображение и аннотацию к нему. С данным кодом Вам не придется искать изображения и заниматься разметкой - достаточно найти пару изображений, и можно тестировать свою модель.