Analysis
classification.AnalysisHandler
딥러닝 모델 빌드 없이, 저장된 모델 인퍼런스 결과를 이용해서 analysis를 수행하는 클래스입니다.
Usage
# AnalysisHandler 및 SummaryHandler 빌드
n_classes = CONFIG["n_classes"]
analysis_build_config = {
"n_classes": n_classes,
}
error, analysis_handler = AnalysisHandler.build(analysis_build_config)
assert error >= 0
summary_build_config = {
"n_classes": n_classes,
}
error, summary_handler = SummaryHandler.build(summary_build_config)
assert error >= 0
# 모듈 정보 확인
error, metadata = read_metadata(CHECKPOINT_PATH)
assert error >= 0
print("Inference metadata:", metadata)
# 인퍼런스 옵션 초기값 확인
inference_options = {
"params.additional_scores": [10] * n_classes,
}
print("Default inference options:")
for key in list(inference_options):
error, value = analysis_handler.get_default_inference_option(key)
assert error >= 0
print(f" {key}: {value}")
# 디벨로퍼: Analyze 수행
for image_id, image_info in DATA["validation_images"].items():
image_info["save_dir"] = os.path.join("./demo/inference_results", str(image_id))
image = {image_id: image_info}
error, results = analysis_handler.analyze(images=image, labeled=True)
assert error >= 0
error, results = summary_handler.summarize_analysis(images=DATA["validation_images"], labeled=True)
assert error >= 0
print("Analysis summary:", results)
# 디벨로퍼: 인퍼런스 옵션 변경
for key, value in inference_options.items():
error, _ = analysis_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 = analysis_handler.get_inference_option(key)
assert error >= 0
print(f" {key}: {value}")
# 디벨로퍼: 새로운 세팅으로 Analyze 재수행
for image_id, image_info in DATA["validation_images"].items():
image = {image_id: image_info}
error, results = analysis_handler.analyze(images=image, labeled=True)
assert error >= 0
error, results = summary_handler.summarize_analysis(images=DATA["validation_images"], labeled=True)
assert error >= 0
print("Analysis summary:", results)
build(config)
classmethod
AnalysisHandler class의 instance를 생성합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
config |
Dict
|
required |
Returns:
| Name | Type | Description |
|---|---|---|
AnalysisHandler |
AnalysisHandler
|
build가 완료된 classification.AnalysisHandler class의 instance를 반환합니다. |
get_default_inference_option(key)
Postprocess 옵션의 기본 설정 값을 반환합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
key |
str
|
옵션 key |
required |
Returns:
| Name | Type | Description |
|---|---|---|
Any |
Any
|
옵션 value |
Keys
사용 가능한 key와 value 목록:
{
"params.additional_scores": List[Union[int, float]], # scores_including_add를 계산할 때, scores_original에 더해지는 값입니다. 각 값은 [0, 100] 범위의 실수. (default [0.0, ... , 0.0])
}
사용 예시:
Note
AnalysisHandler는 outputs.time을 제공하지 않습니다. (리턴에 time 없음)
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과 동일합니다.
Note1
AnalysisHandler에는 params.batch_size와 outputs.time 파라미터가 없습니다.
analyze(images, labeled)
저장된 network output으로 부터 images들에 대한 analysis 결과 계산
Parameters:
Returns: Dict: Analysis 결과
{
"{image_id}": {
"predictions": { # 아래 키들 중 inference_options에 설정된 출력 값들만 포함.
"scores_original": ndarray(float32, shape=(N)), # 모델이 예측한 점수입니다. 점수가 높을수록 해당 클래스일 확률이 높다는 뜻입니다.
"scores_including_add": ndarray(float32, shape=(N)), # scores_original에 user가 설정한 additional_scores를 더한 값입니다.
"class_index": int, # 최종 선택된 class index 입니다. scores_including_add 값 중 가장 높은 점수를 가지는 class 입니다.
"correct": bool, # True면 정답, False면 오답. **(labeled=True)인 경우에만 나옴**
},
},
... # 입력으로 넣어준 이미지 개수만큼 반복
}
Note1
analyze() 함수를 사용하기 위해서는 inference_options 중 outputs.class_index=True 여야 합니다.
Note2
class_activation_map을 얻어야하는 등, 모델 인퍼런스부터 다시해야하는 경우에는, InferenceHandler.analyze를 호출해야 합니다.