물체 감지, 물체 감지

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

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

Android 예시 스크린샷

시작하다

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

Android 또는 iOS 이외의 플랫폼을 사용 중이거나 이미 TensorFlow Lite API 에 익숙하다면 시작 객체 감지 모델과 함께 제공되는 레이블을 다운로드할 수 있습니다.

메타데이터가 있는 스타터 모델 다운로드

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

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

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

  • 이미지가 가장 많이 나타내는 단일 레이블 예측( 이미지 분류 참조)
  • 피사체 대 배경과 같은 이미지 구성 예측( 세그먼테이션 참조)

예제 응용 프로그램 및 가이드

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

기계적 인조 인간

TensorFlow Lite Task Library 의 즉시 사용 가능한 API를 활용하여 몇 줄의 코드로 객체 감지 모델을 통합할 수 있습니다. TensorFlow Lite Interpreter Java API 를 사용하여 고유한 사용자 정의 추론 파이프라인을 구축할 수도 있습니다.

아래 Android 예제는 각각 lib_task_apilib_interpreter 로 두 메서드에 대한 구현을 보여줍니다.

Android 예시 보기

iOS

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
코코 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 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 모델을 교육하는 프로세스를 단순화하는 TensorFlow Lite Model Maker 라이브러리를 사용하는 것입니다. 전이 학습을 사용하여 필요한 훈련 데이터의 양과 시간을 줄입니다. 몇 가지 예를 통해 사전 훈련된 모델을 미세 조정하는 예로서 Few-shot detection Colab 에서 배울 수도 있습니다.

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