diff --git a/docs/software/dataset-generator.md b/docs/software/dataset-generator.md index 0965927..1b83091 100644 --- a/docs/software/dataset-generator.md +++ b/docs/software/dataset-generator.md @@ -4,11 +4,9 @@ title: Генерация датасетов Одной из подзадач управления робототехнической системой является задача обнаружения и классификации объектов в сцене, реализуемая с помощью камеры (машинного зрения). Одним из методов решения данной задачи является использование нейросетевой модели, полученной в ходе обучения на предварительно подготовленных наборах данных. Разработанный модуль генерации наборов данных (датасетов) позволяет автоматизировать процесс их подготовки. Полигональные модели экспортируются из CAD-системы - в результате получается mesh-файл формата `obj`. В ходе генерации формируется сцена для симуляции окружения робота (файл сцены в формате blend). В модуле используется пакет создания синтетических изображений BlenderProc, с помощью которого подготавливается набора данных для обучения нейросети. -## Обнаружению объектов в формате COCO +## Обнаружение объектов (Object Detection) -В качестве выходного форма# Модуль восприятия окружения роботом rbs_perception - -## Навык обнаружения объектов (Object Detection). Описание API. +### Описание API навыка Вначале попытаемся описать полную последовательность действий по подготовке и использованию навыка обнаружения объектов. Задача обнаружения объектов сенсорами робота (в частности, RGB камерой в нашем случае) ставится в случае, например, когда необходимо в заданном окружении (сцене) определить наличие или отсутствие необходимых деталей для сборки изделия. Такие детали представлены в информационной среде в виде ассетов, хранимых в базе данных с заданными характеристиками. Поэтому входным параметром навыка обнаружения объектов является список ассетов, экземпляры которых в текущей задаче необходимо обнаруживать. Результатом использования навыка в информационной системе будет являться получение данных о заданном ассете на конкретном изображении, полученном с помощью RGB камеры. @@ -24,7 +22,7 @@ title: Генерация датасетов Теперь перейдём к полному описанию данного API. -### Создание датасета +### Генерация датасета в формате COCO Для создания датасета используется модуль на Python для BlenderProc. Внешними параметрами для модуля являются: - файл, описывающий параметры рандомизиции, а также объекты сцены с подготовленными мешами (файл *.json) @@ -88,7 +86,71 @@ blenderproc run renderBOPdataset2.py --form description.json --path /home/user/p В результате работы модуля в папке '/home/user/path/to/dataset' будет создана файловая структура с датасетом. -### Обучение модели Yolov8. +### Генерация датасета в формате BOP Challenge + +Внешними параметрами для модуля являются: +1. Файл, описывающий параметры рандомизиции, а также объекты сцены с подготовленными мешами (файл *.json) +2. Выходной каталог. + +Формируется сцена для случайного размещения в ней объектов из описания. Затем производится рендеринг полученной сцены с рандомизацией параметров освещения, текстур и размещением камеры. Имена объектов должны совпадать с именами ассетов в нашей базе данных. + +Пример запуска модуля генерации датасета: +```bash +blenderproc run renderBOPdataset2.py --form description.json --path /home/user/path/to/dataset +``` + +Пример файла description.json: +```json +{"output":{ + "datasetObjects":{ + "details":[ + {"name":"star", + "inertia":{ + "ixx":0.1,"ixy":0,"ixz":0,"iyy":0.1,"iyz":0,"izz":0.1 + }, + "mass":"0", + "visual":"/assets/libs/objects/star.dae", + "collision":"/assets/libs/objects/star.stl", + "type":"env", + "material_path":"", + "part_path":"/libs/objects/star.stl", + "fbx":"/home/webservice/server/build/public/4c4f3909-74b0-4206-aec1-fc4acd3a1081/assets/libs/objects/star.fbx", + "solidType":"active", + "isSelect":true + } + ] + }, + "typedataset":"ObjectDetection", + "models_randomization":{ + "loc_range_low":[-1,-1,0],"loc_range_high":[1,1,2] + }, + "scene":{ + "objects":[ + {"name":"floor","collision_shape":"BOX","loc_xyz":[0,0,0],"rot_euler":[0,0,0],"material_randomization":{"specular":[0,1],"roughness":[0,1],"metallic":[0,1],"base_color":[[0,0,0,1],[1,1,1,1]}}}, + {"name":"star","collision_shape":"BOX","loc_xyz":[0,0,0.2],"rot_euler":[0,0,0],"material_randomization":{"specular":[0,1],"roughness":[0,1],"metallic":[0,1],"base_color":[[0,0,0,1],[1,1,1,1]}} + ], + "lights":[ + {"id":1,"type":"SUN","loc_xyz":[5,5,5],"rot_euler":[-0.06,0.61,-0.19],"color_range_low":[0.5,0.5,0.5],"color_range_high":[1,1,1],"energy_range":[2,9]} + ] + }, + "camera_position":{ + "center_shell":[0,0,0], + "radius_range":[0.3,0.65], + "elevation_range":[10,90] + }, + "generation":{ + "n_cam_pose":3, + "n_sample_on_pose":3, + "n_series":222, + "image_format":"JPEG", + "image_size_wh":[640,480] + } +} +``` + +В результате работы модуля в папке '/home/user/path/to/dataset' будет создана файловая структура с датасетом. + +### Обучение модели Yolov8 Для обучения модели используется модуль на Python. Внешним параметром для модуля является: - каталог с датасетом, сгенерированный на первом этапе. @@ -101,7 +163,7 @@ python train_Yolo.py --path /home/user/path/to/dataset --epoch 11 --outpath /hom - epoch 11: количество эпох обучения (пока рекомендуем 30-50) В результате работы создается файл весов нейросети с лучшими характеристиками обнаружения best.pt -### Использование навыка в ROS2 для обнаружения объекта на изображении (runtime). +### Использование навыка в ROS2 для обнаружения объекта на изображении (runtime) 1. Подготовить папку с файлами BT v.4 * Папка /path/to/bt/ @@ -240,70 +302,6 @@ blenderproc run objs2Yolov4dataset.py [scene] [obj_path] [output_dir] [vhacd_pat Процесс создания набора изображений для одной детали в количестве 3000 шт. занимает около 10 часов машинного времени (1 CPU Ryzen 3700X + 1 GPU Nvidia RTX 2060 Super), поэтому для снижения ресурсоёмкости работы алгоритма применяется оригинальный метод - на вход программы подаются вместе со сценой также набор 3D-моделей заданных объектов для их совместного включения в изображения, что соответствует реальным условиям работы, где необходимо обнаруживать и распознавать сразу множество различных объектов, представляющих детали сборки или оснастку. Помимо этого, данный подход позволяет сократить размер общего дискового пространства, занимаемого файлами с весами нейросетевых моделей всех деталей, что также полезно для прикладных применений. -## Обнаружение объектов в формате BOP Challenge - -Внешними параметрами для модуля являются: -1. Файл, описывающий параметры рандомизиции, а также объекты сцены с подготовленными мешами (файл *.json) -2. Выходной каталог. - -Формируется сцена для случайного размещения в ней объектов из описания. Затем производится рендеринг полученной сцены с рандомизацией параметров освещения, текстур и размещением камеры. Имена объектов должны совпадать с именами ассетов в нашей базе данных. - -Пример запуска модуля генерации датасета: -```bash -blenderproc run renderBOPdataset2.py --form description.json --path /home/user/path/to/dataset -``` - -Пример файла description.json: -```json -{"output":{ - "datasetObjects":{ - "details":[ - {"name":"star", - "inertia":{ - "ixx":0.1,"ixy":0,"ixz":0,"iyy":0.1,"iyz":0,"izz":0.1 - }, - "mass":"0", - "visual":"/assets/libs/objects/star.dae", - "collision":"/assets/libs/objects/star.stl", - "type":"env", - "material_path":"", - "part_path":"/libs/objects/star.stl", - "fbx":"/home/webservice/server/build/public/4c4f3909-74b0-4206-aec1-fc4acd3a1081/assets/libs/objects/star.fbx", - "solidType":"active", - "isSelect":true - } - ] - }, - "typedataset":"ObjectDetection", - "models_randomization":{ - "loc_range_low":[-1,-1,0],"loc_range_high":[1,1,2] - }, - "scene":{ - "objects":[ - {"name":"floor","collision_shape":"BOX","loc_xyz":[0,0,0],"rot_euler":[0,0,0],"material_randomization":{"specular":[0,1],"roughness":[0,1],"metallic":[0,1],"base_color":[[0,0,0,1],[1,1,1,1]}}}, - {"name":"star","collision_shape":"BOX","loc_xyz":[0,0,0.2],"rot_euler":[0,0,0],"material_randomization":{"specular":[0,1],"roughness":[0,1],"metallic":[0,1],"base_color":[[0,0,0,1],[1,1,1,1]}} - ], - "lights":[ - {"id":1,"type":"SUN","loc_xyz":[5,5,5],"rot_euler":[-0.06,0.61,-0.19],"color_range_low":[0.5,0.5,0.5],"color_range_high":[1,1,1],"energy_range":[2,9]} - ] - }, - "camera_position":{ - "center_shell":[0,0,0], - "radius_range":[0.3,0.65], - "elevation_range":[10,90] - }, - "generation":{ - "n_cam_pose":3, - "n_sample_on_pose":3, - "n_series":222, - "image_format":"JPEG", - "image_size_wh":[640,480] - } -} -``` - -В результате работы модуля в папке '/home/user/path/to/dataset' будет создана файловая структура с датасетом. - ## Оценка 6D положения объекта (Pose Estimation) ### Создание датасета