Exemple #1
0
def eval(eval_file_list, batch_size, data_args, model_path):
    '''
    评估脚本,用于评估训好模型
    :param eval_file_list:要测试的图像列表
    :param batch_size:batch的大小
    :param data_args:数据的设置参数
    :param model_path:模型的路径
    :return:
    '''
    # 通过神经网络模型获取损失函数和额外层
    cost, detect_out = vgg_ssd_net.net_conf(mode='eval')
    # 检查模型模型路径是否正确
    assert os.path.isfile(model_path), 'Invalid model.'
    # 通过训练好的模型生成参数
    parameters = paddle.parameters.Parameters.from_tar(gzip.open(model_path))
    # 创建优化方法
    optimizer = paddle.optimizer.Momentum()
    # 创建训练器
    trainer = paddle.trainer.SGD(cost=cost,
                                 parameters=parameters,
                                 extra_layers=[detect_out],
                                 update_equation=optimizer)
    # 定义数据层之间的关系
    feeding = {'image': 0, 'bbox': 1}
    # 生成要训练的数据
    reader = paddle.batch(data_provider.test(data_args, eval_file_list),
                          batch_size=batch_size)
    # 获取测试结果
    result = trainer.test(reader=reader, feeding=feeding)
    # 打印模型的测试信息
    print "TestCost: %f, Detection mAP=%g" % \
          (result.cost, result.metrics['detection_evaluator'])
Exemple #2
0
def train(train_file_list, dev_file_list, data_args, init_model_path):
    optimizer = paddle.optimizer.Momentum(
        momentum=cfg.TRAIN.MOMENTUM,
        learning_rate=cfg.TRAIN.LEARNING_RATE,
        regularization=paddle.optimizer.L2Regularization(
            rate=cfg.TRAIN.L2REGULARIZATION),
        learning_rate_decay_a=cfg.TRAIN.LEARNING_RATE_DECAY_A,
        learning_rate_decay_b=cfg.TRAIN.LEARNING_RATE_DECAY_B,
        learning_rate_schedule=cfg.TRAIN.LEARNING_RATE_SCHEDULE)

    cost, detect_out = vgg_ssd_net.net_conf('train')

    parameters = paddle.parameters.create(cost)
    if not (init_model_path is None):
        assert os.path.isfile(init_model_path), 'Invalid model.'
        parameters.init_from_tar(gzip.open(init_model_path))

    trainer = paddle.trainer.SGD(
        cost=cost,
        parameters=parameters,
        extra_layers=[detect_out],
        update_equation=optimizer)

    feeding = {'image': 0, 'bbox': 1}

    train_reader = paddle.batch(
        data_provider.train(data_args, train_file_list),
        batch_size=cfg.TRAIN.BATCH_SIZE)  # generate a batch image each time

    dev_reader = paddle.batch(
        data_provider.test(data_args, dev_file_list),
        batch_size=cfg.TRAIN.BATCH_SIZE)

    def event_handler(event):
        if isinstance(event, paddle.event.EndIteration):
            if event.batch_id % 1 == 0:
                print "\nPass %d, Batch %d, TrainCost %f, Detection mAP=%f" % \
                        (event.pass_id,
                         event.batch_id,
                         event.cost,
                         event.metrics['detection_evaluator'])
            else:
                sys.stdout.write('.')
                sys.stdout.flush()

        if isinstance(event, paddle.event.EndPass):
            with gzip.open('checkpoints/params_pass_%05d.tar.gz' % \
                    event.pass_id, 'w') as f:
                parameters.to_tar(f)
            result = trainer.test(reader=dev_reader, feeding=feeding)
            print "\nTest with Pass %d, TestCost: %f, Detection mAP=%g" % \
                    (event.pass_id,
                     result.cost,
                     result.metrics['detection_evaluator'])

    trainer.train(
        reader=train_reader,
        event_handler=event_handler,
        num_passes=cfg.TRAIN.NUM_PASS,
        feeding=feeding)
Exemple #3
0
def eval(eval_file_list, batch_size, data_args, model_path):
    cost, detect_out = vgg_ssd_net.net_conf(mode='eval')

    assert os.path.isfile(model_path), 'Invalid model.'
    parameters = paddle.parameters.Parameters.from_tar(gzip.open(model_path))

    optimizer = paddle.optimizer.Momentum()

    trainer = paddle.trainer.SGD(cost=cost,
                                 parameters=parameters,
                                 extra_layers=[detect_out],
                                 update_equation=optimizer)

    feeding = {'image': 0, 'bbox': 1}

    reader = paddle.batch(data_provider.test(data_args, eval_file_list),
                          batch_size=batch_size)

    result = trainer.test(reader=reader, feeding=feeding)

    print "TestCost: %f, Detection mAP=%g" % \
            (result.cost, result.metrics['detection_evaluator'])
Exemple #4
0
def train(train_file_list, dev_file_list, data_args, init_model_path=None):
    # 创建优化方法
    optimizer = paddle.optimizer.Momentum(
        momentum=cfg.TRAIN.MOMENTUM,
        learning_rate=cfg.TRAIN.LEARNING_RATE,
        regularization=paddle.optimizer.L2Regularization(
            rate=cfg.TRAIN.L2REGULARIZATION),
        learning_rate_decay_a=cfg.TRAIN.LEARNING_RATE_DECAY_A,
        learning_rate_decay_b=cfg.TRAIN.LEARNING_RATE_DECAY_B,
        learning_rate_schedule=cfg.TRAIN.LEARNING_RATE_SCHEDULE)

    # 通过神经网络模型获取损失函数和额外层
    cost, detect_out = vgg_ssd_net.net_conf('train')
    # 通过损失函数创建训练参数
    parameters = paddle.parameters.create(cost)
    # 如果有训练好的模型,可以使用训练好的模型再训练
    if not (init_model_path is None):
        assert os.path.isfile(init_model_path), 'Invalid model.'
        parameters.init_from_tar(gzip.open(init_model_path))
    # 创建训练器
    trainer = paddle.trainer.SGD(cost=cost,
                                 parameters=parameters,
                                 extra_layers=[detect_out],
                                 update_equation=optimizer)
    # 定义数据层之间的关系
    feeding = {'image': 0, 'bbox': 1}
    # 创建训练数据
    train_reader = paddle.batch(data_provider.train(data_args,
                                                    train_file_list),
                                batch_size=cfg.TRAIN.BATCH_SIZE)
    # 创建测试数据
    dev_reader = paddle.batch(data_provider.test(data_args, dev_file_list),
                              batch_size=cfg.TRAIN.BATCH_SIZE)

    # 定义训练事件
    def event_handler(event):
        if isinstance(event, paddle.event.EndIteration):
            if event.batch_id % 100 == 0:
                print "\nPass %d, Batch %d, TrainCost %f, Detection mAP=%f" % \
                    (event.pass_id,
                     event.batch_id,
                     event.cost,
                     event.metrics['detection_evaluator'])
            else:
                sys.stdout.write('.')
                sys.stdout.flush()

        if isinstance(event, paddle.event.EndPass):
            with gzip.open('../models/params_pass.tar.gz', 'w') as f:
                trainer.save_parameter_to_tar(f)
            result = trainer.test(reader=dev_reader, feeding=feeding)
            print "\nTest with Pass %d, TestCost: %f, Detection mAP=%g" % \
                (event.pass_id,
                 result.cost,
                 result.metrics['detection_evaluator'])

    # 开始训练
    trainer.train(reader=train_reader,
                  event_handler=event_handler,
                  num_passes=cfg.TRAIN.NUM_PASS,
                  feeding=feeding)