Skip to content

Introduction

API Return Value


모든 API는 기본적으로 (error_code, return value)의 tuple을 리턴합니다.

  • error_code=0인 경우, 함수가 성공적으로 동작했으며 return value실제 함수의 리턴 값입니다.
  • error_code≠0인 경우, 함수 실행중 error가 발생했다는 뜻이며 return valueNone입니다.

error_code 에 해당하는 에러 메세지를 얻으려면 core.get_error_message() 함수를 이용하세요.

core.get_error_message(error_code)

입력으로 받은 error_code에 해당하는 error_message를 반환합니다.

Parameters:

Name Type Description Default
error_code int

error_code

required

Raises:

Type Description
UndefinedErrorCodeError

정의되지 않은 error_code를 입력으로 받을 경우 발생하는 error

Returns:

Name Type Description
str str

error_message

API Demo Usage


  • Train API (see demo/train.py)

    from core import Trainer
    
    # Trainer 빌드
    error, trainer = Trainer.build(CONFIG, DATA)
    assert error >= 0
    
    # 0번 GPU로 이동
    error, result = trainer.to_device(DEVICE)
    assert error >= 0
    
    # validation 가능한지 확인
    error, validation_enabled = trainer.validation_enabled()
    assert error >= 0
    
    # iterations 수 확인
    error, total_iterations = trainer.get_total_num_iterations()
    print(f"total steps to train: {total_iterations}")
    
    # 학습 루프
    for step in range(total_iterations):
        error, result = trainer.train_one_step()
        print(f"step: {step + 1} result :", result)
        assert error >= 0
    
        if validation_enabled and (step + 1) % VALIDATION_INTERVAL == 0:
            error, validation_result = trainer.validate()
            assert error >= 0
            print(validation_result)
    
    # 학습 후처리 (thresholds 계산) (save_checkpoint전에 반드시 호출해야합니다.)
    error, post_train_process_result = trainer.post_train_process()
    assert error >= 0
    print("post_train_process_result :", post_train_process_result)
    
    # 체크포인트 저장
    error, _ = trainer.save_checkpoint(
        checkpoint_path=CHECKPOINT_PATH,
        password=PASSWORD,
        metadata={"description": "demo"},
    )
    assert error >= 0
    
  • Inference API (see demo/inference.py)

    from core import InferenceHandler, read_metadata, write_metadata
    
    # 모듈 정보 확인
    error, metadata = read_metadata(CHECKPOINT_PATH)
    assert error >= 0
    print("Inference metadata:", metadata)
    
    # 인퍼런스 모듈 빌드
    inferene_build_config = {
        "checkpoint_path": CHECKPOINT_PATH,
        "password": PASSWORD,
        "device": DEVICE,
    }
    error, inference_handler = InferenceHandler.build(inferene_build_config)
    assert error >= 0
    
    # 인퍼런스 옵션 초기값 확인
    inference_options = {
        "outputs.score_min": True,
        "outputs.score_max": True,
        "outputs.mask": True,
        "outputs.is_ng": True,
        "outputs.heatmap": True,
        "outputs.objects": True,
        "params.anomaly_score_threshold": 0.0,
        "params.object_boundary_threshold": 0.0,
        "params.heatmap_color_range_max": 0.0,
        "params.heatmap_color_range_min": 0.0,
        "params.calc_object_area_and_apply_threshold": True,
        "params.calc_object_score_and_apply_threshold": True,
        "params.object_boundary_threshold": 0.0,
        "params.object_scoring_method": "mean",
        "params.object_score_threshold": 0.0,
        "params.object_area_method": "fast_plus",
        "params.object_area_threshold": 0,
    }
    print("Default inference options:")
    for key in inference_options:
        error, value = inference_handler.get_default_inference_option(key)
        assert error >= 0
        print(f"  {key}: {value}")
    
    # 디벨로퍼: Analyze 수행
    error, _ = inference_handler.set_analysis_data(images=DATA["validation_images"], labeled=True)
    assert error >= 0
    
    # model checkpoint에 저장된 인퍼런스 옵션 확인
    print("Inference options in model checkpoint:")
    for key in inference_options:
        error, value = inference_handler.get_inference_option(key)
        assert error >= 0
        print(f"  {key}: {value}")
    
    error, analysis_steps = inference_handler.initialize_analysis()
    assert error >= 0
    
    for _ in range(analysis_steps):
        error, _ = inference_handler.step_analysis()
        assert error >= 0
    
    error, analysis_results = inference_handler.finalize_analysis()
    assert error >= 0
    print("Analysis results:\n\t", analysis_results["summary"])
    
    # 디벨로퍼: 인퍼런스 옵션 변경
    for key, value in inference_options.items():
        error, _ = inference_handler.set_inference_option(key, value)
        assert error >= 0
    
    # 디벨로퍼: metadata에 inference_option 저장 (예시)
    metadata["inference_options"] = inference_options
    error, _ = write_metadata(CHECKPOINT_PATH, metadata)
    assert error >= 0
    
    # 인퍼런스 옵션이 잘 변경되었는지 확인
    print("Inference options:")
    for key in inference_options:
        error, value = inference_handler.get_inference_option(key)
        assert error >= 0
        print(f"  {key}: {value}")
    
    # 디벨로퍼: 새로운 세팅으로 Analyze 재수행
    error, analysis_results = inference_handler.analyze_with_existing_data()
    assert error >= 0
    print("Analysis results:\n\t", analysis_results["summary"])
    
    # 런타임: 저장된 체크포인트로 핸들러 빌드
    error, inference_handler = InferenceHandler.build(inferene_build_config)
    assert error >= 0
    
    # 런타임: 핸들러 빌드
    error, metadata = read_metadata(CHECKPOINT_PATH)
    assert error >= 0
    inferene_build_config["inference_options"] = metadata["inference_options"]
    error, inference_handler = InferenceHandler.build(inferene_build_config)
    assert error >= 0
    
    # 런타임 검사: 후처리까지 한번에 최적화된 연산으로 수행
    image_path = DATA["validation_images"]["0"]["path"]
    error, output = inference_handler.infer_and_postprocess(images=[image_path])
    assert error >= 0
    print("Runtime (infer_and_postprocess):", output)