fix dataset-generator doc structure
This commit is contained in:
parent
99ec9d944e
commit
5752b3fe67
1 changed files with 69 additions and 71 deletions
|
@ -4,11 +4,9 @@ title: Генерация датасетов
|
||||||
|
|
||||||
Одной из подзадач управления робототехнической системой является задача обнаружения и классификации объектов в сцене, реализуемая с помощью камеры (машинного зрения). Одним из методов решения данной задачи является использование нейросетевой модели, полученной в ходе обучения на предварительно подготовленных наборах данных. Разработанный модуль генерации наборов данных (датасетов) позволяет автоматизировать процесс их подготовки. Полигональные модели экспортируются из CAD-системы - в результате получается mesh-файл формата `obj`. В ходе генерации формируется сцена для симуляции окружения робота (файл сцены в формате blend). В модуле используется пакет создания синтетических изображений BlenderProc, с помощью которого подготавливается набора данных для обучения нейросети.
|
Одной из подзадач управления робототехнической системой является задача обнаружения и классификации объектов в сцене, реализуемая с помощью камеры (машинного зрения). Одним из методов решения данной задачи является использование нейросетевой модели, полученной в ходе обучения на предварительно подготовленных наборах данных. Разработанный модуль генерации наборов данных (датасетов) позволяет автоматизировать процесс их подготовки. Полигональные модели экспортируются из CAD-системы - в результате получается mesh-файл формата `obj`. В ходе генерации формируется сцена для симуляции окружения робота (файл сцены в формате blend). В модуле используется пакет создания синтетических изображений BlenderProc, с помощью которого подготавливается набора данных для обучения нейросети.
|
||||||
|
|
||||||
## Обнаружению объектов в формате COCO
|
## Обнаружение объектов (Object Detection)
|
||||||
|
|
||||||
В качестве выходного форма# Модуль восприятия окружения роботом rbs_perception
|
### Описание API навыка
|
||||||
|
|
||||||
## Навык обнаружения объектов (Object Detection). Описание API.
|
|
||||||
|
|
||||||
Вначале попытаемся описать полную последовательность действий по подготовке и использованию навыка обнаружения объектов. Задача обнаружения объектов сенсорами робота (в частности, RGB камерой в нашем случае) ставится в случае, например, когда необходимо в заданном окружении (сцене) определить наличие или отсутствие необходимых деталей для сборки изделия. Такие детали представлены в информационной среде в виде ассетов, хранимых в базе данных с заданными характеристиками. Поэтому входным параметром навыка обнаружения объектов является список ассетов, экземпляры которых в текущей задаче необходимо обнаруживать. Результатом использования навыка в информационной системе будет являться получение данных о заданном ассете на конкретном изображении, полученном с помощью RGB камеры.
|
Вначале попытаемся описать полную последовательность действий по подготовке и использованию навыка обнаружения объектов. Задача обнаружения объектов сенсорами робота (в частности, RGB камерой в нашем случае) ставится в случае, например, когда необходимо в заданном окружении (сцене) определить наличие или отсутствие необходимых деталей для сборки изделия. Такие детали представлены в информационной среде в виде ассетов, хранимых в базе данных с заданными характеристиками. Поэтому входным параметром навыка обнаружения объектов является список ассетов, экземпляры которых в текущей задаче необходимо обнаруживать. Результатом использования навыка в информационной системе будет являться получение данных о заданном ассете на конкретном изображении, полученном с помощью RGB камеры.
|
||||||
|
|
||||||
|
@ -24,7 +22,7 @@ title: Генерация датасетов
|
||||||
|
|
||||||
Теперь перейдём к полному описанию данного API.
|
Теперь перейдём к полному описанию данного API.
|
||||||
|
|
||||||
### Создание датасета
|
### Генерация датасета в формате COCO
|
||||||
|
|
||||||
Для создания датасета используется модуль на Python для BlenderProc. Внешними параметрами для модуля являются:
|
Для создания датасета используется модуль на Python для BlenderProc. Внешними параметрами для модуля являются:
|
||||||
- файл, описывающий параметры рандомизиции, а также объекты сцены с подготовленными мешами (файл *.json)
|
- файл, описывающий параметры рандомизиции, а также объекты сцены с подготовленными мешами (файл *.json)
|
||||||
|
@ -88,7 +86,71 @@ blenderproc run renderBOPdataset2.py --form description.json --path /home/user/p
|
||||||
|
|
||||||
В результате работы модуля в папке '/home/user/path/to/dataset' будет создана файловая структура с датасетом.
|
В результате работы модуля в папке '/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. Внешним параметром для модуля является:
|
Для обучения модели используется модуль на Python. Внешним параметром для модуля является:
|
||||||
- каталог с датасетом, сгенерированный на первом этапе.
|
- каталог с датасетом, сгенерированный на первом этапе.
|
||||||
|
@ -101,7 +163,7 @@ python train_Yolo.py --path /home/user/path/to/dataset --epoch 11 --outpath /hom
|
||||||
- epoch 11: количество эпох обучения (пока рекомендуем 30-50)
|
- epoch 11: количество эпох обучения (пока рекомендуем 30-50)
|
||||||
В результате работы создается файл весов нейросети с лучшими характеристиками обнаружения best.pt
|
В результате работы создается файл весов нейросети с лучшими характеристиками обнаружения best.pt
|
||||||
|
|
||||||
### Использование навыка в ROS2 для обнаружения объекта на изображении (runtime).
|
### Использование навыка в ROS2 для обнаружения объекта на изображении (runtime)
|
||||||
|
|
||||||
1. Подготовить папку с файлами BT v.4
|
1. Подготовить папку с файлами BT v.4
|
||||||
* Папка /path/to/bt/
|
* Папка /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-моделей заданных объектов для их совместного включения в изображения, что соответствует реальным условиям работы, где необходимо обнаруживать и распознавать сразу множество различных объектов, представляющих детали сборки или оснастку. Помимо этого, данный подход позволяет сократить размер общего дискового пространства, занимаемого файлами с весами нейросетевых моделей всех деталей, что также полезно для прикладных применений.
|
Процесс создания набора изображений для одной детали в количестве 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)
|
## Оценка 6D положения объекта (Pose Estimation)
|
||||||
|
|
||||||
### Создание датасета
|
### Создание датасета
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue