Назад в библиотеку

ПРИМЕНЕНИЕ СВЕРТОЧНЫХ НЕЙРОННЫХ СЕТЕЙ ДЛЯ ОБНАРУЖЕНИЯ ПЛОДОВ РОБОТАМИ ДЛЯ СБОРА УРОЖАЯ

Автор: С.В. Кравченко, А.В. Алексеев, Ю.А. Орлова, И.Л. Гринин, Д.С. Матюшечкин
Источник: Волгоградский Государственный Технический Университет (ВолгГТУ)

Аннотация

В статье рассматривается последовательность шагов по сбору данных для последующего обучения свёрточной нейронной сети, используемой для решения задачи детектирования грызуна (крысы или мыши) в лабиринте для лабораторных исследований. В статье приводится описание разработанной утилиты для кадрирования видеозаписей, реализованной с помощью библиотеки OpenCV; приводится описание разработанной утилиты для разметки изображений, реализованной с помощью библиотеки OpenCV; отражен практический опыт применения свободно распространяемой утилиты LabelIMG для разметки изображений с последующим сохранением в форматы PASCAL VOC или YOLO; приводится описание разработанной утилиты для выполнения аугментации изображений, реализуемой с помощью библиотеки albumentations; а также приводится перечень преобразований, выполняемых в процессе аугментации изображений и необходимых для наиболее точного детектирования грызуна (крысы или мыши) в лабиринте для лабораторных исследований.

Ключевые слова:

свёрточная нейронная сеть, детектирование объекта, аугментация изображений, детектирование грызуна, лабиринт, лабораторные животные

Введение

Детектирование объекта (object detection) на изображении является одной из основных задач глубокого обучения в области компьютерного зрения, которая решается с помощью свёрточных нейронных сетей (Convolutional Neural Network). Как правило, для достижения хороших результатов глубокие сети должны обучаться на очень большом объёме данных.

Существует несколько возможных способов сбора данных для последующего обучения: создание обучающих примеров из естественных изображений и создание обучающих примеров из искусственных изображений.

Примеры для обучения из естественных изображений создаются на основе реальных данных. Применительно к решению текущей задачи детектирования грызуна (крысы или мыши) в лабиринте для лабораторных исследований их создание включает в себя следующие этапы:

  • сбор графических данных (запись эксперимента, проводимого над грызуном, на камеру);
  • фильтрация (проверка изображений на ряд требований: достаточный уровень освещённости объектов на них, наличие необходимого объекта и т.д.);
  • подготовка инструментария для разметки (написание собственного или использование готового);
  • разметка (выделение прямоугольником объекта детектирования на изображении и присвоение метки объекту – класса).

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

Другой подход к созданию обучающих данных – их искусственная генерация. Из тех изображений, которые были получены после разметки, генерируются дополнительные обучающие данные с различными искажениями по цвету, яркости, с применением различных геометрических преобразований (повороты, отражения и т.д.), с применением различных бликов, шумов, размытий и т.д. Эта техника носит название – аугментация данных.

В данной статье приводится практический опыт по применению перечисленных выше шагов по сбору данных к решению задачи детектирования грызуна (крысы или мыши) в лабиринте для лабораторных исследований.

Исследование ведётся совместно с Лабораторией фармакоэкономики, цифровой медицины и искусственного интеллекта и Лабораторией нейропсихотропных средств Научного центра инновационных лекарственных средств с опытнопромышленным производством (НЦИЛС) ВолгГМУ в г. Волгоград.

Кадрирование видеозаписей. Описание разработанной утилиты

Сотрудниками Лабораторий НЦИЛС ВолгГМУ были предоставлены видеозаписи, содержащие проведение экспериментов над грызуном (крысой или мышью) в различных лабиринтах, таких как установка «Открытое поле» (круглая и квадратная), установка «Тест предпочтения места», установка «Приподнятый крестообразный лабиринт», установка «Водный лабиринт Морриса». Эти лабиринты необходимы для проведения экспериментальных исследований по изучению поведения грызунов (крыс и мышей) и факторов, влияющих на него. Количество предоставленных сотрудниками НЦИЛС видеофайлов составляло порядка 1200 с различной продолжительностью (от минуты и более).

Т.к. полученные видеофайлы обладали огромным числом кадров, которое невозможно разметить в адекватные сроки, было решено минимизировать количество кадров для ручной разметки, выбрав, в зависимости от битрейта видеозаписи каждый N-ый кадр для разметки. Так, например, для видеозаписи, имеющей в своём составе 4000 кадров (рисунок 1), при выборке каждого 30 кадра, было необходимо разметить вручную 133 кадра.

Для выборки N-ых кадров для видеозаписи была разработана утилита на языке программирования Python 3.6.8 с применением библиотеки компьютерного зрения OpenCV. Разработанная утилита является консольной программой. Это программа, которая не имеет графического интерфейса – окон, и которая работает в текстовом режиме в черно-белой консоли. Команды в такой программе вводятся с клавиатуры, результаты работы выводятся на экран в текстовом режиме.

Кадр видеозаписи с грызуном (крысой) в лабиринте «Открытое поле

Рисунок 1 – Кадр видеозаписи с грызуном (крысой) в лабиринте «Открытое поле»

На вход программы подаётся видеозапись и параметр N, обозначающий номер кадра, который нужно сохранить, а не пропустить. На выходе мы получаем выборку N-ых кадров видеозаписи, сохраненных в одноименной папке.

Разработанная консольная утилита была применена для всех видеофайлов, полученных от сотрудников Лабораторий НЦИЛС.

Разметка данных. Описание разработанной утилиты Следующим этапом после кадрирования видеозаписей является разметка изображений – выделение объекта прямоугольником на изображении и отметка, что это за объект.

Первоначально для разметки данных была разработана специальная утилита. Разработанная на языке программирования Python 3.6.8 с использованием библиотеки компьютерного зрения OpenCV утилита принимала на вход следующие параметры командной строки:

  • путь до видеофайла. Например, «video/video#1.mp4»;
  • целое число N, обозначающее, что необходимо использовать каждый N-ый кадр. Например, N = 5, это значит, что обрабатывать нужно каждый 5-ый кадр, а 4-ый пропускать. По умолчанию N = 10.

Пример команды для вызова разработанной консольной утилиты: python mark.py «video/video#1.mp4» 10.

На выходе создаётся папка с именем как у видеофайла, но с удалением его расширения («video#1»). Папка включает два элемента: это папка с размеченными кадрами в виде картинок в формате «jpg» и CSV файл с информацией о размеченных изображениях.

Ниже представлена структура выходного CSV-файла (разделитель – запятая) с разметкой:

image_id,x,y,w,h,x+w,y+h, где:

  • image_id – имя изображения, включая внешнюю папку («images/image1.jpg»);
  • x – левая X координата прямоугольника, начало координат в левом верхнем углу изображения (по-умолчанию в OpenCV);
  • y – верхняя Y координата прямоугольника;
  • w – ширина прямоугольника;
  • h – высота прямоугольника;
  • x+w – правая X координата прямоугольника;
  • y+h – нижняя Y координата прямоугольника.
Разметка кадра с помощью разработанной утилиты

Рисунок 2 – Разметка кадра с помощью разработанной утилиты

Разработанная утилита позволяла:

  • отрисовать прямоугольник. Нажатие левой кнопкой мыши создает точку (одну из вершин будущего прямоугольника), не отпуская левую кнопку мыши ведём в противоположный угол, когда левая кнопка мыши отпускается – прямоугольник создан. Во время движения с нажатой левой кнопкой мыши прямоугольник динамично перерисовывается;
  • перетащить прямоугольник. Если прямоугольник существует и клик происходит внутри него, то при зажатой кнопке мыши он перетаскивается;
  • отменить прямоугольник – при нажатии кнопки «ESC» прямоугольник отменяется;
  • перейти к следующему кадру – при нажатии кнопки «пробел», на всех, кроме первого кадра, отрисовывается прямоугольник с предыдущего кадра. Это необходимо для того, чтобы его можно было немного подвинуть согласно пункту 2 на новое место размечаемого объекта, т.к. его размер скорее всего не изменится.

Но размечать с помощью консольной утилиты с минимальным графическим интерфейсом было сложно (рисунок 2), был необходим удобный и практичный графический интерфейс, поэтому было принято использовать существующее решение для разметки изображений, а именно утилиту LabelIMG.

Разметка данных. Применение утилиты LabelIMG

Данная программа возвращает результат разметки в двух форматах: PascalVOC и YOLO.

Первый формат представляет собой XML-файл, в котором определяются параметры изображения, а также координаты прямоугольника, который описывает местоположение объекта на изображении (рисунок 3).

Такой XML-файл формируется для каждого изображения. Имя файла разметки совпадает с именем изображения.

Формат YOLO представляется в виде текстового файла (рисунок 4), в котором определяется класс объекта и координаты прямоугольников, описанные значениями x,y,w,h в нормализованном виде.

Помимо текстового файла с разметкой для формата YOLO, также формируется файл classes.txt, в котором указаны имена объектов.

Разметка объектов в LabelIMG происходит в следующей последовательности (рисунок 5) [5]:

  • выбрать директорию с изображениями;
  • выбрать директорию, в которую будут сохраняться файлы разметки;
  • выбрать формат разметки (PascalVOC или YOLO);
  • выбрать инструмент выделения объекта прямоугольником;
  • выделить объект на изображении прямоугольником;
  • задать имя объекта (при повторной операции можно выбрать из списка, под кнопкой ОК) и подтвердить;
  • сохранить файл/файлы разметки в заданном формате;
  • перейти на следующее изображение.
Разметка кадра с помощью утилиты LabelIMG

Рисунок 3 – Разметка кадра с помощью утилиты LabelIMG

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

Аугментация данных. Описание разработанной утилиты

Аугментация данных позволяет увеличить в разы объём набора данных и точность обученной модели нейронной сети. Для этого была разработана консольная программа на языке программирования Python 3.6.8, на вход которой подается набор изображений, размеченных ранее. В качестве основной библиотеки для выполнения аугментации данных используется библиотека albumentations [6]. Применение преобразований к каждому изображению происходит в случайном порядке и количестве. К набору изображений были применены следующие преобразования (рисунок 6):

  • RandomSizedBBoxSafeCrop – обрезание случайным образом изображения и изменение его размера к некоторому размеру без потери ограничивающих прямоугольников (bboxes). Т.к. видеозаписи имели высокое разрешение (1920x1080), их в первую очередь было необходимо привести к меньшему размеру, например, 640x640;
  • VerticalFlip – отражение изображения по вертикали;
  • HorizontalFlip – отражение изображения по горизонтали;
  • Flip – отражение изображения по горизонтали, по вертикали или и по горизонтали, и по вертикали. Здесь был интересен последний вариант;
  • Transpose – транспонирование входного изображения, меняя местами строки и столбцы;
  • RandomRotate90 – случайное поворачивание изображения на 90 градусов ноль или более раз;
  • Rotate – поворачивание изображения случайным образом из равномерного распределения.

Также впоследствии можно будет применить различные цветовые искажения и эффекты:

  • RandomGamma – изменение гаммы изображения случайным образом;
  • GaussNoise – применение гауссовского шума к изображению;
  • ISONoise – применение цифрового шума к изображению;
  • MultiplicativeNoise – умножение изображения на случайное число или массив чисел;
  • Blur – размытие изображения с использованием ядра (kernel) случайного размера;
  • ToGray – преобразование входного RGB-изображения в изображение в оттенках серого цвета;
  • HueSaturationValue – произвольное изменение тона (Hue), насыщенности (Saturation), значения (Value) изображения;
  • RGBShift – произвольный сдвиг значений для каждого канала RGB-изображения;
  • RandomBrightness – произвольное изменение яркости изображения;
  • RandomContrast – произвольное изменение контрастности изображения;
  • RandomBrightnessContrast – произвольное изменение яркости и контрастности изображения.
Аугментация изображений

Рисунок 4 – Аугментация изображений

Заключение

В ходе сбора данных для решения задачи детектирования грызуна (крысы или мыши) в лабиринте для лабораторных исследований был разработан ряд вспомогательных инструментов. Собранные данные теперь можно использовать для обучения модели свёрточной нейронной сети, которая будет определять местоположение грызуна (крысы или мыши) на кадрах видеозаписей, представленных сотрудниками Лабораторий НЦИЛС.

Литература

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.