이미지가 나타내는 것을 식별하는 작업을 이미지 분류 라고 합니다. 이미지 분류 모델은 다양한 클래스의 이미지를 인식하도록 훈련됩니다. 예를 들어 토끼, 햄스터, 개 등 세 가지 유형의 동물을 나타내는 사진을 인식하도록 모델을 훈련시킬 수 있습니다. TensorFlow Lite는 모바일 애플리케이션에 배포할 수 있는 최적화된 사전 학습된 모델을 제공합니다. 여기에서 TensorFlow를 사용한 이미지 분류에 대해 자세히 알아보세요.
다음 이미지는 Android에서 이미지 분류 모델의 출력을 보여줍니다.
시작하다
TensorFlow Lite를 처음 사용하고 Android 또는 iOS로 작업하는 경우 시작하는 데 도움이 될 수 있는 다음 예제 애플리케이션을 탐색하는 것이 좋습니다.
TensorFlow Lite Task Library 의 즉시 사용 가능한 API를 활용하여 몇 줄의 코드로 이미지 분류 모델을 통합할 수 있습니다. TensorFlow Lite 지원 라이브러리 를 사용하여 고유한 사용자 지정 추론 파이프라인을 구축할 수도 있습니다.
아래 Android 예제는 각각 lib_task_api 및 lib_support 로 두 메서드에 대한 구현을 보여줍니다.
Android/iOS 이외의 플랫폼을 사용 중이거나 TensorFlow Lite API 에 이미 익숙한 경우 스타터 모델 및 지원 파일(해당되는 경우)을 다운로드하십시오.
모델 설명
작동 원리
훈련 중에 이미지 분류 모델에 이미지 및 관련 레이블 이 제공됩니다. 각 레이블은 모델이 인식하도록 학습할 고유한 개념 또는 클래스의 이름입니다.
충분한 훈련 데이터(종종 레이블당 수백 또는 수천 개의 이미지)가 주어지면 이미지 분류 모델은 새 이미지가 훈련된 클래스에 속하는지 여부를 예측하는 방법을 학습할 수 있습니다. 이 예측 프로세스를 추론 이라고 합니다. 전이 학습 을 사용하여 기존 모델을 사용하여 새로운 이미지 클래스를 식별할 수도 있습니다. 전이 학습에는 매우 큰 훈련 데이터 세트가 필요하지 않습니다.
이후에 새 이미지를 모델에 대한 입력으로 제공하면 훈련된 각 동물 유형을 나타내는 이미지의 확률이 출력됩니다. 예제 출력은 다음과 같을 수 있습니다.
동물 유형 | 개연성 |
---|---|
토끼 | 0.07 |
햄스터 | 0.02 |
개 | 0.91 |
출력의 각 숫자는 훈련 데이터의 레이블에 해당합니다. 출력을 모델이 훈련된 세 개의 레이블과 연결하면 이미지가 개를 나타낼 가능성이 높다고 모델이 예측했음을 알 수 있습니다.
모든 확률(토끼, 햄스터, 개)의 합이 1임을 알 수 있습니다. 이는 여러 클래스가 있는 모델의 일반적인 출력 유형입니다(자세한 내용은 Softmax 참조).
모호한 결과
출력 확률의 합은 항상 1이므로 이미지가 모델이 훈련된 클래스에 속하는 것으로 확실하게 인식되지 않으면 한 값이 크게 커지지 않고 레이블 전체에 분포된 확률을 볼 수 있습니다.
예를 들어 다음은 모호한 결과를 나타낼 수 있습니다.
상표 | 개연성 |
---|---|
토끼 | 0.31 |
햄스터 | 0.35 |
개 | 0.34 |
모델 아키텍처 선택
TensorFlow Lite는 원본 데이터 세트에서 모두 훈련된 다양한 이미지 분류 모델을 제공합니다. MobileNet, Inception 및 NASNet과 같은 모델 아키텍처는 TensorFlow Hub 에서 사용할 수 있습니다. 사용 사례에 가장 적합한 모델을 선택하려면 개별 아키텍처와 다양한 모델 간의 일부 절충점을 고려해야 합니다. 이러한 모델 트레이드오프 중 일부는 성능, 정확도 및 모델 크기와 같은 메트릭을 기반으로 합니다. 예를 들어, 바코드 스캐너를 구축하기 위해 더 빠른 모델이 필요할 수 있고 의료 영상 앱을 위해 더 느리고 더 정확한 모델을 선호할 수 있습니다. 제공된 이미지 분류 모델 은 다양한 크기의 입력을 허용합니다. 일부 모델의 경우 파일 이름에 표시됩니다. 예를 들어 Mobilenet_V1_1.0_224 모델은 224x224 픽셀의 입력을 허용합니다. 모든 모델에는 픽셀당 세 가지 색상 채널(빨간색, 녹색 및 파란색)이 필요합니다. 양자화 모델은 채널당 1바이트가 필요하고 부동 모델은 채널당 4바이트가 필요합니다. Android 및 iOS 코드 샘플은 전체 크기의 카메라 이미지를 각 모델에 필요한 형식으로 처리하는 방법을 보여줍니다.사용 및 제한 사항
TensorFlow Lite 이미지 분류 모델은 단일 레이블 분류에 유용합니다. 즉, 이미지가 나타낼 가능성이 가장 큰 단일 레이블을 예측합니다. 그들은 1000개의 이미지 클래스를 인식하도록 훈련되었습니다. 전체 클래스 목록은 모델 zip 의 레이블 파일을 참조하세요. 새 클래스를 인식하도록 모델을 훈련시키려면 모델 사용자 정의 를 참조하십시오. 다음 사용 사례의 경우 다른 유형의 모델을 사용해야 합니다. 대상 장치에서 스타터 모델을 실행하면 다양한 모델을 실험하여 성능, 정확도 및 모델 크기 간의 최적 균형을 찾을 수 있습니다.모델 사용자 정의
제공되는 사전 훈련된 모델은 1000개 클래스의 이미지를 인식하도록 훈련됩니다. 전체 클래스 목록은 모델 zip 의 레이블 파일을 참조하세요. 또한 전이 학습을 사용하여 원래 세트에 없는 클래스를 인식하도록 모델을 다시 훈련할 수 있습니다. 예를 들어 원래 훈련 데이터에 나무가 없음에도 불구하고 다른 나무 종을 구별하기 위해 모델을 다시 훈련할 수 있습니다. 이렇게 하려면 훈련하려는 새 레이블 각각에 대한 훈련 이미지 세트가 필요합니다. TFLite Model Maker 또는 TensorFlow로 꽃 인식 코드랩에서 전이 학습을 수행하는 방법을 알아보세요.성능 벤치마크
모델 성능은 모델이 주어진 하드웨어에서 추론을 실행하는 데 걸리는 시간으로 측정됩니다. 시간이 낮을수록 모델이 더 빠릅니다. 필요한 성능은 애플리케이션에 따라 다릅니다. 다음 프레임이 그려지기 전에 각 프레임을 분석하는 것이 중요할 수 있는 실시간 비디오와 같은 애플리케이션의 경우 성능이 중요할 수 있습니다(예: 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%의 시간 동안 이미지를 올바르게 분류할 것으로 예상할 수 있습니다.
가장 관련성이 높은 정확도 측정항목은 Top-1 및 Top-5입니다. Top-1은 모델의 출력에서 가장 높은 확률을 가진 레이블로 올바른 레이블이 나타나는 빈도를 나타냅니다. Top-5는 모델 출력에서 가장 높은 확률 5개에 올바른 레이블이 나타나는 빈도를 나타냅니다.
TensorFlow Lite는 MobileNet 모델의 Top-5 정확도 범위를 64.4~89.9%로 양자화했습니다.
모델 사이즈
디스크에 있는 모델의 크기는 성능과 정확도에 따라 다릅니다. 크기는 모바일 개발(앱 다운로드 크기에 영향을 미칠 수 있는 경우) 또는 하드웨어로 작업할 때(사용 가능한 저장 공간이 제한될 수 있는 경우) 중요할 수 있습니다.
TensorFlow Lite 양자화 MobileNet 모델의 크기 범위는 0.5~3.4MB입니다.
추가 읽을거리 및 리소스
다음 리소스를 사용하여 이미지 분류와 관련된 개념에 대해 자세히 알아보세요.