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를 반환합니다. |
Note
- "event_type_map"은 event_alarm 모듈에서 사용하는 event_type str과 api에서 사용하는 event_type str을 매핑하는 dictionary 입니다.
- 백엔드에서는 사용하지 않으며, 연구소 내부적으로 사용하는 빌드 파라미터입니다.
- "detection_checkpoint_path", "classification_checkpoint_path", "reidentification_checkpoint_path"는 각 모델의 체크포인트 경로를 설정합니다.
- None인 경우 해당 버전의 default 모델을 사용합니다.
- "detection"의 일부 인퍼런스 옵션이 기본으로 다음과 같이 세팅됩니다.
infer(images, camera_ids, timestamps)
현재 설정된 inference 옵션을 바탕으로 inference를 수행합니다. Args: images (list[np.ndarray]): inference를 수행할 이미지들의 list (shape: [H, W, C]) camera_ids (list[int]): images의 각 image에 대한 camera_id list timestamps (list[int]): images의 각 image에 대한 timestamp list (단위: 밀리초) Returns: list[dict]: 검사 결과
[
{
"detected_objects": [ # 검출된 object들에 대한 정보 리스트
{
"id": int, # object ID
"bounding_box": list[int], # object bounding box (x,y,w,h)
"object_class": str, # object의 class 이름. (Note 3 참고)
"object_score": int, # object의 det score. (범위: 0 ~ 100)
"classification_scores": {
"helmet": int, # helmet class의 score. (범위: 0 ~ 100)
"head": int, # head class의 score. (범위: 0 ~ 100)
"person": int, # person class의 score. (범위: 0 ~ 100)
"fire": int, # fire class의 score. (범위: 0 ~ 100)
"smoke": int, # smoke class의 score. (범위: 0 ~ 100)
"fall_down": int, # fall_down class의 score. (범위: 0 ~ 100)
"harness": int, # harness class의 score. (범위: 0 ~ 100)
},
"events": { # object에 발생한 event에 대한 딕셔너리.
"without_helmet": bool, # 헬멧 미착용 이벤트 (person object에 대해서만 해당)
"without_harness": bool, # 하네스 미착용 이벤트 (person object에 대해서만 해당)
"fallen_person": bool, # 쓰러짐 이벤트 (person object에 대해서만 해당)
"trespass_detect": bool, # 침입 감지 이벤트 (person object에 대해서만 해당)
"danger_detect": bool, # 배회 감지 이벤트 (person object에 대해서만 해당)
"collision_detect": bool, # 협착 감지 이벤트 (person object에 대해서만 해당)
"fire_detect": bool, # 화재 감지 이벤트 (fire object에 대해서만 해당)
"smoke_detect": bool, # 연기 감지 이벤트 (smoke object에 대해서만 해당)
},
"alarms": { # object에 발생한 각 event에 대해서 alarm 여부 딕셔너리.
"without_helmet": bool, # 헬멧 미착용 이벤트 (person object에 대해서만 해당)
"without_harness": bool, # 하네스 미착용 이벤트 (person object에 대해서만 해당)
"fallen_person": bool, # 쓰러짐 이벤트 (person object에 대해서만 해당)
"trespass_detect": bool, # 침입 감지 이벤트 (person object에 대해서만 해당)
"danger_detect": bool, # 배회 감지 이벤트 (person object에 대해서만 해당)
"collision_detect": bool, # 협착 감지 이벤트 (person object에 대해서만 해당)
"fire_detect": bool, # 화재 감지 이벤트 (fire object에 대해서만 해당)
"smoke_detect": bool, # 연기 감지 이벤트 (smoke object에 대해서만 해당)
}
}, ... # 각 image에서 검출된 object와 이에 대한 event, alarm 정보.
],
"time": { # inference에 소요된 시간을 담고있는 dictionary 입니다. (단위: 밀리초)
"detection_time": float, # detection에 소요된 시간
"classification_time": float, # classification에 소요된 시간
"classification_count": int, # classification이 수행된 횟수
"tracker_time": float, # person tracker에 소요된 시간
},
}, ... # 들어온 image 수 만큼 반복 (들어온 image 순서대로)
]
warmup()
현재 설정된 inference 옵션을 바탕으로 warmup을 수행합니다.
warmup은, 현재 inference_option이 잘 동작하는지 확인 + GPU를 첫 호출시 속도가 느린 이슈를 해결하기 위해,
현재 inference_option에 맞춰 더미 입력에 대한 InferenceHandler.infer를 호출합니다.
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)
}
```
model: safety
```python
{
"outputs.time": bool, # (default False, 인퍼런스 시 각 요소에 걸린 시간 측정 여부. True인 경우 측정)
}
사용 예시:
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과 동일합니다.
register_camera(camera_id)
검사할 camera_id를 등록합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
등록할 camera_id |
required |
Returns:
| Name | Type | Description |
|---|---|---|
None |
None
|
None |
Raises:
| Type | Description |
|---|---|
InvalidCameraIdError
|
camera_id가 int가 아닌 경우 발생하는 에러 |
AlreadyRegisteredCameraIdError
|
이미 등록된 camera_id를 등록하려고 할 때 발생하는 에러 |
release_camera(camera_id)
등록된 camera_id를 해제합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
해제할 camera_id |
required |
Returns:
| Name | Type | Description |
|---|---|---|
None |
None
|
None |
Raises:
| Type | Description |
|---|---|
UnregisteredCameraIdError
|
등록되지 않은 camera_id를 해제하려고 할 때 발생하는 에러 |
get_registered_camera_ids()
등록된 camera_id 리스트를 반환합니다.
Returns:
| Type | Description |
|---|---|
list[int]
|
list[int]: 등록된 camera_id 리스트 |
get_monitoring_area(camera_id)
등록된 camera_id에 대한 monitoring area를 반환합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
monitoring area를 반환할 camera_id |
required |
Returns:
| Type | Description |
|---|---|
dict[str, list[list[tuple[int, int]]]]
|
Optional[list[list[tuple[int, int]]]]: monitoring area polygon list |
Raises: UnregisteredCameraIdError: 등록되지 않은 camera_id에 대한 정보를 요청할 때 발생하는 에러
set_monitoring_area(camera_id, monitoring_area)
등록된 camera_id에 대한 monitoring area를 설정합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
monitoring area를 설정할 camera_id |
required |
monitoring_area |
dict[str, list[list[tuple[int, int]]]]
|
monitoring area polygon list
형태는 |
required |
Returns:
| Name | Type | Description |
|---|---|---|
None |
None
|
None |
Raises:
| Type | Description |
|---|---|
InvalidMonitoringAreaError
|
monitoring_area가 올바르지 않을 때 발생하는 에러 |
UnregisteredCameraIdError
|
등록되지 않은 camera_id에 대해 설정할 때 발생하는 에러 |
get_default_object_options(camera_id)
등록된 camera_id에 대한 default object options를 반환합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
default object options를 반환할 camera_id |
required |
Returns:
Raises:
| Type | Description |
|---|---|
UnregisteredCameraIdError
|
등록되지 않은 camera_id에 대한 정보를 요청할 때 발생하는 에러 |
get_object_options(camera_id)
등록된 camera_id에 대한 object options를 반환합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
object options를 반환할 camera_id |
required |
Returns:
| Type | Description |
|---|---|
dict[str, dict]
|
dict[str, dict[str, Any]]: object options. 형태는 |
Raises:
| Type | Description |
|---|---|
UnregisteredCameraIdError
|
등록되지 않은 camera_id에 대한 정보를 요청할 때 발생하는 에러 |
set_object_options(camera_id, object_options)
등록된 camera_id에 대한 object options를 설정합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
object options를 설정할 camera_id |
required |
object_options |
dict[str, dict]]
|
object options. 형태는 |
required |
Returns:
| Name | Type | Description |
|---|---|---|
None |
None
|
None |
Raises:
| Type | Description |
|---|---|
InvalidObjectOptionsError
|
object_options가 올바르지 않을 때 발생하는 에러 |
UnregisteredCameraIdError
|
등록되지 않은 camera_id에 대해 설정할 때 발생하는 에러 |
get_default_event_options(camera_id)
등록된 camera_id에 대한 default event options를 반환합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
default event options를 반환할 camera_id |
required |
Returns:
| Type | Description |
|---|---|
dict[str, dict]
|
dict[str, dict[str, Any]]: event options
|
get_event_options(camera_id)
등록된 camera_id에 대한 event options를 반환합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
event options를 반환할 camera_id |
required |
Returns:
| Type | Description |
|---|---|
dict[str, dict]
|
dict[str, dict[str, Any]]: event options. 형태는 |
Raises:
| Type | Description |
|---|---|
UnregisteredCameraIdError
|
등록되지 않은 camera_id에 대한 정보를 요청할 때 발생하는 에러 |
set_event_options(camera_id, event_options)
등록된 camera_id에 대한 event options를 설정합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
event options를 설정할 camera_id |
required |
event_options |
dict[str, dict]]
|
event options. 형태는 |
required |
Returns:
| Name | Type | Description |
|---|---|---|
None |
None
|
None |
Raises:
| Type | Description |
|---|---|
InvalidEventOptionsError
|
event_options가 올바르지 않을 때 발생하는 에러 |
UnregisteredCameraIdError
|
등록되지 않은 camera_id에 대해 설정할 때 발생하는 에러 |
get_default_alarm_options(camera_id)
등록된 camera_id에 대한 default alarm options를 반환합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
default alarm options를 반환할 camera_id |
required |
Returns:
Raises:
| Type | Description |
|---|---|
UnregisteredCameraIdError
|
등록되지 않은 camera_id에 대한 정보를 요청할 때 발생하는 에러 |
get_alarm_options(camera_id)
등록된 camera_id에 대한 alarm options를 반환합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
alarm options를 반환할 camera_id |
required |
Returns:
| Type | Description |
|---|---|
dict[str, dict]
|
dict[str, dict]: alarm options. 형태는 |
Raises:
| Type | Description |
|---|---|
UnregisteredCameraIdError
|
등록되지 않은 camera_id에 대한 정보를 요청할 때 발생하는 에러 |
set_alarm_options(camera_id, alarm_options)
등록된 camera_id에 대한 alarm options를 설정합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
alarm options를 설정할 camera_id |
required |
alarm_options |
dict[str, dict]]
|
alarm options. 형태는 |
required |
Returns:
| Name | Type | Description |
|---|---|---|
None |
None
|
None |
Raises:
| Type | Description |
|---|---|
InvalidAlarmOptionsError
|
alarm_options가 올바르지 않을 때 발생하는 에러 |
UnregisteredCameraIdError
|
등록되지 않은 camera_id에 대해 설정할 때 발생하는 에러 |
reset()
InferenceHandler의 상태를 초기화합니다.