Closed gbyy422990 closed 4 years ago
是偏移量dx dy dw dh @gbyy422990
def calculate_iou(b1, b2,):
zero = tf.convert_to_tensor(0., b1.dtype)
b1_xmin, b1_ymin, b1_xmax, b1_ymax = tf.unstack(b1, 4, axis=-1)
b2_xmin, b2_ymin, b2_xmax, b2_ymax = tf.unstack(b2, 4, axis=-1)
b1_width = tf.maximum(zero, b1_xmax - b1_xmin)
b1_height = tf.maximum(zero, b1_ymax - b1_ymin)
b2_width = tf.maximum(zero, b2_xmax - b2_xmin)
b2_height = tf.maximum(zero, b2_ymax - b2_ymin)
b1_area = b1_width * b1_height
b2_area = b2_width * b2_height
intersect_ymin = tf.maximum(b1_ymin, b2_ymin)
intersect_xmin = tf.maximum(b1_xmin, b2_xmin)
intersect_ymax = tf.minimum(b1_ymax, b2_ymax)
intersect_xmax = tf.minimum(b1_xmax, b2_xmax)
intersect_width = tf.maximum(zero, intersect_xmax - intersect_xmin)
intersect_height = tf.maximum(zero, intersect_ymax - intersect_ymin)
intersect_area = intersect_width * intersect_height
union_area = b1_area + b2_area - intersect_area
iou = tf.math.divide_no_nan(intersect_area, union_area)
return iou
能帮忙看一下这么写iou损失作为回归的损失有没有什么问题?我试了一下好像不收敛,bbox的coord结果基本都不对,谢谢您的回复。
@yangxue0827
看起来没有问题 @gbyy422990
@yangxue0827 再问一下哈,您上面提到的dx,dy是center的吧,还是top left的?
中心点和长宽的偏移量 @gbyy422990
@yangxue0827 好哒,谢谢你。但是为啥会不收敛你有啥建议吗?在tensorboard中看到loss还算正常,但是图像上都检测不到
这个不好说,我觉得大概率是你相关代码写的有问题。你可以检查一下box的编解码那有没有弄错,因为你这iou我看是没问题的,有可能是计算iou的两个框没有弄对。 @gbyy422990
@yangxue0827 好哒,太感谢啦,回复好及时,哈哈哈
你好,我想问一下您在计算smooth l1的时候bbox_pred返回的是[y_min, x_min, height, width]吗?还是别的格式?谢谢