Inference
safety.InferenceHandler
학습한 Object Detection/ Classification 모델을 사용하여 검사를 하기 위한 InferenceHandler class 입니다.
Usage
demo/inference.py 참고
build(config)
classmethod
InferenceHandler class의 instance를 생성합니다.
Parameters:
Returns:
| Name | Type | Description |
|---|---|---|
InferenceHandler |
build가 완료된 safety.InferenceHandler class의 instance를 반환합니다. |
infer_and_postprocess(images, timestamp, data_buffer=None)
현재 설정된 inference 옵션을 바탕으로 inference를 수행합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
images |
List[np.ndarray]
|
inference를 수행할 이미지들의 list |
required |
timestamp |
float
|
ms를 포함한 timestamp e.g.) 1693529787.934439 |
required |
data_buffer |
Optional[dict]
|
Tracker를 위해 전 frame의 detection 결과와 해당 동영상의 id list 정보를 담은 buffer (default None) |
None
|
Returns:
Usage
# helmet을 착용한 person인 경우
predictions = {
"bounding_box": [18, 353, 18, 55],
"class_index": 0,
"score": 82,
"id": 0,
"alarm_type": None,
"classification": {
"helmet": 0.98,
"head": 1.0,
"person": 0.99,
"fire": 0.0,
"smoke": 0.0,
},
}
# helmet을 착용하지 않은 person인 경우
predictions = {
"bounding_box": [18, 353, 18, 55],
"class_index": 0,
"score": 82,
"id": 0,
"alarm_type": "no_helmet",
"classification": {
"helmet": 0.02,
"head": 1.0,
"person": 0.99,
"fire": 0.0,
"smoke": 0.0,
},
}
# fire가 detection된 경우
predictions = {
"bounding_box": [18, 353, 18, 55],
"class_index": 2,
"score": 82,
"id": 0,
"alarm_type": "fire",
"classification": {
"helmet": 0.02,
"head": 0.0,
"person": 0.0,
"fire": 0.99,
"smoke": 0.0,
},
}
warmup()
현재 설정된 inference 옵션을 바탕으로 warmup을 수행합니다.
warmup은, 현재 inference_option이 잘 동작하는지 확인 + GPU를 첫 호출시 속도가 느린 이슈를 해결하기 위해,
현재 inference_option에 맞춰 더미 입력에 대한 InferenceHandler.infer_and_postprocess를 호출합니다.
get_default_inference_option(model, key)
Model별 Postprocess 옵션의 기본 설정 값을 반환합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
model |
str
|
"classification", "detection", 또는 "safety" |
required |
key |
str
|
옵션 key |
required |
Returns:
| Name | Type | Description |
|---|---|---|
Any |
Any
|
옵션 value |
Keys
사용 가능한 key와 value 목록: model: detection
{
"outputs.time": bool, # (default False, 인퍼런스 시 각 요소에 걸린 시간 측정 여부. True인 경우 측정)
"params.object_score_threshold": List[int], # 각 클래스의 score threshold 값. 예측 box의 score가 threshold보다 작은 경우 필터링 됩니다.
# 각 값은 [0, 100] 범위의 정수. (default [30, ... , 30])
"params.object_area_threshold": List[int], # 각 클래스의 area threshold 값. 예측 box의 면적이 threshold보다 작은 경우 필터링 됩니다.
# 각 값은 0 이상의 정수. (default [0, ... , 0])
"params.max_num_of_detected_objects": List[int], # 각 클래스의 최대 예측 박스 개수. 예측 box의 개수가 이 값을 넘을 경우 score가 낮은 순으로 제거됩니다.
# 각 값은 -1 이상의 정수이며, 값이 -1인 경우 개수 필터링을 적용하지 않습니다. (default [-1, ... , -1])
}
{
"outputs.class_activation_map": bool, # (default True, output 중 class_activation_map 계산할 지 여부. True인 경우 계산)
"outputs.time": bool, # (default False, 인퍼런스 시 각 요소에 걸린 시간 측정 여부. True인 경우 측정)
"params.additional_scores": List[Union[int, float]], # scores_including_add를 계산할 때, scores_original에 더해지는 값입니다. 각 값은 [0, 100] 범위의 실수. (default [0.0, ... , 0.0])
"params.batch_size": int, # `infer_and_postprocess`에 한 번에 입력할 수 있는 최대 이미지 개수 입니다.
# 파라미터가 변경되는 경우 해당 값으로 warmup을 수행합니다.
# (default 1)
}
사용 예시:
get_inference_option(model, key)
Model에 따른 현재 설정된 postprocess 옵션 값을 읽습니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
model |
str
|
"classification", "detection", 또는 "safety" |
required |
key |
str
|
옵션 key |
required |
Returns:
| Name | Type | Description |
|---|---|---|
Any |
Any
|
옵션 value |
Keys
get_default_inference_option과 동일합니다.
set_inference_option(model, key, value)
Model에 따른 Postprocess 옵션을 설정합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
model |
str
|
"classification", "detection", 또는 "safety" |
required |
key |
str
|
설정하고자 하는 옵션 key 입니다. |
required |
value |
Any
|
설정하고자 하는 옵션 value 입니다. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
None |
None
|
None |
Keys
get_default_inference_option과 동일합니다.