Skip to content

Analysis

generation.Analyzer

딥러닝 모델 빌드 없이, 저장된 모델 인퍼런스 결과를 이용해서 generation을 수행하는 클래스입니다.

Usage
# Analyzer 빌드
error, message, analyzer = Analyzer.build()
assert error >= 0

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

# 인퍼런스 옵션 초기값 확인
inference_options = {
    NOTE: 현재 API에서 사용하지 않는 옵션입니다.
    # "image.n_blending_pixels": 4,
}
print("Default inference options:")
for key in inference_options:
    error, message, value = analyzer.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, message, results = analyzer.generate(images=images)
    assert error >= 0

    generated_results.update(results)

# 유저 interaction: 생성된 결함 중 임시적으로 제외하고 싶은 결함 제거 작업 수행
error, message, _ = analyzer.disable_label_and_generate(
    generated_results, label_ids={"0": [0]}, save_intermediate_file=False
)
assert error >= 0

# 유저 interaction: 생성된 결함 중 영구적으로 제거하고 싶은 결함 제거 작업 수행
error, message, _ = analyzer.disable_label_and_generate(
    generated_results, label_ids={"0": [0]}, save_intermediate_file=Fals
)
assert error >= 0

# 디벨로퍼: 인퍼런스 옵션 변경
for key, value in inference_options.items():
    error, message, _ = analyzer.set_inference_option(key, value)
    assert error >= 0

# 디벨로퍼: metadata에 inference_option 저장 (예시)
metadata["inference_options"] = inference_options
error, message, _ = write_metadata(CHECKPOINT_PATH, metadata)
assert error >= 0

# 인퍼런스 옵션이 잘 변경되었는지 확인
print("Inference options:")
for key in inference_options:
    error, message, value = analyzer.get_inference_option(key)
    assert error >= 0
    print(f"  {key}: {value}")

# 디벨로퍼: 새로운 세팅으로 Generate 재수행
# NOTE: ["mask.*"] 인퍼런스 옵션의 경우 디폴트 값을 설정하는 용도이기 때문에 입력 라벨에 옵션이 이미 존재한다면 해당 옵션이 우선적으로 사용됩니다.
for image_id, image_info in data.items():
    images = {image_id: image_info}

    error, message, results = analyzer.generate(images=images)
    assert error >= 0

build(config=None) classmethod

Inferencer class의 instance를 생성합니다.

Parameters:

Name Type Description Default
config Dict

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

{
    "inference_options": Optional[Dict], # 인퍼런스 옵션 config (default None). 구조는 `get_default_inference_option`의 Keys 참고.
}

None

Returns:

Name Type Description
Analyzer

build가 완료된 generation.Analyzer 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 목록:

{
    "image.n_blending_pixels": int,  # NOTE: 현재 API에서 사용하지 않는 옵션입니다. (default 2, 생성한 결함을 원본 이미지에 blending 시 사용할 pixel 개수)
}

사용 예시:

inferencer.get_default_inference_option(key="image.n_blending_pixels")
inferencer.set_inference_option(key="image.n_blending_pixels", value=4)

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)

images들에 대한 generation 수행

Parameters:

Name Type Description Default
images Dict[str, Dict]

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

{
    "{image_id}": {
        "save_dir": str,  # 해당 이미지의 generation 결과 저장 directory
        "save_idx": int,  # 해당 이미지의 generation 결과 저장 index
    },
    ...,  # times number of images
}

required

Returns:

Name Type Description
Dict Dict

Generation 결과

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

Note1

만약 ["mask.*"] 옵션이 변경되었을 경우 Inferencer.generate를 호출하여 모델 인퍼런스를 재수행해야 합니다.

delete_label_and_generate(images, label_ids, save_intermediate_file=True)

첫 생성 이후 특정 label을 삭제하고 나머지 라벨을 사용해 generation 재수행

입력 중 images 와 출력은 generate와 동일합니다.

Parameters:

Name Type Description Default
label_ids Dict[str, List[int]]

삭제할 label id 리스트

{
    "{image_id}": [label_id_0, label_id_1, ...],
    ...,  # times number of images
}

required
save_intermediate_file bool

중간 파일 저장 여부 (default True). True일 경우, 동일 위치의 기존 파일을 덮어씌움.

True

disable_label_and_generate(images, label_ids, save_intermediate_file=True)

첫 생성 이후 특정 label을 임시적으로 제외하고 나머지 라벨을 사용해 generation 재수행

입출력은 delete_label_and_generate와 동일합니다.