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, с помощью которого подготавливается набора данных для обучения нейросети.
|
||||
|
||||
## Обнаружению объектов в формате 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)
|
||||
|
||||
### Создание датасета
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue