비디오 분류

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

비디오 분류 는 비디오가 나타내는 것을 식별하는 기계 학습 작업입니다. 비디오 분류 모델은 다양한 동작이나 움직임과 같은 고유한 클래스 세트가 포함된 비디오 데이터 세트에서 학습됩니다. 모델은 비디오 프레임을 입력으로 받고 각 클래스가 비디오에서 표현될 확률을 출력합니다.

비디오 분류 및 이미지 분류 모델은 모두 이미지를 입력으로 사용하여 사전 정의된 클래스에 속하는 이미지의 확률을 예측합니다. 그러나 비디오 분류 모델은 비디오의 동작을 인식하기 위해 인접한 프레임 간의 시공간 관계도 처리합니다.

예를 들어, 비디오 동작 인식 모델은 달리기, 박수, 손 흔드는 것과 같은 인간의 동작을 식별하도록 훈련될 수 있습니다. 다음 이미지는 Android에서 비디오 분류 모델의 출력을 보여줍니다.

Android 예시 스크린샷

시작하다

Android 또는 Raspberry Pi 이외의 플랫폼을 사용 중이거나 TensorFlow Lite API 에 이미 익숙한 경우 스타터 비디오 분류 모델 및 지원 파일을 다운로드하십시오. TensorFlow Lite 지원 라이브러리 를 사용하여 고유한 사용자 지정 추론 파이프라인을 구축할 수도 있습니다.

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

TensorFlow Lite를 처음 사용하고 Android 또는 Raspberry Pi로 작업하는 경우 시작하는 데 도움이 되는 다음 예제 애플리케이션을 살펴보세요.

기계적 인조 인간

Android 애플리케이션은 지속적인 비디오 분류를 위해 기기의 후면 카메라를 사용합니다. 추론은 TensorFlow Lite Java API 를 사용하여 수행됩니다. 데모 앱은 프레임을 분류하고 예측된 분류를 실시간으로 표시합니다.

안드로이드 예시

라즈베리 파이

Raspberry Pi 예제에서는 Python과 함께 TensorFlow Lite를 사용하여 지속적인 비디오 분류를 수행합니다. Raspberry Pi를 Pi Camera와 같은 카메라에 연결하여 실시간 비디오 분류를 수행합니다. 카메라에서 결과를 보려면 모니터를 Raspberry Pi에 연결하고 SSH를 사용하여 Pi 셸에 액세스합니다(Pi에 키보드 연결을 피하기 위해).

시작하기 전에 Raspberry Pi OS(Buster로 업데이트하는 것이 좋음)로 Raspberry Pi를 설정합니다 .

라즈베리 파이 예제

모델 설명

모바일 비디오 네트워크( MoViNets )는 모바일 장치에 최적화된 효율적인 비디오 분류 모델 제품군입니다. MoViNets는 여러 대규모 비디오 동작 인식 데이터 세트에서 최첨단 정확도와 효율성을 보여주므로 비디오 동작 인식 작업에 적합합니다.

TensorFlow Lite용 MoviNet 모델에는 MoviNet-A0 , MoviNet-A1MoviNet-A2 의 세 가지 변형이 있습니다. 이러한 변이체는 Kinetics-600 데이터 세트로 훈련되어 600가지 다른 인간 행동을 인식합니다. MoviNet-A0 은 가장 작고 빠르며 가장 정확하지 않습니다. MoviNet-A2 는 가장 크고 가장 느리고 가장 정확합니다. MoviNet-A1 은 A0과 A2의 절충안입니다.

작동 원리

교육 중에 비디오 분류 모델에 비디오 및 관련 레이블 이 제공됩니다. 각 레이블은 모델이 인식하도록 학습할 고유한 개념 또는 클래스의 이름입니다. 비디오 동작 인식 의 경우 비디오는 사람의 동작이며 레이블은 연결된 동작입니다.

비디오 분류 모델은 새로운 비디오가 훈련 중에 제공된 클래스에 속하는지 여부를 예측하는 방법을 학습할 수 있습니다. 이 과정을 추론 이라고 합니다. 또한 전이 학습 을 사용하여 기존 모델을 사용하여 새로운 비디오 클래스를 식별할 수 있습니다.

모델은 연속 영상을 수신하고 실시간으로 응답하는 스트리밍 모델입니다. 모델은 비디오 스트림을 수신할 때 교육 데이터 세트의 클래스가 비디오에 표시되는지 여부를 식별합니다. 각 프레임에 대해 모델은 비디오가 클래스를 나타낼 확률과 함께 이러한 클래스를 반환합니다. 주어진 시간의 예시 출력은 다음과 같습니다.

동작 개연성
스퀘어 댄스 0.02
실 바늘 0.08
손가락을 만지작거리다 0.23
손 흔드는 0.67

출력의 각 작업은 훈련 데이터의 레이블에 해당합니다. 확률은 액션이 비디오에 표시될 가능성을 나타냅니다.

모델 입력

이 모델은 RGB 비디오 프레임 스트림을 입력으로 받아들입니다. 입력 비디오의 크기는 유연하지만 이상적으로는 모델 훈련 해상도 및 프레임 속도와 일치합니다.

  • MoviNet-A0 : 5fps에서 172 x 172
  • MoviNet-A1 : 5fps에서 172 x 172
  • MoviNet-A1 : 5fps에서 224 x 224

입력 비디오는 일반적인 이미지 입력 ​​규칙 에 따라 0과 1 범위의 색상 값을 가질 것으로 예상됩니다.

내부적으로도 모델은 이전 프레임에서 수집된 정보를 사용하여 각 프레임의 컨텍스트를 분석합니다. 이는 모델 출력에서 ​​내부 상태를 가져와 다음 프레임을 위해 모델에 다시 공급하여 수행됩니다.

모델 출력

모델은 일련의 레이블과 해당 점수를 반환합니다. 점수는 각 클래스에 대한 예측을 나타내는 로짓 값입니다. 이 점수는 softmax 함수( tf.nn.softmax )를 사용하여 확률로 변환할 수 있습니다.

    exp_logits = np.exp(np.squeeze(logits, axis=0))
    probabilities = exp_logits / np.sum(exp_logits)

내부적으로 모델 출력에는 모델의 내부 상태도 포함되며 향후 프레임을 위해 모델에 다시 피드백됩니다.

성능 벤치마크

성능 벤치마크 번호는 벤치마킹 도구 로 생성됩니다. MoviNets는 CPU만 지원합니다.

모델 성능은 모델이 주어진 하드웨어에서 추론을 실행하는 데 걸리는 시간으로 측정됩니다. 시간이 짧을수록 더 빠른 모델을 의미합니다. 정확도는 모델이 비디오에서 클래스를 올바르게 분류하는 빈도로 측정됩니다.

모델명 크기 정확성 * 장치 CPU **
MoviNet-A0(정수 양자화) 3.1MB 65% 픽셀 4 5ms
픽셀 3 11ms
MoviNet-A1(정수 양자화) 4.5MB 70% 픽셀 4 8ms
픽셀 3 19ms
MoviNet-A2(정수 양자화) 5.1MB 72% 픽셀 4 15ms
픽셀 3 36ms

* Kinetics-600 데이터 세트에서 측정된 최고 1 정확도.

** 1-스레드가 있는 CPU에서 실행할 때 측정된 대기 시간입니다.

모델 사용자 정의

사전 훈련된 모델은 Kinetics-600 데이터 세트에서 600개의 인간 행동을 인식하도록 훈련되었습니다. 또한 전이 학습을 사용하여 원래 세트에 없는 인간 행동을 인식하도록 모델을 재훈련할 수 있습니다. 이렇게 하려면 모델에 통합하려는 각각의 새로운 작업에 대한 교육 비디오 세트가 필요합니다.

사용자 지정 데이터의 모델 미세 조정에 대한 자세한 내용은 MoViNets repoMoViNets 자습서 를 참조하십시오.

추가 읽을거리 및 리소스

다음 리소스를 사용하여 이 페이지에서 논의된 개념에 대해 자세히 알아보세요.