105 lines
5.6 KiB
Markdown
105 lines
5.6 KiB
Markdown
# Инструкция для запуска
|
||
|
||
Должен быть установлен пакет [BlenderProc](https://github.com/DLR-RM/BlenderProc)
|
||
|
||
## Создание датасета в формате YoloV4 для заданного объекта
|
||
|
||
Команда для запуска:
|
||
|
||
```
|
||
blenderproc run obj2Yolov4dataset.py [obj] [output_dir] [--imgs 1]
|
||
```
|
||
- obj: файл описания объекта *.obj
|
||
- output_dir: выходной каталог
|
||
- --imgs 1: количество изображений на выходе
|
||
|
||
## Создание датасета в формате YoloV4 для серии заданных объектов в заданной сцене
|
||
|
||
Команда для запуска:
|
||
```
|
||
blenderproc run objs2Yolov4dataset.py [scene] [obj_path] [output_dir] [vhacd_path] [--imgs 1]
|
||
```
|
||
- scene: путь к файлу описания сцены (*.blend)
|
||
- obj_path: путь к каталогу с файлами описания детектируемых объектов *.obj
|
||
- output_dir: выходной каталог
|
||
- vhacd_path: каталог, в котором должен быть установлен или уже установлен vhacd (по умолчанию blenderproc_resources/vhacd)
|
||
- --imgs 1: количество серий рендеринга (по 15 изображений каждая) на выходе (например, если imgs=100, то будет получено 1500 изображений)
|
||
|
||
Файл описания сцены обязательно должен содержать плоскость (с именем 'floor'), на которую будут сэмплированы объекты для обнаружения.
|
||
|
||
Должен быть собран пакет [darknet](https://github.com/AlexeyAB/darknet) для работы на заданном ПО и оборудовании (CPU, GPU ...)
|
||
|
||
---
|
||
|
||
## Обучение нейросети и получение файла с её весами
|
||
|
||
Команда для запуска:
|
||
```
|
||
darknet detector train [data] [cfg] [weight]
|
||
```
|
||
- data: файл с описанием датасета (*.data)
|
||
- cfg: файл с описанием нейросети
|
||
- weight: файл весов нейросети
|
||
|
||
Для обучения нужно загрузить файл с предобученными весами (162 MB): [yolov4.conv.137](https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.conv.137)
|
||
Для разного количества детектируемых объектов в выборке нужны свои файлы [data](https://gitlab.com/robossembler/framework/-/blob/master/ObjectDetection/yolov4_objs2.data) и [cfg](https://gitlab.com/robossembler/framework/-/blob/master/ObjectDetection/yolov4_objs2.cfg).
|
||
|
||
---
|
||
|
||
## Команда для обнаружения объектов нейросетью с обученными весами
|
||
* вариант 1 (в файле t.txt - список изображений):
|
||
```
|
||
darknet detector test yolov4_objs2.data yolov4_test.cfg yolov4_objs2_final.weights -dont_show -ext_output < t.txt > res.txt
|
||
```
|
||
|
||
* вариант 2 (файл 000015.jpg - тестовое изображение):
|
||
```
|
||
darknet detector test yolov4_objs2.data yolov4_test.cfg yolov4_objs2_final.weights -dont_show -ext_output 000015.jpg > res.txt
|
||
```
|
||
* вариант 3 (в файле t.txt - список изображений):
|
||
```
|
||
darknet detector test yolov4_objs2.data yolov4_test.cfg yolov4_objs2_final.weights -dont_show -ext_output -out res.json < t.txt
|
||
```
|
||
|
||
Файл res.txt после запуска варианта 2:
|
||
|
||
> net.optimized_memory = 0
|
||
> mini_batch = 1, batch = 1, time_steps = 1, train = 0
|
||
> Create CUDA-stream - 0
|
||
> Create cudnn-handle 0
|
||
> nms_kind: greedynms (1), beta = 0.600000
|
||
> nms_kind: greedynms (1), beta = 0.600000
|
||
> nms_kind: greedynms (1), beta = 0.600000
|
||
>
|
||
> seen 64, trained: 768 K-images (12 Kilo-batches_64)
|
||
> Detection layer: 139 - type = 28
|
||
> Detection layer: 150 - type = 28
|
||
> Detection layer: 161 - type = 28
|
||
>000015.jpg: Predicted in 620.357000 milli-seconds.
|
||
>fork.001: 94% (left_x: 145 top_y: -0 width: 38 height: 18)
|
||
>asm_element_edge.001: 28% (left_x: 195 top_y: 320 width: 40 height: 61)
|
||
>start_link.001: 87% (left_x: 197 top_y: 313 width: 39 height: 68)
|
||
>doking_link.001: 99% (left_x: 290 top_y: 220 width: 32 height: 21)
|
||
>start_link.001: 90% (left_x: 342 top_y: 198 width: 33 height: 34)
|
||
>doking_link.001: 80% (left_x: 342 top_y: 198 width: 32 height: 34)
|
||
>assemb_link.001: 100% (left_x: 426 top_y: 410 width: 45 height: 61)
|
||
|
||
|
||
Файл res.json после запуска варианта 3:
|
||
>[
|
||
{
|
||
"frame_id":1,
|
||
"filename":"img_test/000001.jpg",
|
||
"objects": [
|
||
{"class_id":5, "name":"asm_element_edge.001", "relative_coordinates":{"center_x":0.498933, "center_y":0.502946, "width":0.083075, "height":0.073736}, "confidence":0.999638},
|
||
{"class_id":4, "name":"grip-tool.001", "relative_coordinates":{"center_x":0.858856, "center_y":0.031339, "width":0.043919, "height":0.064563}, "confidence":0.996551}
|
||
]
|
||
},
|
||
{
|
||
"frame_id":2,
|
||
"filename":"img_test/000002.jpg",
|
||
"objects": [
|
||
{"class_id":1, "name":"start_link.001", "relative_coordinates":{"center_x":0.926026, "center_y":0.728457, "width":0.104029, "height":0.132757}, "confidence":0.995811},
|
||
{"class_id":0, "name":"assemb_link.001", "relative_coordinates":{"center_x":0.280403, "center_y":0.129059, "width":0.029980, "height":0.025067}, "confidence":0.916782}
|
||
]
|
||
}
|