Inference
segmentation.InferenceHandler
학습한 Segmentation 모델을 사용하여 검사를 하기 위한 InferenceHandler class 입니다.
Usage
# 인퍼런스 모듈 빌드
inferene_build_config = {
"checkpoint_path": CHECKPOINT_PATH,
"password": PASSWORD,
"device": DEVICE,
}
error, inference_handler = InferenceHandler.build(inferene_build_config)
assert error >= 0
# 모듈 정보 확인
error, metadata = inference_handler.get_metadata()
assert error >= 0
print("Inference metadata:", metadata)
# 인퍼런스 옵션 초기값 확인
error, inference_options = inference_handler.get_default_inference_options()
assert error >= 0
print("Inference options:", inference_options)
# 디벨로퍼: Analyze 수행
error, _ = inference_handler.set_analysis_data(images=DATA["validation_images"], labeled=True)
assert error >= 0
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:", analysis_results)
# 디벨로퍼: 인퍼런스 옵션 변경
n_classes = CONFIG["n_classes"]
inference_options = {
"outputs": {
"mask": True,
"scoremap": True,
"objects": True,
},
"params": {
"score_threshold": [50] * n_classes,
"area_threshold": [10] * n_classes,
"wo_background": True,
},
}
error, _ = inference_handler.set_inference_options(inference_options)
assert error >= 0
# 인퍼런스 옵션이 잘 변경되었는지 확인
error, inference_options = inference_handler.get_inference_options()
assert error >= 0
print("Inference options:", inference_options)
# 디벨로퍼: 새로운 세팅으로 Analyze 재수행
error, analysis_results = inference_handler.analyze_with_existing_data()
assert error >= 0
print("Analysis results:", analysis_results)
# 디벨로퍼: 변경된 인퍼런스 옵션으로 체크포인트 다시 저장
error, _ = inference_handler.save_checkpoint(
checkpoint_path=CHECKPOINT_PATH,
password=PASSWORD,
)
assert error >= 0
# 런타임: 저장된 체크포인트로 핸들러 빌드
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)
build(config)
classmethod
InferenceHandler class의 instance를 생성합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
config |
Dict
|
InferenceHandler를 build 하기 위한 config가 담겨 있는 dictionary 입니다. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
InferenceHandler |
InferenceHandler
|
build가 완료된 segmentation.InferenceHandler class의 instance를 반환합니다. |
get_metadata()
Trainer.save_checkpoint에서 저장했던 metadata를 반환합니다.
Returns:
| Name | Type | Description |
|---|---|---|
Dict |
Dict
|
Trainer.save_checkpoint에서 저장했던 metadata 입니다. |
get_inference_options()
현재 설정된 inference & postprocess 옵션들을 dictionary 형태로 반환합니다.
Returns:
get_default_inference_options()
Inference & postprocess 옵션의 기본 설정 값들을 dictionary 형태로 반환합니다.
Returns:
| Name | Type | Description |
|---|---|---|
Dict |
Dict
|
Inference & postprocess 옵션의 기본 설정 값들이 들어있는 dictionary 입니다. |
set_inference_options(config)
Inference & postprocess 옵션을 설정합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
config |
Dict
|
설정하고자 하는 Inference & postprocess 옵션 정보가 들어있는 dictionary 입니다.
|
required |
Returns:
| Name | Type | Description |
|---|---|---|
None |
None
|
None |
infer_and_postprocess(images)
image의 List를 입력으로 받아 모델 인퍼런스와 후처리를 수행합니다. (for Runtime) 실시간 검사를 위해 연산 과정이 최적화되어 있으며, 중간 결과를 제거하고 postprocess 최종 결과만을 반환합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
images |
Union[List[np.ndarray], List[str]]
|
required |
Returns:
set_analysis_data(images, labeled)
Analysis를 위한 data를 세팅합니다. (for Developer)
Parameters:
Returns:
| Name | Type | Description |
|---|---|---|
None |
None
|
None |
Note1
Analysis를 위한 api는 정해진 순서대로 호출되어야 하며, 순서를 벗어나는 경우 에러를 raise합니다.
API호출 예시:
handler.set_analysis_data(images, labeled) # 데이터 지정
total_steps = handler.initialize_analysis() # 초기화
for _ in range(total_steps):
handler.step_analysis() # 정해진 수 만큼 스텝 수행
results = handler.finalize_analysis() # 마무리 & 결과 리턴
handler.set_inference_options(options) # 인퍼런스 옵션 변경
total_steps = handler.initialize_analysis() # 초기화
for _ in range(total_steps):
handler.step_analysis() # 정해진 수 만큼 스텝 수행
results = handler.finalize_analysis() # 마무리 & 결과 리턴
handler.set_inference_options(options) # 인퍼런스 옵션 변경
results = handler.analyze_with_existing_data() # 초기화 - 스텝 - 마무리를 한 번에 수행 후 결과 리턴
Note2
inference_options 세팅에 따라 analysis 결과 Dict 구성 요소가 달라집니다.
ex) inference_options outputs 중 mask: False 인 경우 pixel 관련 metric 값들이 제공되지 않습니다.
따라서 Analysis 도중 (initialize_analysis와 finalize_analysis 사이)에는 set_inference_options를 호출할 수 없습니다.
initialize_analysis()
Analysis를 위한 준비 스텝을 수행.
Returns:
| Name | Type | Description |
|---|---|---|
int |
int
|
Analysis 완료를 위해 수행되어야 하는 |
step_analysis()
Analysis를 1스텝 수행.
Returns:
| Name | Type | Description |
|---|---|---|
None |
None
|
None |
finalize_analysis()
Analysis를 마무리하고 결과를 리턴.
Returns:
analyze_with_existing_data()
기존에 세팅된 데이터를 이용해 전체 analysis를 루틴을 수행하고 최종 결과를 리턴.
Note
해당 함수는 아래 루틴을 호출하는 것과 동일함:
Returns:
| Name | Type | Description |
|---|---|---|
Dict |
Dict
|
Analysis 결과 ( |
save_checkpoint(checkpoint_path, password=None)
현재 inference option 상태를 체크포인트에 업데이트해 저장합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
checkpoint_path |
str
|
checkpoint를 저장할 path 입니다. |
required |
password |
Optional[str]
|
checkpoint 파일에서 중요한 정보를 암호화 하는데 사용되는 password 입니다. None이면 암호화하지 않습니다. Defaults to None. |
None
|
Returns:
| Name | Type | Description |
|---|---|---|
None |
None
|
None |