0. Введение
Целью данной статьи является описание моей квалификационной работы при получении профессии Data Scientist. Поскольку профессиональная деятельность до этого не была прямо связана с направлением ML, тема итоговой работы получилась несколько академической.
Как известно, для успешной работы системы детекции и классификации (СДК) с применением технологии компьютерного зрения необходим большой объем данных, в том числе разметка объектов на изображении. Такая предварительная подготовка трудоемка и длительна. До сих пор работа по разметке объектов для создания обучающей выборки проводится в ручном режиме, хотя уже применяется и определенная автоматизация. Один из возможных вариантов такой автоматизации и был рассмотрен в работе.
Для уменьшения затрат на создание СДК предлагается использовать два типа данных:
сгенерированные изображения с 3D-моделями распознаваемых предметов и данные для их разметки, полученные на автоматизированных средствах проектирования (САПР),
фотографии самих распознаваемых объектов.
Первый тип данных содержит полученную автоматически разметку предметов и их изображение для обучения модели детекции. Успешность применения таких данных зависит от степени детализации и правдоподобия заранее разработанных 3D-моделей объектов, возможностей САПР по настройке произвольности генерирования 3D схем (количество объектов, их размещение и ориентация в пространстве с учетом избегания коллизий пересечения) и качества рендеринга изображений (с учётом подходящего фона).
Другое принципиальное предположение заключается в применении двух разных моделей:
Модель 1 детекции, обученной на данных первого типа,
Модель 2 классификации, обучающаяся и работающая по данным второго типа после их детекции моделью 1.
Такой подход, предположительно, позволит при изменении характеристик или типов предметов (конечно, в некоторых пределах), характеристик изображений предметов использовать модель 1 без переобучения, т.е. без необходимости изменения в данных первого типа.
Таким образом, целью работы является разработка прототипа системы (см. рис.1) и исследование возможности разделения моделей и данных СДК для уменьшения затрат создания исходных данных.
Решаемые задачи в работе:
Выбор набора данных (dataset 1) со сгенерированными изображениями 3D моделей предметов и данных по их размещению.
Выбор модели детекции и адаптация её под имеющиеся данные.
Выбор набора данных (dataset 2) изображений с реальными предметами для их классификации и совпадающего форм-фактора с dataset 1.
Выбор модели классификации и адаптация её под имеющиеся данные.
Изучение возможности совместной работы моделей на общих данных.
Настройка двух моделей для работы в системе.
Тестирование работы моделей на собственном наборе данных.
1. Выбор набора данных (dataset 1) со сгенерированными изображениями 3D-моделей предметов и данных по их размещению
Критериями поиска данных являлись наличие сгенерированных вариантов изображений и информации по разметке классифицируемых предметов средствами автоматизированного проектирования, наличие их в достаточном количестве, простота и доступность предметов. Удачным совпадением удовлетворения таких требований явились всем известные кубики конструктора фирмы Lego®.
Для первой модели были выбраны данные «Synthetic Lego brick dataset for object detection».
Данные состоят из 3047 сгенерированных изображений деталей Lego разрешением 300х300 с применением 5 типов фонов. Изображения содержат в совокупности 9083 деталей 6-ти типов (см. рис.2). Первые 500 изображений представляют собой отдельные детали Lego каждого типа, визуализированные под разными углами с использованием разных фонов, цвета и вариации теней. Остальные изображения состоят из нескольких деталей. К каждому изображению имеется xml-файл с параметрами деталей на картинке. 3D изображения кубиков Lego получены автоматизировано автором dataset с ПО Mecabricks.
2. Выбор модели детекции и адаптация её под имеющиеся данные
За основу был взят вариант модели детекции на сверточной нейронной сети VGG16, рассмотренный как пример в ходе обучения профессии.
from tensorflow.keras.applications import vgg16
MG_HEIGHT = 300
IMG_WIDTH = 300
features = vgg16.VGG16(weights='imagenet',
include_top=False,
input_shape=(IMG_HEIGHT, IMG_WIDTH, 3))
# дообучаем последние 5 слоев
for layer in features.layers[:-5]:
layer.trainable = False
feature_tensor = features.layers[-1].output
# Добавляем выход детектора
output = tf.keras.layers.BatchNormalization()(feature_tensor)
output = tf.keras.layers.Conv2D(5,
kernel_size=(1, 1),
activation='linear',
kernel_regularizer='l2')(output)
model = tf.keras.models.Model(inputs=features.inputs, outputs=output)
model.summary()
Для работы модели имеется функция кодирования (encode_anchors) разметки в формате, удобном для нейронной сети. Заданные в исходных данных координаты рамки преобразуется с учетом параметров сетки якорей и наилучшими по критерию Intersection over Union (IoU). Обратная функции парсинга этого кодирования (decode_prediction) служит для получения графического представления расчетной разметки.
На входе модели – изображение, выходное значение модели параметр размерностью пять каналов: вероятность, что объект находиться в рамке, и четыре параметра геометрии рамки.
Функция потерь модели состоит из двух слагаемых – бинарной кросс энтропии для определения имеется ли объект в рамке и smooth_L1 – определяет, насколько хорошо предсказываются размеры рамки. Разработана функция метрики IoU (для определения соответствия между исходными рамками и рассчитанными применен метод косинусного расстояния по координатам).
В ходе различных экспериментов были подобраны оптимальные размеры входных изображений и сетки якорей. В итоге выборка была разделена 95% train и 5% test. В тест соответственно попали 152 изображения в совокупности с 509 деталями, метрика IoU = 0.83, включая 27 пропусков (см. рис.3). На рис.4 показан результат работы функции визуализации детекции для выборки test.
3. Выбор набора данных (dataset 2) изображений с реальными предметами для их классификации
Для модели классификации был найден набор данных «Lego Brick Sorting - Image Recognition».
Набор изображений деталей Lego создан в рамках реальной любительской сортировочной установки 20-ти типов деталей Lego, по 4580 файлов (в среднем 230в каждом типе) в двух классах. Класс Base Images (BI) – набор изображений разрешением 640х480 с одиночными детали по центру (см. рис.5). Деталь каждого типа представлена в разных цветах, положениях и ориентациях. Класс Crop Images (CI) – вырезанные изображения деталей из Base Images (см. рис 6). Изображения без постоянного разрешения, большую часть площади на них занимает деталь. Файлы разбиты на соответствующие директории, названия которых и являются набором названий для классификации.
4. Выбор модели классификации и адаптация её под имеющиеся данные
Основные сложности работы были с выбором второй модели, поскольку, напомню, она должна обучиться на данных dataset №2, а классифицировать в итоге данные после детекции моделью 1. Кроме того, сегодня есть определенные трудности с предоставлением ресурсов на Colab и возможность многочисленных экспериментов проблематична.
После некоторых попыток была выбрана модель на базе «AutoEncod + cosine».
Модель является вариантом autoencoder, но выход encoder (95600 параметров) используются для поиска минимального косинусного расстояния по выборке train. Такой подход мне показался интересным.
После проведения многих вариантов расчета итоговые данные следующие – использовались 14 типов деталей dataset №2, 3074 фото 120х120, на test 10%. Рассматривались только данные CI, т.к. выяснилось, что этот формат проще и правильнее получать из модели №1. Были написаны функции визуализации классификации для test и для внешних данных (из модели 1), а также функция расчета классификации Ypred по косинусному расстоянию.
Выборка обучения составила 2459 фото, выборка test – 615. Получена точность модели 87%. На рис.7 показан пример результата тестовой классификации. В заголовке фото указаны номер, расчетный тип детали и истинный. При их несовпадении цвет надписи красный.
5. Изучение возможности совместной работы моделей на общих данных
Для совместной работы двух моделей необходимы соответствующие рабочие данные – групповое изображение классифицируемых предметов. Для имитации таких данных в ручном режиме были созданы несколько изображений путем вставки картинок из набора CI на фото с фоном (было в комплекте Dataset №2).
После нескольких пробных вариантов были созданы 15 изображений 640х480 с 62 деталями в совокупности из всех 14 типов модели №2. Поскольку фон неоднородный, идеально вставить картинки не всегда получалось, что, возможно, может создавать помехи для моделей.
Для интеграции в Модели 1 написана функция визуализации детекции для внешних изображений с записью содержимого рамки в JPG-файл для последующего импорта Моделью 2.
Результат: (хорошая новость) детекция получилась, обнаружено 49 деталей – 79% (см. рис.8), но (плохая новость) практически все они были частично обрезаны (см. рис.9).
6. Настройка двух моделей для работы в системе
Полученные первичные результаты нуждались в доработке. После ряда не принесших желаемого результата попыток изменений параметров модели НС (вариант моделей с одним каналом цвета, вариации параметра степени отсечения областей из рассмотрения, параметра сравнения с сигмойдом функций декодера) были разработаны функции по пост-обработке сегментации:
расчет наличия отклонения цвета по всем канал между соседними точками от заданного,
анализ наличия отклонений по цвету на границе области детекции и нахождение величины смещения границы до однородной зоны (нет детали) по четырем сторонам области сегмента детекции,
дополнительные увеличения границы (разные эксперименты – одинаковое увеличение по периметру, дополнительное увеличение в сторону, где и если будет смещена граница).
Применение таких функций, в ситуации с дефицитом расчетных ресурсов для доводки параметров НС, позволило существенно сократить время по достижению результата. На рис.10 показаны результаты детекции после пост-обработки.
Полученные обработанные, не обрезанные изображения деталей были переданы во второю модель для классификации (проведено несколько итераций наладки). Итоговые результаты работы моделей:
Модель 1: детектировано деталей – 48 шт. (77%),
Модель 2: правильно распознанных – 32 шт. (67%) (см. рис.11).
7. Тестирование работы моделей на собственном наборе данных
Большой интерес представляет возможность использования прототипа системы «в быту», на наборе данных, сделанных в домашних условиях. Для этого была исследована работа модели на самостоятельно сделанном наборе фотографий деталей Lego.
Были сфотографированы 10 типов деталей под разными углами, всего 137 фото (см рис.12). Для тестирования совместной работы моделей сфотографированы 21 групповые фотографии.
Результат 1:
Модель 2: обучение 110 деталей, Test 20%–27 деталей, точность 84%
Модель 1: 21 фото, 48 деталей, обнаружено 33 (69%) (см. рис.13),
Модель 2: классифицировано 11 (33%).
Для увеличения точности модели проведено расширение данных методом аугментации – в dataset добавлены те же фото с поворотом на 90R и 90L для обучения и классификации.
Результат 2:
Модель 2: обучение 328 деталей, Test 20%–82 деталей, точность 91%
Модель 1: 63 фото, 144 деталей, обнаружено 107 (74%),
Модель 2: классифицировано 88 (82%) (См. рис.14).
8. Заключение
В целом удалось реализовать поставленные задачи – организовать работу двух моделей – детекции и классификации, обученных на разных наборах данных – на синтезированных снимках 3D-моделей деталей с информацией для их сегментации и dataset с реальными изображениями классифицируемых деталей. Принципиальным моментов является большое различие наборов данных между собой – по типу деталей, цвету, количеству, фону и разрешению изображений. В результате удалось получить приемлемые результаты классификации разных данных без переобучения и изменений в модели детекции.
Конечно, полученный, по сути учебный, прототип СДК можно далее развивать по многим направлениям, например:
увеличение количества и качества рабочих данных для тестирования системы, в идеале автоматизировать их создание на базе dataset №2 с информацией о типах деталей на изображениях,
настроить НС модели 1 для повышения качества детекции без внешних дополнительных функций обработки сегментации,
заменить модель 2 на более мощные конфигурации НС для классификации.
Тем не менее надеюсь, что материал будет полезен, особенно для изучающих вопросы применения компьютерного зрения и ML вообще и как пример выбора темы для обучения. Желающим разобраться в моделях оставляю ссылку https://github.com/Aizatulin/Detection-and-classification.