이미지 분류

이미지가 무엇을 나타내는지 식별하는 작업을 이미지 분류 라고 합니다. 이미지 분류 모델은 다양한 종류의 이미지를 인식하도록 훈련됩니다. 예를 들어 토끼, 햄스터, 개 등 세 가지 유형의 동물을 나타내는 사진을 인식하도록 모델을 훈련시킬 수 있습니다. TensorFlow Lite는 모바일 애플리케이션에 배포할 수 있는 최적화된 사전 학습 모델을 제공합니다. 여기에서 TensorFlow를 사용한 이미지 분류에 대해 자세히 알아보세요.

다음 이미지는 Android의 이미지 분류 모델 출력을 보여줍니다.

Android 예시의 스크린샷

시작하다

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

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

아래 Android 예제에서는 각각 lib_task_apilib_support 와 같은 두 메서드의 구현을 보여줍니다.

Android 예시 보기

iOS 예시 보기

Android/iOS 이외의 플랫폼을 사용 중이거나 TensorFlow Lite API 에 이미 익숙하다면 시작 모델 및 지원 파일(해당되는 경우)을 다운로드하세요.

스타터 모델 다운로드

모델 설명

작동 원리

학습 중에 이미지 분류 모델에는 이미지와 관련 라벨이 제공됩니다. 각 레이블은 모델이 인식하도록 학습할 고유한 개념 또는 클래스의 이름입니다.

충분한 훈련 데이터(종종 라벨당 수백 또는 수천 개의 이미지)가 주어지면 이미지 분류 모델은 새로운 이미지가 훈련된 클래스에 속하는지 여부를 예측하는 방법을 학습할 수 있습니다. 이러한 예측 과정을 추론 이라고 합니다. 전이 학습을 사용하면 기존 모델을 사용하여 새로운 이미지 클래스를 식별할 수도 있습니다. 전이 학습에는 매우 큰 교육 데이터 세트가 필요하지 않습니다.

이후에 모델에 대한 입력으로 새 이미지를 제공하면 훈련받은 각 동물 유형을 나타내는 이미지의 확률이 출력됩니다. 예시 출력은 다음과 같습니다.

동물의 종류 개연성
토끼 0.07
햄스터 0.02
0.91

출력의 각 숫자는 훈련 데이터의 레이블에 해당합니다. 출력을 모델이 훈련된 3개의 레이블과 연결하면 모델이 이미지가 개를 나타낼 확률이 높다고 예측했음을 알 수 있습니다.

모든 확률의 합(토끼, 햄스터, 개의 경우)이 1이라는 것을 알 수 있습니다. 이는 여러 클래스가 있는 모델의 일반적인 출력 유형입니다(자세한 내용은 Softmax 참조).

모호한 결과

출력 확률의 합은 항상 1이 되므로 이미지가 모델이 훈련된 클래스에 속하는 것으로 확실히 인식되지 않는 경우 하나의 값이 크게 커지지 않고 레이블 전체에 분포된 확률을 볼 수 있습니다.

예를 들어 다음은 모호한 결과를 나타낼 수 있습니다.

상표 개연성
토끼 0.31
햄스터 0.35
0.34
모델이 모호한 결과를 자주 반환하는 경우 더 정확한 다른 모델이 필요할 수 있습니다.

모델 아키텍처 선택

TensorFlow Lite는 원본 데이터 세트에서 모두 훈련된 다양한 이미지 분류 모델을 제공합니다. MobileNet, Inception, NASNet과 같은 모델 아키텍처를 TensorFlow Hub 에서 사용할 수 있습니다. 사용 사례에 가장 적합한 모델을 선택하려면 개별 아키텍처뿐만 아니라 다양한 모델 간의 일부 장단점도 고려해야 합니다. 이러한 모델 장단점 중 일부는 성능, 정확도, 모델 크기와 같은 측정항목을 기반으로 합니다. 예를 들어, 바코드 스캐너를 구축하려면 더 빠른 모델이 필요할 수 있지만 의료 영상 앱에는 더 느리고 정확한 모델이 필요할 수 있습니다. 제공된 이미지 분류 모델은 다양한 크기의 입력을 허용합니다. 일부 모델의 경우 이는 파일 이름에 표시됩니다. 예를 들어 Mobilenet_V1_1.0_224 모델은 224x224 픽셀의 입력을 허용합니다. 모든 모델에는 픽셀당 세 가지 색상 채널(빨간색, 녹색, 파란색)이 필요합니다. 양자화 모델에는 채널당 1바이트가 필요하고, 부동 소수점 모델에는 채널당 4바이트가 필요합니다. AndroidiOS 코드 샘플은 전체 크기 카메라 이미지를 각 모델에 필요한 형식으로 처리하는 방법을 보여줍니다.

용도 및 제한사항

TensorFlow Lite 이미지 분류 모델은 단일 라벨 분류에 유용합니다. 즉, 이미지가 어떤 단일 레이블을 나타낼 가능성이 가장 높은지 예측하는 것입니다. 그들은 1000개의 이미지 클래스를 인식하도록 훈련되었습니다. 클래스의 전체 목록은 모델 zip 의 레이블 파일을 참조하세요. 새 클래스를 인식하도록 모델을 훈련하려면 모델 사용자 정의를 참조하세요. 다음 사용 사례의 경우 다른 유형의 모델을 사용해야 합니다.
  • 이미지 내의 하나 이상의 객체 유형 및 위치 예측( 객체 감지 참조)
  • 피사체와 배경 등 이미지의 구성 예측( 분할 참조)
대상 장치에서 시작 모델을 실행하면 다양한 모델을 실험하여 성능, 정확도 및 모델 크기 간의 최적의 균형을 찾을 수 있습니다.

모델 맞춤설정

제공된 사전 훈련된 모델은 1000개 클래스의 이미지를 인식하도록 훈련되었습니다. 클래스의 전체 목록은 모델 zip 의 레이블 파일을 참조하세요. 또한 전이 학습을 사용하여 모델을 재교육하여 원래 세트에 없는 클래스를 인식할 수도 있습니다. 예를 들어 원래 훈련 데이터에 나무가 없더라도 모델을 다시 훈련하여 다양한 나무 종을 구별할 수 있습니다. 이렇게 하려면 훈련하려는 새 레이블 각각에 대한 훈련 이미지 세트가 필요합니다. TFLite Model Maker를 사용하거나 TensorFlow를 사용하여 꽃 인식 Codelab을 통해 전이 학습을 수행하는 방법을 알아보세요.

성능 벤치마크

모델 성능은 모델이 특정 하드웨어에 대해 추론을 실행하는 데 걸리는 시간으로 측정됩니다. 시간이 짧을수록 모델 속도가 빨라집니다. 필요한 성능은 애플리케이션에 따라 다릅니다. 다음 프레임이 그려지기 전의 시간에 각 프레임을 분석하는 것이 중요할 수 있는 실시간 비디오와 같은 애플리케이션에서는 성능이 중요할 수 있습니다(예: 30fps 비디오 스트림에서 실시간 추론을 수행하려면 추론이 33ms보다 빨라야 함). . TensorFlow Lite는 MobileNet 모델의 성능 범위를 3.7ms에서 80.3ms까지 양자화했습니다. 성능 벤치마크 수치는 벤치마킹 도구를 사용하여 생성됩니다.
모델명 모델 크기 장치 NNAPI CPU
Mobilenet_V1_1.0_224_Quant 4.3MB 픽셀 3(안드로이드 10) 6ms 13ms*
픽셀 4(안드로이드 10) 3.3ms 5ms*
아이폰 XS (iOS 12.4.1) 11ms**

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

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

모델 정확도

정확도는 모델이 이미지를 올바르게 분류하는 빈도로 측정됩니다. 예를 들어, 명시된 정확도가 60%인 모델은 평균 60%의 시간 동안 이미지를 올바르게 분류할 것으로 예상할 수 있습니다.

가장 관련성이 높은 정확도 측정항목은 상위 1위와 상위 5위입니다. Top-1은 모델 출력에서 ​​올바른 라벨이 확률이 가장 높은 라벨로 나타나는 빈도를 나타냅니다. Top-5는 모델 출력의 가장 높은 확률 5개에 올바른 라벨이 나타나는 빈도를 나타냅니다.

TensorFlow Lite는 MobileNet 모델의 상위 5개 정확도 범위를 64.4~89.9%로 양자화했습니다.

모델 크기

디스크에 있는 모델의 크기는 성능과 정확성에 따라 다릅니다. 크기는 모바일 개발(앱 다운로드 크기에 영향을 미칠 수 있음)이나 하드웨어 작업(사용 가능한 저장 공간이 제한될 수 있음)에 중요할 수 있습니다.

TensorFlow Lite의 양자화된 MobileNet 모델 크기 범위는 0.5~3.4MB입니다.

추가 자료 및 리소스

이미지 분류와 관련된 개념에 대해 자세히 알아보려면 다음 리소스를 사용하세요.