Подготовка данных для настройки и обучение нейросети обнаружению объектов.
Давай продолжим тема обнаружения объектов .
Чтобы алгоритм различал объекты или мог обнаруживать отклонения в процессе, его необходимо обучать на наборе данных, соответствующем общей картине анализируемых видеоматериалов.
Подготовка обучающей выборки — очень трудоемкий процесс, который влияет как на скорость обучения, так и на качество алгоритма.
Давайте рассмотрим использование нескольких инструментов, которые помогут вам правильно подготовить данные.
Первым этапом подготовки является составление исходного набора данных.
Как правило, чем больше объем данных и чем выше разнообразие анализируемого объекта, тем выше качество алгоритма.
Если вы планируете анализировать видео с видеорегистраторов, то предпочтительнее составлять набор данных, используя скриншоты существующих видеоматериалов, поскольку в этом случае потребуется меньше данных и меньше времени на переобучение.
В остальных случаях набор данных составляется с учетом угла обзора, с которого был заснят объект, его размера и т. д., насколько объекты из обучающей выборки похожи на объекты из материалов, которые будут анализироваться алгоритмом.
.
Набор данных должен состоять из различных вариантов, например.
который будет отображать как один объект, так и несколько, например, человека и телефон в одном кадре.
Если набор данных был собран с помощью камеры или телефона, изображения, скорее всего, будут иметь высокое разрешение, что негативно повлияет на процесс обучения.
Основной проблемой изображений с высоким разрешением будет ошибка «Недостаточно памяти» даже при небольшом значении параметра пакет_размер.
Чтобы снизить вероятность возникновения этой ошибки, необходимо уменьшить размер изображений.
В этом нам поможет программа IrfanView. Данная программа позволяет осуществлять пакетную обработку изображений, т.е.
вам достаточно указать путь к исходным изображениям, задать параметры конвертации и запустить процесс конвертации.
В результате мы получаем «облегченные» изображения в указанной папке.
Для этого в стартовом окне программы нажмите клавишу B (русская клавиатура «I») или во вкладке «Файл» выберите «Пакетное преобразование/переименование», появится окно следующего вида:
Дальше нам понадобится:
В расширенных параметрах доступно множество различных преобразований, в этом примере мы изменим только размер исходного изображения, уменьшив размер в 10 раз (укажем 10% от исходного значения):
Итак, если исходное изображение было размером 4160 x 3120, то результирующее изображение будет иметь размер 416 x 312 пикселей.
Формирование обучающей выборки — достаточно утомительный процесс, будь то формирование скриншотов из видеоматериалов или съемка на камеру и телефон.
Чтобы значительно увеличить объем набора данных, используются различные методы увеличения.
Давайте рассмотрим некоторые из этих методов, реализованных на языке программирования Python с использованием библиотеки Pillow. Одним из самых популярных методов увеличения является «зеркальное отражение».
Для начала импортируем необходимые библиотеки:
Укажем путь к каталогу с исходными изображениями и путь к результату конвертации:from PIL import Image, ImageOps import os import numpy
path_to_origin = "images/"
output_folder = "Augmentation_result/"
img_names = os.listdir(path_to_origin)
if not os.path.exists(output_folder):
os.makedirs(output_folder)
Напишем функцию для преобразования изображения в «зеркальное изображение»:
def mirror(path_to_origin, img_name, output_folder):
im = Image.open(path_to_origin + img_name)
ImageOps.mirror(im).
save(output_folder+"mirror"+img_name, "JPEG")
Еще один популярный метод увеличения — поворот изображения.
Для полноразмерных объектов стоит учитывать, что при таком методе увеличения теряется часть изображения.
Напишем функцию для поворота изображения: def rotate(path_to_origin, img_name, output_folder):
im = Image.open(path_to_origin + img_name)
im.rotate(-30).
save(output_folder+"rotate_"+img_name, "JPEG")
Значение (-30) — это угол поворота изображения, который выбирается исходя из типа объекта.
Например поворот на 180 градусов, если на изображении телефон, то это хороший вариант увеличения, но если на изображении человек, то 180 градусов - плохой пример для этого изображения, т.к.
Вы вряд ли увидите видео людей, идущих вверх ногами.
И наконец, мы выполним 2 типа аугментации для каждого изображения: for img in img_names:
rotate(path_to_origin, img, output_folder)
mirror(path_to_origin, img, output_folder)
Пример аугментации «зеркальное отражение»:
Пример аугментации «поворот изображения»:
Существует множество различных методов увеличения (добавление шума, изменение контраста и т. д.), все в зависимости от типа обрабатываемых данных.
Таким образом, применив два метода аугментации, мы увеличили размер обучающих данных в три раза.
Формирование обучающей выборки завершено, осталось только отметить объекты на изображениях.
Для разметки воспользуемся программой МеткаИзображение , потому что на мой взгляд он достаточно прост в использовании и многофункциональен.
Эта программа способна возвращать результаты разметки в двух форматах (PascalVOC и YOLO).
Первый формат представлен в виде XML-файла, в котором указаны параметры изображения, а также координаты прямоугольников, описывающих расположение объектов на изображении:
Для каждого изображения создается такой XML-файл, в котором описаны все отмеченные объекты.
Имя файла разметки совпадает с именем изображения.
Формат YOLO представлен в виде текстового файла, в котором указан класс объекта и координаты прямоугольников, описываемых значениями x,y,w,h в нормализованном виде:
Помимо текстового файла с разметкой для формата YOLO, также генерируется файл groups.txt, содержащий названия объектов.
Порядковые номера имен объектов зависят от порядка появления изображений в разметке.
Стоит отметить, что файл groups.txt может быть перезаписан при повторном открытии приложения, поэтому необходимо следить за последовательностью ввода имен в программе, иначе возникнут несоответствия координат. Объекты отмечаются в следующей последовательности:
Выберите каталог с изображениями;
Выберите каталог, в котором будут сохранены файлы разметки;
Выберите формат разметки (PascalVOC или YOLO);
Выберите инструмент выделения объекта «Клавиша W»;
Выберите объект на изображении;
Задайте имя объекта (при повторе операции можно выбрать из списка, под кнопкой ОК);
Подтверждать;
Сохраняем «Ctrl+s» (повторяем шаги 4-8 для каждого необходимого объекта);
Перейти к следующему изображению.
По завершении количество файлов разметки должно соответствовать количеству изображений с одинаковыми именами.
Таким образом, мы рассмотрели инструменты и методы, которые позволяют изменить размер изображения, увеличить объем данных, а также пометить на изображениях объекты, которые будут обнаружены нейронной сетью.
Генерация и подготовка данных — важный и трудоемкий этап, от которого зависит успех создания алгоритма глубокого обучения.
Теги: #Машинное обучение #нейронные сети
-
Опользень
19 Oct, 24 -
Пара Настроек Боковой Панели
19 Oct, 24 -
Учебник 3 По Rabbitmq — Публикация/Подписка
19 Oct, 24