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)
Exemple #2
0
    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())