도움말 Kaggle에 TensorFlow과 그레이트 배리어 리프 (Great Barrier Reef)를 보호하기 도전에 참여

물체 감지

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

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

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] 부동 소수점 값의 다차원 배열, [top, left, bottom, right] 형식의 경계 상자를 나타내는 내부 배열
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 MobileNet v1 27Mb Pixel 3 (Android 10) 22ms 46ms *
Pixel 4 (Android 10) 20ms 29ms *
iPhone 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 모델 학습 프로세스를 단순화하는 TensorFlow Lite Model Maker 라이브러리를 사용하는 것입니다. 전이 학습을 사용하여 필요한 훈련 데이터의 양과 시간을 줄입니다. 몇 가지 예를 사용하여 사전 학습 된 모델을 미세 조정하는 예로서 Few-shot detection Colab 에서 배울 수도 있습니다.

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