객체 감지 태스크 가이드

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 모델은 입력 크기가 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밀리초