|
|
|
@ -79,7 +79,7 @@ def YOLOv3Loss(x, gtbox, gtlabel, gtscore, attrs):
|
|
|
|
|
use_label_smooth = attrs['use_label_smooth']
|
|
|
|
|
input_size = downsample_ratio * h
|
|
|
|
|
x = x.reshape((n, mask_num, 5 + class_num, h, w)).transpose((0, 1, 3, 4, 2))
|
|
|
|
|
loss = np.zeros((n)).astype('float32')
|
|
|
|
|
loss = np.zeros((n)).astype('float64')
|
|
|
|
|
|
|
|
|
|
smooth_weight = min(1.0 / class_num, 1.0 / 40)
|
|
|
|
|
label_pos = 1.0 - smooth_weight if use_label_smooth else 1.0
|
|
|
|
@ -103,7 +103,7 @@ def YOLOv3Loss(x, gtbox, gtlabel, gtscore, attrs):
|
|
|
|
|
|
|
|
|
|
pred_box = pred_box.reshape((n, -1, 4))
|
|
|
|
|
pred_obj = x[:, :, :, :, 4].reshape((n, -1))
|
|
|
|
|
objness = np.zeros(pred_box.shape[:2]).astype('float32')
|
|
|
|
|
objness = np.zeros(pred_box.shape[:2]).astype('float64')
|
|
|
|
|
ious = batch_xywh_box_iou(pred_box, gtbox)
|
|
|
|
|
ious_max = np.max(ious, axis=-1)
|
|
|
|
|
objness = np.where(ious_max > ignore_thresh, -np.ones_like(objness),
|
|
|
|
@ -158,7 +158,7 @@ def YOLOv3Loss(x, gtbox, gtlabel, gtscore, attrs):
|
|
|
|
|
elif objness[i, j] == 0:
|
|
|
|
|
loss[i] += sce(pred_obj[i, j], 0.0)
|
|
|
|
|
|
|
|
|
|
return (loss, objness.reshape((n, mask_num, h, w)).astype('float32'), \
|
|
|
|
|
return (loss, objness.reshape((n, mask_num, h, w)).astype('float64'), \
|
|
|
|
|
gt_matches.astype('int32'))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -166,8 +166,8 @@ class TestYolov3LossOp(OpTest):
|
|
|
|
|
def setUp(self):
|
|
|
|
|
self.initTestCase()
|
|
|
|
|
self.op_type = 'yolov3_loss'
|
|
|
|
|
x = logit(np.random.uniform(0, 1, self.x_shape).astype('float32'))
|
|
|
|
|
gtbox = np.random.random(size=self.gtbox_shape).astype('float32')
|
|
|
|
|
x = logit(np.random.uniform(0, 1, self.x_shape).astype('float64'))
|
|
|
|
|
gtbox = np.random.random(size=self.gtbox_shape).astype('float64')
|
|
|
|
|
gtlabel = np.random.randint(0, self.class_num, self.gtbox_shape[:2])
|
|
|
|
|
gtmask = np.random.randint(0, 2, self.gtbox_shape[:2])
|
|
|
|
|
gtbox = gtbox * gtmask[:, :, np.newaxis]
|
|
|
|
@ -184,13 +184,13 @@ class TestYolov3LossOp(OpTest):
|
|
|
|
|
|
|
|
|
|
self.inputs = {
|
|
|
|
|
'X': x,
|
|
|
|
|
'GTBox': gtbox.astype('float32'),
|
|
|
|
|
'GTBox': gtbox.astype('float64'),
|
|
|
|
|
'GTLabel': gtlabel.astype('int32'),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gtscore = np.ones(self.gtbox_shape[:2]).astype('float32')
|
|
|
|
|
gtscore = np.ones(self.gtbox_shape[:2]).astype('float64')
|
|
|
|
|
if self.gtscore:
|
|
|
|
|
gtscore = np.random.random(self.gtbox_shape[:2]).astype('float32')
|
|
|
|
|
gtscore = np.random.random(self.gtbox_shape[:2]).astype('float64')
|
|
|
|
|
self.inputs['GTScore'] = gtscore
|
|
|
|
|
|
|
|
|
|
loss, objness, gt_matches = YOLOv3Loss(x, gtbox, gtlabel, gtscore,
|
|
|
|
|