Skip to content

Inference

generation.Inferencer

학습한 Generator 모델을 사용하여 검사를 하기 위한 Inferencer class 입니다.

Usage
# 인퍼런스 모듈 빌드
inference_build_config = {
    "checkpoint_path": CHECKPOINT_PATH,
    "password": PASSWORD,
    "device": DEVICE,
}
error, inferencer = Inferencer.build(inference_build_config)
assert error >= 0

# 모듈 정보 확인
error, metadata = read_metadata(CHECKPOINT_PATH)
assert error >= 0
print("Inference metadata:", metadata)

# 인퍼런스 옵션 초기값 확인
n_classes = CONFIG["n_classes"]
inference_options = {
    "outputs.time": False,
}
print("Default inference options:")
for key in inference_options:
    error, value = inferencer.get_default_inference_option(key)
    assert error >= 0
    print(f"  {key}: {value}")

# 디벨로퍼: Generate 수행
generated_results = {}
for image_id, image_info in data.items():
    image_info["save_dir"] = os.path.join(DEMO_DIR, str(image_id))
    images = {image_id: image_info}

    error, results = inferencer.generate(images=images, use_saved_file=False)
    assert error >= 0

    if len(results[image_id]["generated_labels"]) > 0:
        results[image_id]["generated_labels"][0]["accept_generated_label"] = False
    generated_results.update(results)

# 유저 interaction: 생성된 결함 중 제외하고 싶은 결함 제거 작업 수행
error, _ = inferencer.update_generated_labels(generated_results)
assert error >= 0

# 인퍼런스 옵션 변경 후 다시 수행
inference_options = {
    "outputs.time": False,
}
for key, value in inference_options.items():
    error, default_value = inferencer.get_default_inference_option(key)
    assert error >= 0
    error, current_value = inferencer.get_inference_option(key)
    assert error >= 0
    print(key, current_value)
    error, _ = inferencer.set_inference_option(key, value)
    assert error >= 0

# 디벨로퍼: 인퍼런스 옵션 변경
for key, value in inference_options.items():
    error, _ = inferencer.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 = inferencer.get_inference_option(key)
    assert error >= 0
    print(f"  {key}: {value}")

# 디벨로퍼: 새로운 세팅으로 Generate 재수행
for image_id, image_info in data.items():
    images = {image_id: image_info}

    # 만약 ["params.inspection_size_wh", "params.batch_size", "params.oversized_image_handling"] 옵션이 변경되었을 경우
    # use_saved_file=False로 모델 인퍼런스를 재수행해야함!
    error, results = inferencer.generate(images=images, use_saved_file=True)
    assert error >= 0

build(config) classmethod

Inferencer class의 instance를 생성합니다.

Parameters:

Name Type Description Default
config Dict

Inferencer를 build 하기 위한 config가 담겨 있는 dictionary 입니다.

{
    "checkpoint_path": str,     # 체크포인트 경로
    "password": Optional[str],  # 체크포인트 패스워드 (default None)
    "device": Union[int, str],  # GPU 번호 (int) or "cpu" (str) (default "cpu")
}

required

Returns:

Name Type Description
Inferencer

build가 완료된 generation.Inferencer class의 instance를 반환합니다.

get_default_inference_option(key)

Inference & postprocess 옵션의 기본 설정 값을 반환합니다.

Parameters:

Name Type Description Default
key str

옵션 key

required

Returns:

Name Type Description
Any Any

옵션 value

Keys

사용 가능한 key와 value 목록:

{
    "outputs.time": bool,  # (default False, 인퍼런스 시 각 요소에 걸린 시간 측정 여부. True인 경우 측정)
}

사용 예시:

inferencer.get_default_inference_option(key="outputs.time")
inferencer.set_inference_option(key="outputs.time", value=True)

get_inference_option(key)

현재 설정된 inference & postprocess 옵션 값을 읽습니다.

Parameters:

Name Type Description Default
key str

옵션 key

required

Returns:

Name Type Description
Any Any

옵션 value

Keys

get_default_inference_option과 동일합니다.

set_inference_option(key, value)

Inference & postprocess 옵션을 설정합니다.

Parameters:

Name Type Description Default
key str

설정하고자 하는 옵션 key 입니다.

required
value Any

설정하고자 하는 옵션 value 입니다.

required

Returns:

Name Type Description
None None

None

Keys

get_default_inference_option과 동일합니다.

generate(images, use_saved_file)

images들에 대한 generation 수행

Parameters:

Name Type Description Default
images Dict[str, Dict]

generation에 사용할 데이터 리스트.

{
    "{image_id}": {
        "path": str,  # 이미지 경로
        "width": int,  # image width
        "height": int,  # image height
        "labels": [
            {
                "mode": "pen",  # pen mode
                "class_index": int,  # class index to be generated
                "bounding_box": [int, int, int, int],  # bounding box (seg label format)
                "bitmap": str,  # seg mask bitmap (seg label format)
            },
            {
                "mode": "box",  # box mode
                "class_index": int,  # class index to be generated
                "bounding_rot_box": [
                    [float, float],
                    [float, float],
                    float
                ],  # rotated box coordinates [[center_x, center_y], [width, height], angle]
            },
            {
                "mode": "auto",  # auto mode
                "box_proposal_mode": str,  # box proposal mode. "template_matching", "random", "reference".
                "class_index": int,  # class index to be generated
                "count": int,  # number of defects to be generated by this option
            },
            ...,  # times number of labels in the image
        ],
        "save_dir": str,  # 해당 이미지의 generation 결과 저장 directory
    },
    ...,  # times number of images
}

required
use_saved_file bool

기존 인퍼런스 결과인 saved_file 사용 여부.

required

Returns:

Name Type Description
Dict Dict

Generation 결과

{
    "{image_id}": {
        "image": np.ndarray,
        "width": int,
        "height": int,
        "generated_labels": [
            {
                "class_index": int,
                "bounding_box": [int, int, int, int],
                "bitmap": str,
                "accept_generated_label": bool,
            },
            ..., # 이미지 상의 생성된 결함 수만큼 반복
        ],
        "time": {
            "imread_time": float,
            "inference_time": float,
            "mask_inference_time": float,
            "defect_inference_time": float,
            "post_processing_time": float,
        }
        "save_dir":  # 입력으로 넣어주었던 해당 이미지의 generation 결과 저장 directory
    },
    ..., # 입력으로 넣어준 이미지 개수만큼 반복
}

update_generated_labels(images)

생성된 결함 중, 제외하고 싶은 결함 정보에 대한 업데이트 수행

Parameters:

Name Type Description Default
images Dict[str, Dict]

generation 결과를 유저가 수정한 내용. generated labels 만 업데이트

{
    "{image_id}": {
        "save_dir": str,  # 해당 이미지의 generation 결과 저장 directory
        "generated_labels": [
            {
                "class_index": int,
                "bounding_box": [int, int, int, int],
                "bitmap": str,
                "accept_generated_label": bool,  # 주요 업데이트 목표 변수. 해당 defect 를 사용할지 말지 결정.
            },
            ..., # 이미지 상의 생성된 결함 수만큼 반복
        ]
    },
    ..., # 입력으로 넣어준 이미지 개수만큼 반복
}

required

warmup()

현재 설정된 inference 옵션을 바탕으로 warmup을 수행합니다.