물체 감지

이미지 또는 비디오 스트림이 주어지면 객체 감지 모델은 알려진 객체 집합 중 어떤 객체가 존재할 수 있는지 식별하고 이미지 내 객체 위치에 대한 정보를 제공할 수 있습니다.

예를 들어, 예제 애플리케이션 의 다음 스크린샷은 두 객체가 어떻게 인식되고 해당 위치에 주석이 추가되는지 보여줍니다.

Android 예시의 스크린샷

시작하다

모바일 앱에서 객체 감지를 사용하는 방법을 알아보려면 예제 애플리케이션 및 가이드를 살펴보세요.

Android 또는 iOS 이외의 플랫폼을 사용 중이거나 TensorFlow Lite API 에 이미 익숙하다면 스타터 객체 감지 모델 및 관련 라벨을 다운로드할 수 있습니다.

메타데이터가 포함된 시작 모델 다운로드

메타데이터 및 관련 필드(예: labels.txt )에 대한 자세한 내용은 모델에서 메타데이터 읽기를 참조하세요.

자신의 작업에 맞게 사용자 지정 감지 모델을 훈련하려면 모델 사용자 지정 을 참조하세요.

다음 사용 사례의 경우 다른 유형의 모델을 사용해야 합니다.

  • 이미지가 어떤 단일 레이블을 나타낼 가능성이 가장 높은지 예측( 이미지 분류 참조)
  • 피사체와 배경 등 이미지의 구성 예측( 분할 참조)

예제 애플리케이션 및 가이드

TensorFlow Lite를 처음 사용하고 Android 또는 iOS로 작업하는 경우 시작하는 데 도움이 될 수 있는 다음 예제 애플리케이션을 살펴보는 것이 좋습니다.

기계적 인조 인간

TensorFlow Lite 작업 라이브러리 의 기본 API를 활용하여 단 몇 줄의 코드로 객체 감지 모델을 통합할 수 있습니다. TensorFlow Lite Interpreter Java API를 사용하여 고유한 사용자 정의 추론 파이프라인을 구축할 수도 있습니다.

아래 Android 예제에서는 각각 작업 라이브러리인터프리터 API를 사용하여 두 메서드를 모두 구현하는 방법을 보여줍니다.

Android 예시 보기

iOS

TensorFlow Lite Interpreter Swift API를 사용하여 모델을 통합할 수 있습니다. 아래 iOS 예를 참조하세요.

iOS 예시 보기

모델 설명

이 섹션에서는 TensorFlow 객체 감지 API 에서 TensorFlow Lite로 변환된 Single-Shot Detector 모델의 서명을 설명합니다.

객체 감지 모델은 여러 클래스의 객체 존재 여부와 위치를 감지하도록 학습되었습니다. 예를 들어, 모델은 다양한 과일 조각이 포함된 이미지와 함께 해당 과일이 나타내는 과일의 종류(예: 사과, 바나나 또는 딸기)를 지정하는 레이블 및 각 개체가 표시되는 위치를 지정하는 데이터로 학습될 수 있습니다. 이미지.

이후 모델에 이미지가 제공되면 감지한 객체 목록, 각 객체가 포함된 경계 상자의 위치, 감지가 정확했다는 신뢰도를 나타내는 점수가 출력됩니다.

서명 입력

모델은 이미지를 입력으로 사용합니다.

예상 이미지가 300x300픽셀이고 픽셀당 3개의 채널(빨간색, 파란색, 녹색)이 있다고 가정합니다. 이는 270,000바이트 값(300x300x3)의 평면화된 버퍼로 모델에 제공되어야 합니다. 모델이 양자화 되는 경우 각 값은 0에서 255 사이의 값을 나타내는 단일 바이트여야 합니다.

Android에서 이러한 사전 처리를 수행하는 방법을 이해하려면 예제 앱 코드를 살펴보세요.

출력 서명

모델은 인덱스 0-4에 매핑된 4개의 배열을 출력합니다. 배열 0, 1, 2는 N 개의 감지된 개체를 설명하며, 각 배열의 요소는 각 개체에 해당합니다.

색인 이름 설명
0 위치 0과 1 사이의 [N][4] 부동 소수점 값의 다차원 배열, 내부 배열은 [위, 왼쪽, 아래, 오른쪽] 형식의 경계 상자를 나타냅니다.
1 클래스 각각 레이블 파일의 클래스 레이블 인덱스를 나타내는 N 정수 배열(부동 소수점 값으로 출력)
2 점수 클래스가 감지될 확률을 나타내는 0과 1 사이의 N 부동 소수점 값 배열
탐지 수 N의 정수값

예를 들어 사과, 바나나, 딸기를 감지하도록 모델을 훈련했다고 가정해 보겠습니다. 이미지가 제공되면 설정된 수의 탐지 결과(이 예에서는 5)가 출력됩니다.

수업 점수 위치
사과 0.92 [18, 21, 57, 63]
바나나 0.88 [100, 30, 180, 150]
딸기 0.87 [7, 82, 89, 163]
바나나 0.23 [42, 66, 57, 83]
사과 0.11 [6, 42, 31, 58]

신뢰도 점수

이러한 결과를 해석하기 위해 감지된 각 개체의 점수와 위치를 확인할 수 있습니다. 점수는 개체가 실제로 감지되었다는 신뢰도를 나타내는 0에서 1 사이의 숫자입니다. 숫자가 1에 가까울수록 모델의 신뢰도가 높아집니다.

애플리케이션에 따라 감지 결과를 폐기할 기준점을 결정할 수 있습니다. 현재 예에서 합리적인 구분점은 0.5점입니다(검출이 유효할 확률이 50%임을 의미). 이 경우 신뢰도 점수가 0.5 미만이므로 배열의 마지막 두 객체는 ​​무시됩니다.

수업 점수 위치
사과 0.92 [18, 21, 57, 63]
바나나 0.88 [100, 30, 180, 150]
딸기 0.87 [7, 82, 89, 163]
바나나 0.23 [42, 66, 57, 83]
사과 0.11 [6, 42, 31, 58]

사용하는 컷오프는 위양성(잘못 식별된 개체 또는 개체가 아닌데 개체로 잘못 식별된 이미지 영역) 또는 위음성(잘못 식별된 실제 개체)에 더 편한지 여부에 따라 결정되어야 합니다. 자신감이 낮아서 놓쳤습니다.)

예를 들어 다음 이미지에서는 배(모델이 감지하도록 훈련된 객체가 아님)가 "사람"으로 잘못 식별되었습니다. 이는 적절한 구분을 선택하여 무시할 수 있는 거짓양성의 예입니다. 이 경우 컷오프가 0.6(또는 60%)이면 거짓양성을 편안하게 제외할 수 있습니다.

오탐지를 보여주는 Android 예의 스크린샷

위치

감지된 각 객체에 대해 모델은 해당 위치를 둘러싸는 경계 직사각형을 나타내는 4개의 숫자 배열을 반환합니다. 제공된 스타터 모델의 경우 번호는 다음과 같이 정렬됩니다.

[ 맨 위, 왼쪽, 맨 아래, 오른쪽 ]

상단 값은 이미지 상단에서 직사각형 상단 가장자리까지의 거리를 픽셀 단위로 나타냅니다. 왼쪽 값은 입력 이미지의 왼쪽에서 왼쪽 가장자리까지의 거리를 나타냅니다. 다른 값도 비슷한 방식으로 아래쪽 가장자리와 오른쪽 가장자리를 나타냅니다.

성능 벤치마크

스타터 모델 의 성능 벤치마크 수치는 여기에 설명된 도구를 사용하여 생성됩니다.

모델명 모델 크기 장치 GPU CPU
COCO SSD 모바일넷 v1 27MB 픽셀 3(안드로이드 10) 22ms 46ms*
픽셀 4(안드로이드 10) 20ms 29ms*
아이폰 XS (iOS 12.4.1) 7.6ms 11ms**

* 4개의 스레드가 사용됩니다.

** 최고의 성능 결과를 위해 iPhone에서는 2개의 스레드가 사용됩니다.

모델 맞춤화

사전 학습된 모델

다양한 대기 시간과 정밀도 특성을 갖춘 모바일에 최적화된 탐지 모델을 탐지 동물원 에서 찾을 수 있습니다. 각각은 다음 섹션에 설명된 입력 및 출력 서명을 따릅니다.

대부분의 다운로드 zip에는 model.tflite 파일이 포함되어 있습니다. 없는 경우 다음 지침을 사용하여 TensorFlow Lite 플랫버퍼를 생성할 수 있습니다. TF2 ObjectDetection Zoo 의 SSD 모델은 여기 지침을 사용하여 TensorFlow Lite로 변환할 수도 있습니다. 감지 모델은 모바일 친화적인 소스 모델을 생성하는 중간 단계가 필요하므로 TensorFlow Lite Converter를 사용하여 직접 변환할 수 없다는 점에 유의하는 것이 중요합니다. 위에 링크된 스크립트는 이 단계를 수행합니다.

TF1TF2 내보내기 스크립트에는 모두 더 많은 수의 출력 개체를 활성화하거나 더 느리고 더 정확한 사후 처리를 활성화할 수 있는 매개변수가 있습니다. 지원되는 인수의 전체 목록을 보려면 스크립트와 함께 --help 사용하십시오.

현재 온디바이스 추론은 SSD 모델에만 최적화되어 있습니다. CenterNet 및 EfficientDet과 같은 다른 아키텍처에 대한 더 나은 지원이 조사되고 있습니다.

사용자 정의할 모델을 선택하는 방법은 무엇입니까?

각 모델에는 고유한 정밀도(mAP 값으로 정량화)와 대기 ​​시간 특성이 있습니다. 사용 사례와 의도한 하드웨어에 가장 적합한 모델을 선택해야 합니다. 예를 들어 Edge TPU 모델은 Pixel 4의 Google Edge TPU에 대한 추론에 이상적입니다.

당사의 벤치마크 도구를 사용하여 모델을 평가하고 가장 효율적인 옵션을 선택할 수 있습니다.

사용자 정의 데이터에 대한 모델 미세 조정

우리가 제공하는 사전 훈련된 모델은 90개 클래스의 객체를 감지하도록 훈련되었습니다. 전체 클래스 목록은 모델 메타데이터 의 레이블 파일을 참조하세요.

전이 학습이라는 기술을 사용하여 원래 세트에 없는 클래스를 인식하도록 모델을 재교육할 수 있습니다. 예를 들어 원래 훈련 데이터에 야채가 하나뿐임에도 불구하고 여러 유형의 야채를 감지하도록 모델을 재훈련할 수 있습니다. 이렇게 하려면 훈련하려는 새 레이블 각각에 대한 훈련 이미지 세트가 필요합니다. 권장되는 방법은 몇 줄의 코드로 사용자 지정 데이터 세트를 사용하여 TensorFlow Lite 모델을 교육하는 프로세스를 단순화하는 TensorFlow Lite Model Maker 라이브러리를 사용하는 것입니다. 전이 학습을 사용하여 필요한 훈련 데이터의 양과 시간을 줄입니다. 몇 가지 예시를 통해 사전 학습된 모델을 미세 조정하는 예시로 Few-shot 감지 Colab을 통해 학습할 수도 있습니다.

더 큰 데이터세트로 미세 조정하려면 TensorFlow 객체 감지 API( TF1 , TF2) 를 사용하여 자신의 모델을 훈련하기 위한 가이드를 살펴보세요. 훈련을 마치면 여기 지침을 사용하여 TFLite 친화적인 형식으로 변환할 수 있습니다: TF1 , TF2