yolov3 keras experiencecor - увеличение количества якорей для тренировок - PullRequest
0 голосов
/ 29 октября 2019

Я реализовал замечательный пакет для yolov3, найденный здесь -

https://github.com/experiencor/keras-yolo3

Теперь я хотел бы увеличить количество якорей с 9 до 18 для обучения, так как я читаюэто может повысить точность (меня не волнует время выполнения модели, и для блока очень важно плотно прилегать к границе объектов для этого проекта). Я использовал gen_anchors.py для создания 18 якорей и скопировал их в файл config.json. Я также удвоил значения привязки в определениях YoloLayer в файле yolo.py:


    loss_yolo_1 = YoloLayer(anchors[24:],
    [1*num for num in max_grid],
    batch_size,
    warmup_batches,
    ignore_thresh,
    grid_scales[0],
    obj_scale,
    noobj_scale,
    xywh_scale,
    class_scale)([input_image, pred_yolo_1, true_yolo_1, true_boxes])

    loss_yolo_2 = YoloLayer(anchors[12:24], 
                            [2*num for num in max_grid], 
                            batch_size, 
                            warmup_batches, 
                            ignore_thresh, 
                            grid_scales[1],
                            obj_scale,
                            noobj_scale,
                            xywh_scale,
                            class_scale)([input_image, pred_yolo_2, true_yolo_2, true_boxes])

    loss_yolo_3 = YoloLayer(anchors[:12], 
                            [4*num for num in max_grid], 
                            batch_size, 
                            warmup_batches, 
                            ignore_thresh, 
                            grid_scales[2],
                            obj_scale,
                            noobj_scale,
                            xywh_scale,
                            class_scale)([input_image, pred_yolo_3, true_yolo_3, true_boxes]) 

(исходные значения были 12 :, 6:12,: 6 вместо 24 :, 12:24,:12). Я предполагаю, что это должно быть сделано, потому что вектор якорей в два раза длиннее (скажите мне, если я ошибаюсь). Однако, теперь я получаю эту ошибку:

Traceback (most recent call last):
File "train.py", line 282, in
main(args)
File "train.py", line 244, in main
class_scale = config['train']['class_scale'],
File "train.py", line 131, in create_model
class_scale = class_scale
File "/home/VRC/robert.harris/keras_yolo3_tube_sub/yolo.py", line 334, in create_yolov3_model
class_scale)([input_image, pred_yolo_1, true_yolo_1, true_boxes])
File "/home/VRC/robert.harris/keras_yolo3_tube_sub/yolo.py", line 15, in init
self.anchors = tf.constant(anchors, dtype='float', shape=[1,1,1,3,2])
File "/home/VRC/robert.harris/anaconda3/lib/python3.6/site-packages/tensorflow/python/framework/constant_op.py", line 207, in constant
value, dtype=dtype, shape=shape, verify_shape=verify_shape))
File "/home/VRC/robert.harris/anaconda3/lib/python3.6/site-packages/tensorflow/python/framework/tensor_util.py", line 497, in make_tensor_proto
(shape_size, nparray.size))
ValueError: Too many elements provided. Needed at most 6, but received 12

в основном, эта строка не нравится:


    self.anchors = tf.constant(anchors, dtype='float', shape=[1,1,1,3,2])

Я получаю, что тензор больше не имеет только 6 значений, но я 'Я не уверен, что делать, чтобы это исправить. Я попытался поиграть с увеличением вектора в этой строке до self.anchors = tf.constant (anchors, dtype = 'float', shape = [1,1,1,6,2]), чтобы у него было 12 полных чиселчтобы соответствовать, но затем я получаю ошибки в этой области:

    pred_xy = tf.expand_dims(pred_box_xy / grid_factor, 4)
    pred_wh = tf.expand_dims(tf.exp(pred_box_wh) * self.anchors / net_factor, 4)

    pred_wh_half = pred_wh / 2.
    pred_mins    = pred_xy - pred_wh_half
    pred_maxes   = pred_xy + pred_wh_half 

В общем, как правильно тренироваться с более чем 9 якорями? Спасибо!

Кроме того, я хотел бы воспользоваться любыми другими советами о том, как повысить точность ограничивающего прямоугольника, учитывая, что меня не беспокоит время выполнения модели, и необходимо, чтобы блоки были плотно прилегающими к своим объектам на тестовом наборе. Особенно дно ящиков (я пытаюсь определить положение дна объекта).

...