MediaPipe 이미지 분류기 태스크를 사용하면 이미지를 분류할 수 있습니다. 이 태스크를 사용하여 학습 시 정의된 카테고리 집합 중에서 이미지가 무엇을 나타내는지 식별할 수 있습니다. 이 태스크는 머신러닝 (ML) 모델을 정적 데이터 또는 연속 스트림으로 사용하는 이미지 데이터를 처리하고, 확률 점수를 내림차순으로 순위 지정한 잠재적 카테고리 목록을 출력합니다.
시작하기
대상 플랫폼에 관한 다음 구현 가이드 중 하나에 따라 이 작업을 시작합니다. 다음 플랫폼별 가이드에서는 권장 모델을 사용하여 이 작업의 기본 구현을 안내하고 권장 구성 옵션이 포함된 코드 예시를 제공합니다.
태스크 세부정보
이 섹션에서는 이 태스크의 기능, 입력, 출력, 구성 옵션을 설명합니다.
기능
- 입력 이미지 처리 - 처리에는 이미지 회전, 크기 조절, 정규화, 색상 공간 변환이 포함됩니다.
- 관심 영역 - 전체 이미지 대신 이미지의 특정 영역에서 분류를 실행합니다.
- 라벨 지도 언어: 표시 이름에 사용되는 언어를 설정합니다.
- 점수 기준점: 예측 점수를 기준으로 결과를 필터링합니다.
- Top-k 분류 - 분류 결과 수를 제한합니다.
- 라벨 허용 목록 및 거부 목록: 분류된 카테고리를 지정합니다.
태스크 입력 | 태스크 출력 |
---|---|
입력은 다음 데이터 유형 중 하나일 수 있습니다.
|
이미지 분류기는 다음을 포함하는 카테고리 목록을 출력합니다.
|
구성 옵션
이 태스크에는 다음과 같은 구성 옵션이 있습니다.
옵션 이름 | 설명 | 값 범위 | 기본값 |
---|---|---|---|
running_mode |
태스크의 실행 모드를 설정합니다. 모드는 세 가지입니다. IMAGE: 단일 이미지 입력의 모드입니다. 동영상: 동영상의 디코딩된 프레임 모드입니다. LIVE_STREAM: 카메라와 같은 입력 데이터의 라이브 스트림 모드입니다. 이 모드에서는 결과를 비동기식으로 수신할 리스너를 설정하려면 resultListener를 호출해야 합니다. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
display_names_locale |
가능한 경우 태스크 모델의 메타데이터에 제공된 표시 이름에 사용할 라벨의 언어를 설정합니다. 기본값은 영어의 경우 en 입니다. TensorFlow Lite Metadata Writer API를 사용하여 맞춤 모델의 메타데이터에 현지화된 라벨을 추가할 수 있습니다. |
언어 코드 | en |
max_results |
반환할 선택적 최대 점수의 분류 결과 수를 설정합니다. 0보다 작은 경우 사용 가능한 모든 결과가 반환됩니다. | 모든 양수 | -1 |
score_threshold |
모델 메타데이터에 제공된 값 (있는 경우)을 재정의하는 예측 점수 기준점을 설정합니다. 이 값 미만의 결과는 거부됩니다. | 모든 부동 소수점 수 | 설정되지 않음 |
category_allowlist |
허용되는 카테고리 이름의 선택적 목록을 설정합니다. 이 집합에 없는 카테고리 이름의 분류 결과가 필터링됩니다. 중복 또는 알 수 없는 카테고리 이름은 무시됩니다.
이 옵션은 category_denylist 와 상호 배타적이며 둘 다 사용하면 오류가 발생합니다. |
모든 문자열 | 설정되지 않음 |
category_denylist |
허용되지 않는 카테고리 이름의 선택적 목록을 설정합니다. 비어 있지 않으면 이 세트에 카테고리 이름이 있는 분류 결과가 필터링됩니다. 중복 또는 알 수 없는 카테고리 이름은 무시됩니다. 이 옵션은 category_allowlist 와 상호 배타적이며 둘 다 사용하면 오류가 발생합니다. |
모든 문자열 | 설정되지 않음 |
result_callback |
이미지 분류기가 라이브 스트림 모드일 때 분류 결과를 비동기식으로 수신하도록 결과 리스너를 설정합니다. 실행 모드가 LIVE_STREAM 로 설정된 경우에만 사용할 수 있습니다. |
해당 사항 없음 | 설정되지 않음 |
모델
이미지 분류기를 사용하려면 이미지 분류 모델을 다운로드하여 프로젝트 디렉터리에 저장해야 합니다. 이 작업으로 개발을 시작할 때는 타겟 플랫폼에 권장되는 기본 모델부터 시작하세요. 사용 가능한 다른 모델은 일반적으로 성능, 정확성, 해상도, 리소스 요구사항 간에 절충점을 찾으며 경우에 따라 추가 기능을 포함합니다.
EfficientNet-Lite0 모델 (권장)
EfficientNet-Lite0 모델은 EfficientNet 아키텍처를 사용하며 ImageNet을 사용하여 나무, 동물, 음식, 차량, 사람 등 1,000개의 클래스를 인식하도록 학습되었습니다. 지원되는 라벨의 전체 목록을 참고하세요. EfficientNet-Lite0은 int8 및 부동 소수점 32 모델로 사용할 수 있습니다. 이 모델은 지연 시간과 정확성 간의 균형을 맞추므로 권장됩니다. 많은 사용 사례에 적합할 만큼 정확하고 가볍습니다.
모델 이름 | 입력 셰이프 | 양자화 유형 | 버전 |
---|---|---|---|
EfficientNet-Lite0 (int8) | 224 x 224 | int8 | 최신 |
EfficientNet-Lite0 (float 32) | 224 x 224 | None (float32) | 최신 |
EfficientNet-Lite2 모델
EfficientNet-Lite2 모델은 EfficientNet 아키텍처를 사용하며 ImageNet을 사용하여 나무, 동물, 음식, 차량, 사람 등 1,000개의 클래스를 인식하도록 학습되었습니다. 지원되는 라벨의 전체 목록을 참고하세요. EfficientNet-Lite2는 int8 및 부동 소수점 32 모델로 사용할 수 있습니다. 이 모델은 일반적으로 EfficientNet-Lite0보다 정확하지만 속도가 느리고 메모리를 더 많이 사용합니다. 이 모델은 속도나 크기보다 정확성이 더 중요한 사용 사례에 적합합니다.
모델 이름 | 입력 셰이프 | 양자화 유형 | 버전 |
---|---|---|---|
EfficientNet-Lite2 (int8) | 224 x 224 | int8 | 최신 |
EfficientNet-Lite2 (float 32) | 224 x 224 | None (float32) | 최신 |
작업 벤치마크
다음은 위의 사전 학습된 모델을 기반으로 한 전체 파이프라인의 태스크 벤치마크입니다. 지연 시간 결과는 CPU / GPU를 사용하는 Pixel 6의 평균 지연 시간입니다.
모델 이름 | CPU 지연 시간 | GPU 지연 시간 |
---|---|---|
EfficientNet-Lite0 (float 32) | 23.52ms | 18.90ms |
EfficientNet-Lite0 (int8) | 10.08ms | - |
EfficientNet-Lite2 (float 32) | 44.17ms | 22.20ms |
EfficientNet-Lite2 (int8) | 19.43ms | - |
커스텀 모델
제공된 모델의 기능을 개선하거나 변경하려는 경우 이 태스크에서 맞춤설정된 ML 모델을 사용할 수 있습니다. Model Maker를 사용하여 기존 모델을 수정하거나 TensorFlow와 같은 도구를 사용하여 모델을 빌드할 수 있습니다. MediaPipe에서 사용하는 맞춤 모델은 TensorFlow Lite 형식이어야 하며 모델의 작동 매개변수를 설명하는 특정 metadata를 포함해야 합니다. 직접 모델을 빌드하기 전에 Model Maker를 사용하여 이 작업에 제공된 모델을 수정하는 것이 좋습니다.
자체 데이터 세트를 사용하여 맞춤 이미지 분류기를 만들고 싶다면 이미지 분류기 맞춤설정 튜토리얼부터 시작하세요.