7.3 KiB
Рандомизация
При обучении робота (Илья Ураев)
- Гравитация
- Положение камеры
- Конфигурацию робота (положение джоинтов так называется)
- Положение объекта или точки куда надо дотянутся
- Текстуру поверхности размещения
- Ну и я думаю чтобы с 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, в его BOP-Classic версии.
Он содержит в своей аннотации все необходимые данные (ground truth) для обучения нейросетевых моделей поиску объектов на изображении, а также распознавания поз искомых объектов.