framework/docs/randomization.md

123 lines
No EOL
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Рандомизация
### При обучении робота (Илья Ураев)
- Гравитация
- Положение камеры
- Конфигурацию робота (положение джоинтов так называется)
- Положение объекта или точки куда надо дотянутся
- Текстуру поверхности размещения
- Ну и я думаю чтобы с robot_builder смотрелось, то можно рандомизировать число степеней свободы робота.
- Можно рандомизировать позиции спавна робота
### При создании датасета (Александр Шушпанов)
- Зона локации (спавна) активных объектов
- Позиция камеры: радиус сферы размещения и наклон, центр этой сферы
- Источники света: количество, тип, локализация в пространстве, цветность, сила света
- Свойства материала по отражению света: зеркальность, шероховатость, металлизация, цвет
Гиперпараметры.
- количество серий (спавна активных объектов)
- количество позиций камеры на одну серию
- количество сдвигов камеры на 1 позу
### Общий список параметров рандомизации
- Положение искомого(активного) объекта(-ов) в рабочей зоне
- Позиция камеры: радиус сферы размещения и наклон, центр этой сферы
- Текстуры повехностей объектов и/или свойства материала по отражению света: зеркальность, шероховатость, металлизация, цвет
- Источники света: количество, тип, локализация в пространстве, цветность, сила света
- Конфигурация робота (положение джоинтов), число степеней свободы и его начальное расположение
- Гравитация
## Web-сервис для генерации датасетов
Для реализации пользовательского интерфейса web-сервиса нами была разработана схема описания параметров рандомизации. Её использование позволяет изменять конфигурацию параметров в зависимости от задачи. Предполагается в дальнейшем использовать модуль ввода параметров в том числе и в задачах обучения с подкреплением.
Пример такой схемы:
```
ENUM T = "ObjectDetection","PoseEstimation"
ENUM C = "","BOX","SPHERE","CAPSULE","CYLINDER","CONE","CONVEX_HULL","MESH","COMPOUND"
ENUM L = "POINT","SUN"
ENUM F = "JPEG","PNG"
MODELS = {
"id": ${ID:number:1},
"name": ${NAME:string:""},
"model": ${MODEL:string:"models/1.fbx"}
}
OBJECTS_SCENE = {
"name": ${NAME:string:""},
"collision_shape": ${enum:C:"BOX"},
"loc_xyz": [${LOC_XYZ_1:number:0}, ${LOC_XYZ_2:number:0}, ${LOC_XYZ_3:number:0}],
"rot_euler": [${ROT_EULER_1:number:0}, ${ROT_EULER_2:number:0}, ${ROT_EULER_3:number:0}],
"material_randomization": {
"specular": [${SPECULAR_1:number:0}, ${SPECULAR_2:number:1}],
"roughness": [${ROUGHNESS_1:number:0}, ${ROUGHNESS_2:number:1}],
"metallic": [${METALLIC_1:number:0}, ${METALLIC_2:number:1}],
"base_color": [
[
${BASE_COLOR_1:number:0},
${BASE_COLOR_2:number:0},
${BASE_COLOR_3:number:0},
${BASE_COLOR_4:number:1}
],
[
${BASE_COLOR_5:number:1},
${BASE_COLOR_6:number:1},
${BASE_COLOR_7:number:1},
${BASE_COLOR_8:number:1}
]
]
}
}
LIGHTS = {
"id": ${ID:number:1},
"type": ${enum:L:"POINT"},
"loc_xyz": [${LOC_XYZ_1:number:5}, ${LOC_XYZ_2:number:5}, ${LOC_XYZ_3:number:5}],
"rot_euler": [${ROT_EULER_1:number:-0.06}, ${ROT_EULER_2:number:0.61}, ${ROT_EULER_3:number:-0.19}],
"color_range_low": [${COLOR_RANGE_LOW_1:number:0.5}, ${COLOR_RANGE_LOW_2:number:0.5}, ${COLOR_RANGE_LOW_3:number:0.5}],
"color_range_high":[${COLOR_RANGE_HIGH_1:number:1}, ${COLOR_RANGE_HIGH_2:number:1}, ${COLOR_RANGE_HIGH_3:number:1}],
"energy_range":[${ENERGY_RANGE_1:number:400},${ENERGY_RANGE_2:number:900}]
}
{
"typedataset": ${enum:T:"ObjectDetection"},
"dataset_path": ${DATASET_PATH:string},
"models":${ARRAY:MODELS:[]},
"models_randomization":{
"loc_range_low": [${LOC_RANGE_LOW_1:number:-1}, ${LOC_RANGE_LOW_2:number:-1}, ${LOC_RANGE_LOW_3:number:0}],
"loc_range_high": [${LOC_RANGE_HIGH_1:number:1}, ${LOC_RANGE_HIGH_2:number:1}, ${LOC_RANGE_HIGH_3:number:2}]
},
"scene":{
"objects": ${ARRAY:OBJECTS_SCENE:[]},
"lights": ${ARRAY:LIGHTS:[]},
},
"camera_position":{
"center_shell": [${CENTER_SHELL_1:number:0}, ${CENTER_SHELL_2:number:0}, ${CENTER_SHELL_3:number:0}],
"radius_range": [${RADIUS_RANGE_1:number:0.4}, ${RADIUS_RANGE_2:number:1.4}],
"elevation_range": [${ELEVATION_RANGE_1:number:10}, ${ELEVATION_RANGE_2:number:90}]
},
"generation":{
"n_cam_pose": ${N_CAM_POSE:number:5},
"n_sample_on_pose": ${N_SAMPLE_ON_POSE:number:3},
"n_series": ${N_SERIES:number:100},
"image_format": ${enum:F:"jpg"},
"image_size_wh": [${IMAGE_SIZE_WH_1:number:640}, ${IMAGE_SIZE_WH_2:number:480}]
}
}
```
Вначале описываются перечисления - ENUM, которым присваиваются имена и список возможных значений. Затем описываются составные именованные объекты, а затем основной блок описания параметров. Этот блок представляет из себя JSON-словарь параметров, который будет подготовлен на выходе модуля ввода параметров. Каждый ключ этого словаря дополняется мини-схемой описания вводимого значения.
Формат:
```
${<имя_переменной>:<тип>:<значение_по_умолчанию>}
```
либо массив объектов
```
${ARRAY:<имя_объекта>:[]}
```
В нашем алгоритме формирования датасета для задач компьютерного зрения (ObjectDetection, PoseEstimation) выбран формат [BOP: Benchmark for 6D Object Pose Estimation](https://bop.felk.cvut.cz/home/), в его [BOP-Classic](https://bop.felk.cvut.cz/datasets/) версии.
Он содержит в своей аннотации все необходимые данные (ground truth) для обучения нейросетевых моделей поиску объектов на изображении, а также распознавания поз искомых объектов.