Автор: С.В. Кравченко, А.В. Алексеев, Ю.А. Орлова, И.Л. Гринин, Д.С. Матюшечкин
Источник: Волгоградский Государственный Технический Университет (ВолгГТУ)
В статье рассматривается последовательность шагов по сбору данных для последующего обучения свёрточной нейронной сети, используемой для решения задачи детектирования грызуна (крысы или мыши) в лабиринте для лабораторных исследований. В статье приводится описание разработанной утилиты для кадрирования видеозаписей, реализованной с помощью библиотеки OpenCV; приводится описание разработанной утилиты для разметки изображений, реализованной с помощью библиотеки OpenCV; отражен практический опыт применения свободно распространяемой утилиты LabelIMG для разметки изображений с последующим сохранением в форматы PASCAL VOC или YOLO; приводится описание разработанной утилиты для выполнения аугментации изображений, реализуемой с помощью библиотеки albumentations; а также приводится перечень преобразований, выполняемых в процессе аугментации изображений и необходимых для наиболее точного детектирования грызуна (крысы или мыши) в лабиринте для лабораторных исследований.
свёрточная нейронная сеть, детектирование объекта, аугментация изображений, детектирование грызуна, лабиринт, лабораторные животные
Детектирование объекта (object detection) на изображении является одной из основных задач глубокого обучения в области компьютерного зрения, которая решается с помощью свёрточных нейронных сетей (Convolutional Neural Network). Как правило, для достижения хороших результатов глубокие сети должны обучаться на очень большом объёме данных.
Существует несколько возможных способов сбора данных для последующего обучения: создание обучающих примеров из естественных изображений и создание обучающих примеров из искусственных изображений.
Примеры для обучения из естественных изображений создаются на основе реальных данных. Применительно к решению текущей задачи детектирования грызуна (крысы или мыши) в лабиринте для лабораторных исследований их создание включает в себя следующие этапы:
Эти операции требуют значительных затрат рабочего времени, но, с другой стороны, по результатам обучения нейронной сети на таких данных можно судить об её эффективности в реальных условиях.
Другой подход к созданию обучающих данных – их искусственная генерация. Из тех изображений, которые были получены после разметки, генерируются дополнительные обучающие данные с различными искажениями по цвету, яркости, с применением различных геометрических преобразований (повороты, отражения и т.д.), с применением различных бликов, шумов, размытий и т.д. Эта техника носит название – аугментация данных.
В данной статье приводится практический опыт по применению перечисленных выше шагов по сбору данных к решению задачи детектирования грызуна (крысы или мыши) в лабиринте для лабораторных исследований.
Исследование ведётся совместно с Лабораторией фармакоэкономики, цифровой медицины и искусственного интеллекта и Лабораторией нейропсихотропных средств Научного центра инновационных лекарственных средств с опытнопромышленным производством (НЦИЛС) ВолгГМУ в г. Волгоград.
Кадрирование видеозаписей. Описание разработанной утилиты
Сотрудниками Лабораторий НЦИЛС ВолгГМУ были предоставлены видеозаписи, содержащие проведение экспериментов над грызуном (крысой или мышью) в различных лабиринтах, таких как установка «Открытое поле» (круглая и квадратная), установка «Тест предпочтения места», установка «Приподнятый крестообразный лабиринт», установка «Водный лабиринт Морриса». Эти лабиринты необходимы для проведения экспериментальных исследований по изучению поведения грызунов (крыс и мышей) и факторов, влияющих на него. Количество предоставленных сотрудниками НЦИЛС видеофайлов составляло порядка 1200 с различной продолжительностью (от минуты и более).
Т.к. полученные видеофайлы обладали огромным числом кадров, которое невозможно разметить в адекватные сроки, было решено минимизировать количество кадров для ручной разметки, выбрав, в зависимости от битрейта видеозаписи каждый N-ый кадр для разметки. Так, например, для видеозаписи, имеющей в своём составе 4000 кадров (рисунок 1), при выборке каждого 30 кадра, было необходимо разметить вручную 133 кадра.
Для выборки N-ых кадров для видеозаписи была разработана утилита на языке программирования Python 3.6.8 с применением библиотеки компьютерного зрения OpenCV. Разработанная утилита является консольной программой. Это программа, которая не имеет графического интерфейса – окон, и которая работает в текстовом режиме в черно-белой консоли. Команды в такой программе вводятся с клавиатуры, результаты работы выводятся на экран в текстовом режиме.
На вход программы подаётся видеозапись и параметр N, обозначающий номер кадра, который нужно сохранить, а не пропустить. На выходе мы получаем выборку N-ых кадров видеозаписи, сохраненных в одноименной папке.
Разработанная консольная утилита была применена для всех видеофайлов, полученных от сотрудников Лабораторий НЦИЛС.
Разметка данных. Описание разработанной утилиты Следующим этапом после кадрирования видеозаписей является разметка изображений – выделение объекта прямоугольником на изображении и отметка, что это за объект.
Первоначально для разметки данных была разработана специальная утилита. Разработанная на языке программирования Python 3.6.8 с использованием библиотеки компьютерного зрения OpenCV утилита принимала на вход следующие параметры командной строки:
Пример команды для вызова разработанной консольной утилиты: python mark.py «video/video#1.mp4» 10.
На выходе создаётся папка с именем как у видеофайла, но с удалением его расширения («video#1»). Папка включает два элемента: это папка с размеченными кадрами в виде картинок в формате «jpg» и CSV файл с информацией о размеченных изображениях.
Ниже представлена структура выходного CSV-файла (разделитель – запятая) с разметкой:
image_id,x,y,w,h,x+w,y+h, где:
Разработанная утилита позволяла:
Но размечать с помощью консольной утилиты с минимальным графическим интерфейсом было сложно (рисунок 2), был необходим удобный и практичный графический интерфейс, поэтому было принято использовать существующее решение для разметки изображений, а именно утилиту LabelIMG.
Разметка данных. Применение утилиты LabelIMG
Данная программа возвращает результат разметки в двух форматах: PascalVOC и YOLO.
Первый формат представляет собой XML-файл, в котором определяются параметры изображения, а также координаты прямоугольника, который описывает местоположение объекта на изображении (рисунок 3).
Такой XML-файл формируется для каждого изображения. Имя файла разметки совпадает с именем изображения.
Формат YOLO представляется в виде текстового файла (рисунок 4), в котором определяется класс объекта и координаты прямоугольников, описанные значениями x,y,w,h в нормализованном виде.
Помимо текстового файла с разметкой для формата YOLO, также формируется файл classes.txt, в котором указаны имена объектов.
Разметка объектов в LabelIMG происходит в следующей последовательности (рисунок 5) [5]:
По завершении, количество файлов разметки должно соответствовать количеству изображений, с идентичными именами.
Аугментация данных позволяет увеличить в разы объём набора данных и точность обученной модели нейронной сети. Для этого была разработана консольная программа на языке программирования Python 3.6.8, на вход которой подается набор изображений, размеченных ранее. В качестве основной библиотеки для выполнения аугментации данных используется библиотека albumentations [6]. Применение преобразований к каждому изображению происходит в случайном порядке и количестве. К набору изображений были применены следующие преобразования (рисунок 6):
Также впоследствии можно будет применить различные цветовые искажения и эффекты:
В ходе сбора данных для решения задачи детектирования грызуна (крысы или мыши) в лабиринте для лабораторных исследований был разработан ряд вспомогательных инструментов. Собранные данные теперь можно использовать для обучения модели свёрточной нейронной сети, которая будет определять местоположение грызуна (крысы или мыши) на кадрах видеозаписей, представленных сотрудниками Лабораторий НЦИЛС.
1. Аугментация (augmentation, “раздутие”) данных для обучения нейронной сети на примере печатных символов [Электронный ресурс] // Хабр — Режим доступа :
https://habr.com/ru/company/smartengines/blog/264677/ (дата обращ. 04.06.2020).
2. Подготовка данных для переобучения нейросети для детекции объектов [Электронный ресурс] // NewTechAudit — Режим доступа: https://newtechaudit.ru/podgotovka-dannyh-detekczia-obektov/ (дата обращ. 04.06.2020).
3. LabelImg is a graphical image annotation tool and label object bounding boxes in images [Электронный ресурс] // GitHub — Режим доступа: https://github.com/tzutalin/labelImg (дата обращ. 04.06.2020).
4. M. Everingham, L. Van Gool, C. K. Williams, J. Winn, and A. Zisserman. The Pascal Visual Object Classes (VOC) Challenge. IJCV, pages 303–338, 2010.
5. T.-Y. Lin, M. Maire, S. Belongie, J. Hays, P. Perona, D. Ramanan,P. Dollar, and C. L. Zitnick. Microsoft COCO: Common objects incontext. InECCV. 2014.
6. A. Buslaev, A. Parinov, E. Khvedchenya, V. I. Iglovikov, and A. A.Kalinin, “Albumentations: fast and flexible image augmentations,”arXiv preprint arXiv:1809.06839, 2018.