MediaPipe 객체 감지기 태스크를 사용하면 이미지 또는 동영상 내에서 여러 객체 클래스의 존재와 위치를 감지할 수 있습니다. 예를 들어 객체 감지기는 이미지에서 개를 찾을 수 있습니다. 이 작업은 머신러닝 (ML) 모델을 사용하여 이미지 데이터에서 정적 데이터 또는 연속 동영상 스트림을 입력으로 허용하고 감지 결과 목록을 출력합니다. 각 감지 결과는 이미지 또는 동영상 내에 표시되는 객체를 나타냅니다.
시작하기
작업 중인 플랫폼에 대한 다음 구현 가이드 중 하나에 따라 이 작업을 사용하세요.
이러한 플랫폼별 가이드에서는 권장 모델 및 권장 구성 옵션이 있는 코드 예를 포함하여 이 작업의 기본 구현을 설명합니다.
태스크 세부정보
이 섹션에서는 이 작업의 기능, 입력, 출력을 설명합니다.
기능
- 입력 이미지 처리 - 처리에는 이미지 회전, 크기 조절, 정규화, 색 공간 변환이 포함됩니다.
- 라벨 지도 언어 - 표시 이름에 사용되는 언어를 설정합니다.
- 점수 임곗값 - 예측 점수를 기준으로 결과를 필터링합니다.
- Top-k 감지 - 숫자 감지 결과를 필터링합니다.
- 라벨 허용 목록 및 차단 목록 - 감지된 카테고리를 지정합니다.
작업 입력 | 작업 출력 |
---|---|
Object Detector API는 다음 데이터 유형 중 하나의 입력을 허용합니다.
|
Object Detector API는 감지된 객체에 대해 다음 결과를 출력합니다.
|
구성 옵션
이 태스크에는 다음과 같은 구성 옵션이 있습니다.
옵션 이름 | 설명 | 값 범위 | 기본값 |
---|---|---|---|
running_mode |
작업의 실행 모드를 설정합니다. 모드는 세 가지가 있습니다. IMAGE: 단일 이미지 입력 모드입니다. VIDEO: 동영상의 디코딩된 프레임에 대한 모드입니다. LIVE_STREAM: 카메라에서 전송하는 것과 같은 입력 데이터의 실시간 스트림 모드입니다. 이 모드에서는 resultListener를 호출하여 비동기식으로 결과를 수신하도록 리스너를 설정해야 합니다. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
display_names |
가능한 경우 태스크 모델의 메타데이터에 제공되는 표시 이름에 사용할 라벨 언어를 설정합니다. 기본값은 영어의 경우 en 입니다. TensorFlow Lite Metadata Writer API를 사용하여 커스텀 모델의 메타데이터에 현지화된 라벨을 추가할 수 있습니다.
|
언어 코드 | 한국어 |
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 | 없음 (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 (float 16) | 448 x 448 | 부동 소수점 16 | 최신 |
EfficientDet-Lite2 (float 32) | 448 x 448 | 없음 (float32) | 최신 |
SSD MobileNetV2 모델
SSD MobileNetV2 모델은 입력 크기가 256x256인 MobileNetV2 백본과 SSD 기능 네트워크를 사용합니다. 이 모델은 150만 개의 객체 인스턴스와 80개의 객체 라벨을 포함하는 대규모 객체 감지 데이터 세트인 COCO 데이터 세트로 학습되었습니다. 지원되는 라벨의 전체 목록을 참조하세요. SSD MobileNetV2는 int8 및 float 32 모델로 제공됩니다. 이 모델은 EfficientDet-Lite0보다 빠르고 가볍지만 대체로 정확성이 떨어집니다. 이 모델은 정확성이 다소 떨어지는 빠르고 가벼운 모델이 필요한 사용 사례에 적합합니다.
모델 이름 | 입력 형태 | 양자화 유형 | 버전 |
---|---|---|---|
SSDMobileNet-V2 (int8) | 256x256 | int8 | 최신 |
SSDMobileNet-V2 (float 32) | 256x256 | 없음 (float32) | 최신 |
모델 요구사항 및 메타데이터
이 섹션에서는 이 작업에 사용할 모델을 빌드하기로 결정한 경우 커스텀 모델의 요구사항을 설명합니다. 커스텀 모델은 TensorFlow Lite 형식이어야 하며 모델의 작동 매개변수를 기술하는 메타데이터를 포함해야 합니다.
설계 요구사항
입력 | 모양 | 설명 |
---|---|---|
입력 이미지 | 셰이프[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.30밀리초 | 27.83밀리초 |
EfficientDet-Lite0 float16 모델 | 53.97밀리초 | 27.97밀리초 |
EfficientDet-Lite0 int8 모델 | 29.31밀리초 | - |
EfficientDet-Lite2 float32 모델 | 197.98밀리초 | 41.15밀리초 |
EfficientDet-Lite2 float16 모델 | 198.77밀리초 | 47.31밀리초 |
EfficientDet-Lite2 int8 모델 | 70.91밀리초 | - |
SSD MobileNetV2 float32 모델 | 36.30밀리초 | 24.01밀리초 |
SSD MobileNetV2 float16 모델 | 37.35밀리초 | 28.16밀리초 |