물체 감지, 물체 감지

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

예를 들어 예제 응용 프로그램 의 이 스크린샷은 두 개체가 어떻게 인식되고 해당 위치에 주석이 추가되었는지 보여줍니다.

Android 예시 스크린샷

시작하다

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

Android 또는 iOS 이외의 플랫폼을 사용 중이거나 TensorFlow Lite API 에 이미 익숙한 경우 스타터 개체 감지 모델 및 함께 제공되는 레이블을 다운로드할 수 있습니다.

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

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

자신의 작업에 대한 사용자 정의 탐지 모델을 훈련시키려면 모델 사용자 정의를 참조하십시오.

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

  • 이미지가 나타낼 가능성이 가장 높은 단일 레이블 예측( 이미지 분류 참조)
  • 피사체 대 배경과 같은 이미지 구성 예측( 세그먼트 참조)

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

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

기계적 인조 인간

TensorFlow Lite 작업 라이브러리 의 즉시 사용 가능한 API를 활용하여 단 몇 줄의 코드로 개체 감지 모델을 통합할 수 있습니다. TensorFlow Lite Interpreter Java API를 사용하여 고유한 커스텀 추론 파이프라인을 구축할 수도 있습니다.

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

안드로이드 예시 보기

아이폰 OS

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

iOS 예시 보기

모델 설명

이 섹션에서는 TensorFlow Object Detection 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개의 스레드를 사용했습니다.

모델 커스터마이징

선행 학습된 모델

다양한 대기 시간 및 정밀도 특성을 가진 모바일에 최적화된 탐지 모델은 Detection Zoo 에서 찾을 수 있습니다. 이들 각각은 다음 섹션에서 설명하는 입력 및 출력 서명을 따릅니다.

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

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

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

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

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

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

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

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

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

더 큰 데이터 세트로 미세 조정하려면 TensorFlow 객체 감지 API를 사용하여 자신의 모델을 교육하기 위한 다음 가이드를 살펴보십시오: TF1 , TF2 . 일단 훈련되면 다음 지침에 따라 TFLite 친화적인 형식으로 변환할 수 있습니다: TF1 , TF2