Connect with us

사상 리더

실시간 비디오 처리에 AI 적용: 기본과 더 나아가기

mm

By Maksym Tatariants, Data Science Engineer at MobiDev.

비디오 처리에 인공 지능(AI)을 사용하는 것은 새로운 것이 아닙니다. 이미지 처리를 넘어서면 AI의 가장 일반적인 사용 사례 중 하나입니다. 이미지 처리와 마찬가지로 비디오 처리도 컴퓨터 비전, 객체 인식, 기계 학습, 딥 러닝과 같은 확립된 기술을 사용하여 이 프로세스를 향상시킵니다.

비디오 편집과 생성에서 컴퓨터 비전과 NLP를 사용하거나, 비디오 콘텐츠 자동 태깅 작업에서 객체 인식을 사용하거나, AI 비디오 분석을 스트림라인하는 데 기계 학습을 사용하거나, 실시간 배경 제거를 가속화하는 데 딥 러닝을 사용하는 경우, 사용 사례는 하루가 지나감에 따라 계속 증가합니다.

비디오 처리에 AI를 사용할 때 취할 수 있는 접근 방식을 알아보려면 계속 읽어보세요.

실시간 비디오 처리의 기초

기본부터 시작해 보겠습니다. 실시간 비디오 처리는 객체 및 얼굴 인식이 사용되는 감시 시스템에서 필수적인 기술입니다. 또한 산업 분야에서 AI 시각 검사 소프트웨어를 구동하는 주요 프로세스입니다.

那么, 비디오 처리는 어떻게 작동할까요? 비디오 처리에는 디코딩, 계산, 인코딩과 같은 일련의 단계가 포함됩니다. 다음은 알아야 할 내용입니다:

  • 디코딩: 압축된 파일에서 비디오를 원래 원시 형식으로 다시 변환하는 데 필요한 프로세스입니다.
  • 계산: 원시 비디오 프레임에서 수행되는 특정 작업입니다.
  • 인코딩: 처리된 프레임을 원래 압축 상태로 다시 변환하는 프로세스입니다.

이제, 모든 비디오 처리 작업의 목표는 이러한 단계를 가능한 한 빠르고 정확하게 완료하는 것입니다. 이를 달성하기 위한 가장 쉬운 방법은 병렬로 작업하고 알고리즘을 속도에 최적화하는 것입니다. 간단히 말해서, 파일 분할과 파이프라인 아키텍처를 활용해야 합니다.

비디오 파일 분할이란?

비디오 파일 분할을 통해 알고리즘이 동시에 작동할 수 있으며, 더 느리지만 더 정확한 모델을 사용할 수 있습니다. 이는 비디오를 별도의 부분으로 분할하여 동시에 처리함으로써 달성됩니다.

비디오 분할을 가상 파일 생성으로 생각할 수 있습니다.

그러나 비디오 파일 분할은 실시간 비디오 처리에 최선의 선택은 아닙니다. 왜일까요? 이 프로세스는 처리 중에 파일을 일시 중지, 재개 및 되감기하는 것을 어렵게 만듭니다.

파이프라인 아키텍처란?

다른 옵션은 파이프라인 아키텍처입니다. 이 프로세스는 비디오를 분할하는 대신 처리 중에 수행되는 작업을 분할하고 병렬화합니다.

실시간으로 얼굴을 감지하고 흐리게 하는 비디오 감시 시스템에서 파이프라인 아키텍처가 실제로 어떻게 작동하는지 보여주는 간단한 예입니다.

이 예에서 파이프라인은 디코딩, 얼굴 감지, 얼굴 흐리기, 인코딩으로 작업을 분할했습니다. 그리고 파이프라인의 속도를 개선하려면 파이프라인 딥 러닝 기술을 사용할 수 있습니다.

디코딩 및 인코딩 설명

디코딩과 인코딩은 어떻게 합니까? 이러한 프로세스를 완료하는 두 가지 방법이 있습니다. 소프트웨어와 하드웨어입니다.

하드웨어 가속 개념은 이미 익숙할 것입니다. 최신 NVIDIA 그래픽 카드와 CUDA 코어에 설치된 디코더와 인코더 덕분에 이 프로세스가 가능합니다.

인코딩 및 디코딩 프로세스에 대한 하드웨어 가속을 사용할 수 있는 인기 있는 옵션은 다음과 같습니다:

  • CUDA 지원으로 OpenCV 컴파일: CUDA로 OpenCV를 컴파일하면 디코딩과 OpenCV를 사용하는 파이프라인 계산이 모두 최적화됩니다. 그러나 Python 래퍼는 이를 지원하지 않으므로 C++로 작성해야 합니다. 하지만 CPU 메모리에서 복사하지 않고 GPU에서 디코딩과 숫자 계산을 수행해야 하는 상황에서는 여전히 좋은 선택입니다.
  • FFmpeg 또는 GStreamer를 NVDEC/NVENC 코덱 지원으로 컴파일: 다른 옵션은 사용자 지정 설치의 FFmpeg와 GStreamer에 포함된 내장 NVIDIA 디코더와 인코더를 사용하는 것입니다. 그러나 가능하다면 FFmpeg를 사용하는 것이 좋습니다. 이유는 유지 관리가 적게 필요하기 때문입니다. 대부분의 라이브러리는 FFmpeg로 구동되므로 라이브러리의 성능을 향상시키기 위해 FFmpeg를 대체하면 라이브러리의 성능을 자동으로 향상시킬 수 있습니다.
  • NVIDIA 비디오 처리 프레임워크 사용: 마지막 옵션은 Python 래퍼를 사용하여 프레임을 GPU의 PyTorch 텐서로 직접 디코딩하는 것입니다. 이 옵션은 CPU에서 GPU로의 추가 복사를 제거합니다.

얼굴 감지 및 흐리기

객체 감지 모델(SSD 또는 RetinaFace)은 얼굴 감지를 완료하는 데 인기 있는 옵션입니다. 이러한 솔루션은 프레임에서 인간의 얼굴을 찾습니다. 그리고 우리의 경험에 따르면, 우리는 Caffe Face 트래킹과 TensorFlow 객체 감지 모델을 선호합니다. 이유는 이러한 모델이 최고의 결과를 제공했기 때문입니다. 또한 두 모델 모두 OpenCV 라이브러리 dnn 모듈을 사용하여 사용할 수 있습니다.

그런 다음, 얼굴이 감지된 후에는 Python과 OpenCV를 기반으로 하는 시스템이 바운딩 박스와 감지 신뢰도를 노출시킵니다. 마지막으로, 흐리기 알고리즘이 자르기된 영역에 적용됩니다.

AI 기반 실시간 비디오 처리 소프트웨어를 구축하는 방법

비디오 처리, 이를 구동하는 코덱, 필요한 하드웨어 및 소프트웨어는 기술적으로相当 복잡합니다.

그러나 이는 이러한 도구를 사용하여 자신의 라이브 비디오 처리 소프트웨어를 구축할 수 없다는 것을 의미하지 않습니다.

다음은 해야 할 일의 간단한 요약입니다:

  1. 필요한 작업을 완료하기 위해 사전 훈련된 신경망을 조정하기 시작합니다.
  2. 비디오 처리 및 필요에 따라 확장할 수 있는 클라우드 인프라를 구성합니다.
  3. 프로세스를 압축하고 모바일 애플리케이션, 관리자 패널 또는 웹 패널과 같은 특정 사용 사례를 통합하기 위해 소프트웨어 레이어를 구축합니다.

사전 훈련된 신경망과 간단한 애플리케이션 레이어를 사용하여 비슷한 비디오 처리 소프트웨어의 MVP를 개발하는 데 최대 4개월이 걸릴 수 있습니다. 그러나 범위와 타임라인은 각 프로젝트의 세부 사항에 따라 다르며, 대부분의 경우 프로젝트의 세부 사항을 탐색하고 최적의 흐름을 찾기 위해 Proof of Concept 개발을 시작하는 것이 합리적입니다.

Maksym은 데이터 과학 및 기계 학습에서 새로운 통찰력과 경험을 얻는 데 관심이 있습니다. 그는 특히 Deep Learning 기반 기술과 비즈니스 사용 사례에 대한 적용에 관심이 있습니다.