def test_yolov3_loss(self): program = Program() with program_guard(program): x = layers.data(name='x', shape=[30, 7, 7], dtype='float32') gtbox = layers.data(name='gtbox', shape=[10, 4], dtype='float32') gtlabel = layers.data(name='gtlabel', shape=[10], dtype='int32') loss = layers.yolov3_loss(x, gtbox, gtlabel, [10, 13, 30, 13], [0, 1], 10, 0.7, 32) self.assertIsNotNone(loss)
def test_yolov3_loss_with_scale(self): program = Program() with program_guard(program): x = layers.data(name='x', shape=[30, 7, 7], dtype='float32') gt_box = layers.data(name='gt_box', shape=[10, 4], dtype='float32') gt_label = layers.data(name='gt_label', shape=[10], dtype='int32') gt_score = layers.data(name='gt_score', shape=[10], dtype='float32') loss = layers.yolov3_loss( x, gt_box, gt_label, [10, 13, 30, 13], [0, 1], 10, 0.7, 32, gt_score=gt_score, use_label_smooth=False, scale_x_y=1.2) self.assertIsNotNone(loss)
def build(self, boxNum=64, learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08, regularization=None, lazy_mode=False): dataInput = pfl.data(name='data_input', shape=[3, 416, 416], dtype='float32') gtbox = pfl.data(name='data_gtbox', shape=[boxNum, 4], dtype='float32') gtlabel = pfl.data(name='data_gtlabel', shape=[boxNum], dtype='int32') anchors = [10, 14, 23, 27, 37, 58, 81, 82, 135, 169, 344, 319] layer0_output = _DBL(input=dataInput, num_filters=16, filter_size=3, name='layer0') layer1_output = pfl.pool2d(input=layer0_output, pool_size=2, pool_type='max', pool_stride=2, name='layer1_max') layer2_output = _DBL(input=layer1_output, num_filters=32, filter_size=3, name='layer2') layer3_output = pfl.pool2d(input=layer2_output, pool_size=2, pool_type='max', pool_stride=2, name='layer3_max') layer4_output = _DBL(input=layer3_output, num_filters=64, filter_size=3, name='layer4') layer5_output = pfl.pool2d(input=layer4_output, pool_size=2, pool_type='max', pool_stride=2, name='layer5_max') layer6_output = _DBL(input=layer5_output, num_filters=128, filter_size=3, name='layer6') layer7_output = pfl.pool2d(input=layer6_output, pool_size=2, pool_type='max', pool_stride=2, name='layer7_max') layer8_output = _DBL(input=layer7_output, num_filters=256, filter_size=3, name='layer8') layer9_output = pfl.pool2d(input=layer8_output, pool_size=2, pool_type='max', pool_stride=2, name='layer9_max') layer10_output = _DBL(input=layer9_output, num_filters=512, filter_size=3, name='layer10') layer11_output = pfl.pool2d(input=pfl.pad( layer10_output, paddings=[0, 0, 0, 0, 0, 1, 0, 1]), pool_size=2, pool_type='max', pool_stride=1, name='layer11_max') layer12_output = _DBL(input=layer11_output, num_filters=1024, filter_size=3, name='layer12') layer13_output = _DBL(input=layer12_output, num_filters=256, filter_size=1, padding=0, name='layer13') layer14_output = _DBL(input=layer13_output, num_filters=512, filter_size=3, name='layer14') layer15_output = pfl.conv2d(input=layer14_output, num_filters=18, filter_size=1, name='layer15_conv') # layer16_yolo -> -1 x 18 x 13 x 13 yolo1_loss = pfl.yolov3_loss(name='yolo1_loss', x=layer15_output, gtbox=gtbox, gtlabel=gtlabel, anchors=anchors, anchor_mask=[3, 4, 5], class_num=1, ignore_thresh=0.5, downsample_ratio=32) # layer17_route_13 layer18_output = _DBL(input=layer13_output, num_filters=128, filter_size=1, padding=0, name='layer18') layer19_output = pfl.expand(layer18_output, expand_times=[1, 1, 2, 2], name='layer19_upsample') # layer20_route_19_8 layer20_output = pfl.concat([layer19_output, layer8_output], axis=1, name='layer20_concat') layer21_output = _DBL(layer20_output, num_filters=256, filter_size=3, name='layer21') layer22_output = pfl.conv2d(input=layer21_output, num_filters=18, filter_size=1, name='layer22_conv') # layer23_yolo -> -1 x 18 x 26 x 26 yolo2_loss = pfl.yolov3_loss(name='yolo2_loss', x=layer22_output, gtbox=gtbox, gtlabel=gtlabel, anchors=anchors, anchor_mask=[0, 1, 2], class_num=1, ignore_thresh=0.5, downsample_ratio=16) loss = pfl.reduce_mean(pfl.elementwise_add(yolo1_loss, yolo2_loss), name="loss_output") optimizer = fluid.optimizer.AdamOptimizer( learning_rate=learning_rate, beta1=beta1, beta2=beta2, epsilon=epsilon, regularization=regularization, lazy_mode=lazy_mode) optimizer.minimize(loss) self._netOutput1, self._netOutput2 = layer15_output, layer22_output self._loss = loss self._trainExe = fluid.Executor( fluid.CUDAPlace(0)) if self._USE_CUDA else fluid.Executor( fluid.CPUPlace())