MediaPipe 객체 감지기 태스크를 사용하면 이미지 또는 동영상 내에서 여러 객체 클래스의 존재와 위치를 감지할 수 있습니다. 예를 들어 객체 감지기는 이미지에서 개를 찾을 수 있습니다. 이 태스크는 머신러닝 (ML) 모델을 사용하여 이미지 데이터를 처리하고 정적 데이터 또는 연속 동영상 스트림을 입력으로 받아들여 감지 결과 목록을 출력합니다. 각 감지 결과는 이미지 또는 동영상 내에 표시되는 객체를 나타냅니다.
시작하기
사용 중인 플랫폼에 관한 다음 구현 가이드 중 하나에 따라 이 작업을 시작하세요.
이 플랫폼별 가이드에서는 권장 모델, 권장 구성 옵션이 포함된 코드 예시 등 이 작업의 기본 구현을 안내합니다.
태스크 세부정보
이 섹션에서는 이 태스크의 기능, 입력, 출력을 설명합니다.
기능
- 입력 이미지 처리 - 처리에는 이미지 회전, 크기 조절, 정규화, 색상 공간 변환이 포함됩니다.
- 라벨 지도 언어 - 표시 이름에 사용되는 언어를 설정합니다.
- 점수 기준점: 예측 점수를 기준으로 결과를 필터링합니다.
- 상위 k개 감지: 숫자 감지 결과를 필터링합니다.
- 라벨 허용 목록 및 거부 목록 - 감지된 카테고리를 지정합니다.
태스크 입력 | 태스크 출력 |
---|---|
Object Detector API는 다음 데이터 유형 중 하나의 입력을 허용합니다.
|
Object Detector API는 감지된 객체에 대해 다음과 같은 결과를 출력합니다.
|
구성 옵션
이 태스크에는 다음과 같은 구성 옵션이 있습니다.
옵션 이름 | 설명 | 값 범위 | 기본값 |
---|---|---|---|
running_mode |
태스크의 실행 모드를 설정합니다. 모드는 세 가지입니다. IMAGE: 단일 이미지 입력의 모드입니다. 동영상: 동영상의 디코딩된 프레임 모드입니다. LIVE_STREAM: 카메라와 같은 입력 데이터의 라이브 스트림 모드입니다. 이 모드에서는 결과를 비동기식으로 수신할 리스너를 설정하려면 resultListener를 호출해야 합니다. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
display_names |
가능한 경우 태스크 모델의 메타데이터에 제공된 표시 이름에 사용할 라벨의 언어를 설정합니다. 기본값은 영어의 경우 en 입니다. TensorFlow Lite Metadata Writer API를 사용하여 맞춤 모델의 메타데이터에 현지화된 라벨을 추가할 수 있습니다.
|
언어 코드 | en |
max_results |
반환할 선택적 최대 점수의 감지 결과 수를 설정합니다. | 모든 양수 | -1 (모든 결과가 반환됨) |
score_threshold |
모델 메타데이터에 제공된 값 (있는 경우)을 재정의하는 예측 점수 기준점을 설정합니다. 이 값 미만의 결과는 거부됩니다. | 모든 부동 소수점 수 | 설정되지 않음 |
category_allowlist |
허용되는 카테고리 이름의 선택적 목록을 설정합니다. 비어 있지 않으면 이 세트에 카테고리 이름이 없는 감지 결과가 필터링됩니다. 중복 또는 알 수 없는 카테고리 이름은 무시됩니다.
이 옵션은 category_denylist 와 상호 배타적이며 둘 다 사용하면 오류가 발생합니다. |
모든 문자열 | 설정되지 않음 |
category_denylist |
허용되지 않는 카테고리 이름의 선택적 목록을 설정합니다. 비어 있지 않으면 이 세트에 카테고리 이름이 있는 감지 결과가 필터링됩니다. 중복 또는 알 수 없는 카테고리 이름은 무시됩니다. 이 옵션은 category_allowlist 와 상호 배타적이며 둘 다 사용하면 오류가 발생합니다. |
모든 문자열 | 설정되지 않음 |
모델
Object Detector API를 사용하려면 객체 감지 모델을 다운로드하여 프로젝트 디렉터리에 저장해야 합니다. 아직 모델이 없다면 기본 권장 모델로 시작합니다. 이 섹션에 표시된 다른 모델은 지연 시간과 정확성 간에 절충합니다.
EfficientDet-Lite0 모델 (권장)
EfficientDet-Lite0 모델은 320x320 입력 크기와 BiFPN 기능 네트워크가 있는 EfficientNet-Lite0 백본을 사용합니다. 이 모델은 150만 개의 객체 인스턴스와 80개의 객체 라벨이 포함된 대규모 객체 감지 데이터 세트인 COCO 데이터 세트로 학습되었습니다. 지원되는 라벨의 전체 목록을 참고하세요. EfficientDet-Lite0은 int8, float16, float32로 사용할 수 있습니다. 이 모델은 지연 시간과 정확성 간의 균형을 맞추므로 권장됩니다. 많은 사용 사례에 적합할 만큼 정확하고 가볍습니다.
모델 이름 | 입력 셰이프 | 양자화 유형 | 버전 |
---|---|---|---|
EfficientDet-Lite0 (int8) | 320 x 320 | int8 | 최신 |
EfficientDet-Lite0 (float 16) | 320 x 320 | 부동 소수점 수 16 | 최신 |
EfficientDet-Lite0 (float 32) | 320 x 320 | None (float32) | 최신 |
EfficientDet-Lite2 모델
EfficientDet-Lite2 모델은 448x448 입력 크기 및 BiFPN 기능 네트워크가 있는 EfficientNet-Lite2 백본을 사용합니다. 이 모델은 150만 개의 객체 인스턴스와 80개의 객체 라벨이 포함된 대규모 객체 감지 데이터 세트인 COCO 데이터 세트로 학습되었습니다. 지원되는 라벨의 전체 목록을 참고하세요. EfficientDet-Lite2는 int8, float16 또는 float32 모델로 사용할 수 있습니다. 이 모델은 일반적으로 EfficientDet-Lite0보다 정확하지만 속도가 느리고 메모리를 더 많이 사용합니다. 이 모델은 속도와 크기보다 정확성이 더 중요한 사용 사례에 적합합니다.
모델 이름 | 입력 셰이프 | 양자화 유형 | 버전 |
---|---|---|---|
EfficientDet-Lite2 (int8) | 448 x 448 | int8 | 최신 |
EfficientDet-Lite2 (부동 소수점 16) | 448 x 448 | 부동 소수점 수 16 | 최신 |
EfficientDet-Lite2 (float 32) | 448 x 448 | None (float32) | 최신 |
SSD MobileNetV2 모델
SSD MobileNetV2 모델은 256x256 입력 크기와 SSD 기능 네트워크가 있는 MobileNetV2 백본을 사용합니다. 이 모델은 150만 개의 객체 인스턴스와 80개의 객체 라벨이 포함된 대규모 객체 감지 데이터 세트인 COCO 데이터 세트로 학습되었습니다. 지원되는 라벨의 전체 목록을 참고하세요. SSD MobileNetV2는 int8 및 부동 소수점 32 모델로 사용할 수 있습니다. 이 모델은 EfficientDet-Lite0보다 빠르고 가볍지만 일반적으로 정확도가 떨어집니다. 이 모델은 약간의 정확성을 희생하는 빠르고 가벼운 모델이 필요한 사용 사례에 적합합니다.
모델 이름 | 입력 셰이프 | 양자화 유형 | 버전 |
---|---|---|---|
SSDMobileNet-V2 (int8) | 256x256 | int8 | 최신 |
SSDMobileNet-V2 (부동 소수점 32) | 256x256 | None (float32) | 최신 |
모델 요구사항 및 메타데이터
이 섹션에서는 이 태스크에 사용할 모델을 빌드하려는 경우 커스텀 모델의 요구사항을 설명합니다. 맞춤 모델은 TensorFlow Lite 형식이어야 하며 모델의 작동 매개변수를 설명하는 metadata를 포함해야 합니다.
설계 요구사항
입력 | 도형 | 설명 |
---|---|---|
입력 이미지 | [1, 높이, 너비, 3] 모양의 Float32 텐서 | 정규화된 입력 이미지입니다. |
출력 | 도형 | 설명 |
---|---|---|
detection_boxes |
[1, num_boxes, 4] 형식의 Float32 텐서 | 감지된 각 객체의 상자 위치입니다. |
detection_classes |
[1, num_boxes] 형식의 Float32 텐서 | 감지된 각 객체의 클래스 이름 색인입니다. |
detection_scores |
[1, num_boxes] 형식의 float32 텐서 | 감지된 각 객체의 예측 점수입니다. |
num_boxes |
크기가 1인 Float32 텐서 | 감지된 상자의 수입니다. |
메타데이터 요구사항
매개변수 | 설명 | 설명 |
---|---|---|
input_norm_mean |
입력 텐서 정규화에 사용되는 평균 값입니다. | 정규화된 입력 이미지입니다. |
input_norm_std |
입력 텐서 정규화에 사용되는 필드 노름입니다. | 감지된 각 객체의 상자 위치입니다. |
label_file_paths |
카테고리 텐서 라벨 파일의 경로입니다. 모델에 라벨 파일이 없는 경우 빈 목록을 전달합니다. | 감지된 각 객체의 클래스 이름 색인입니다. |
score_calibration_md |
분류 텐서의 점수 보정 작업에 관한 정보입니다. 모델에서 점수 보정을 사용하지 않는 경우에는 이 매개변수가 필요하지 않습니다. |
감지된 각 객체의 예측 점수입니다. |
num_boxes |
크기가 1인 Float32 텐서 | 감지된 상자의 수입니다. |
작업 벤치마크
다음은 위의 사전 학습된 모델의 태스크 벤치마크입니다. 지연 시간 결과는 CPU / GPU를 사용하는 Pixel 6의 평균 지연 시간입니다.
모델 이름 | CPU 지연 시간 | GPU 지연 시간 |
---|---|---|
EfficientDet-Lite0 float32 모델 | 61.30ms | 27.83ms |
EfficientDet-Lite0 float16 모델 | 53.97ms | 27.97ms |
EfficientDet-Lite0 int8 모델 | 29.31ms | - |
EfficientDet-Lite2 float32 모델 | 197.98ms | 41.15ms |
EfficientDet-Lite2 float16 모델 | 198.77ms | 47.31ms |
EfficientDet-Lite2 int8 모델 | 70.91ms | - |
SSD MobileNetV2 float32 모델 | 36.30ms | 24.01ms |
SSD MobileNetV2 float16 모델 | 37.35ms | 28.16ms |