Я реализовал замечательный пакет для 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 якорями? Спасибо!
Кроме того, я хотел бы воспользоваться любыми другими советами о том, как повысить точность ограничивающего прямоугольника, учитывая, что меня не беспокоит время выполнения модели, и необходимо, чтобы блоки были плотно прилегающими к своим объектам на тестовом наборе. Особенно дно ящиков (я пытаюсь определить положение дна объекта).