객체 감지 태스크 가이드

올바르게 라벨이 지정된 경계 상자로 강조 표시된 고양이와 개

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 모델은 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