DEEP.I - Lab

오프라인 공간의 지능화를 꿈꾸는 딥아이 연구실입니다.

Python/Pytorch

[Pytorch] SlowFast Network 구현하기 (FAIR 소스 코드)

Jongwon Kim 2021. 2. 6. 17:56
반응형

그림 1. Slow path와 Fast path를 통한 End-To-End  학습 구조를 가지는 SlowFast

Concept

이번 포스트는 CVPR2019 AVA Challenge 행동 인식 분야에서 혁신적이고 뛰어난 성능으로 1등을 차지한 SlowFast Network의 오픈소스 코드 구현입니다. 비즈니스에서 페이스북이 최고다를 논하지는 않지만, 정말 인공지능 분야 연구에서만은 대단합니다.

 

FAIR 그룹에서 제안된 SlowFast 알고리즘의 저자 중엔 그 유명한 Kaiming He가 또! 포함되어 있습니다. 기회가 닫는다면 한번 같이 일해보고 싶네요... 핵심 아이디어는 단순하지만 깊이가 있는 알고리즘이기 때문에 본 포스팅에서는 간단하게 개념을 살펴본 뒤, 코드를 구현하도록 하겠습니다. SlowFast는 FAIR 깃허브에서 오픈소스로 공개되고 있습니다.  

 

github.com/facebookresearch/SlowFast

 

facebookresearch/SlowFast

PySlowFast: video understanding codebase from FAIR for reproducing state-of-the-art video models. - facebookresearch/SlowFast

github.com

Algorithm

이전의 제안된 행동 인식 알고리즘들은 '움직임'을 해석하기 위해 Optical Flow와 같은 컴퓨터 비전 기술들을 융합하는 방식으로 설계되었습니다. 기반이 되는 네트워크는 CNN, LSTM 등과 같이 다르지만 영상 이외에 추가적인 융합이 트렌드였습니다. SlowFast는 Optical Flow를 사용하지 않는 단일 영상 기반 알고리즘이며 영장류가 객체의 행동을 인식하는 신경 메커니즘에서 영감을 받아 설계되었다고 합니다.

 

그림 2. 기존 행동 인식 네트워크의 일반적인 구조

 

이로써, 객체 행동 인식 분야에서도 End-To-End 학습만으로 가시적인 성과를 달성하게 되었습니다. 또한 높은 성능으로 관련 평가 데이터셋에서도 3년이 지난 지금까지도 상위에 랭크되어 있습니다. 다시 한번 FAIR에 무한한 경외감이 듭니다. 논문과 알고리즘에 대한 상세 리뷰는 많은 분들께서 높은 퀄리티의 포스팅을 해주셨습니다. 링크를 참고해주시면 될 것 같습니다.

 

chacha95.github.io/2019-07-20-VideoUnderstanding6/

 

SlowFast Networks 리뷰

이번 포스트에서는 CVPR2019 워크숍에서 열린 AVA challenge의 한 topic인 AVA challenge의 Action 분야에서 1등을 차지한 SlowFast Networks에 대해 알아보겠습니다. 또한 이 논문은 ICCV2019에 oral 발표 예정입니다.

chacha95.github.io

openaccess.thecvf.com/content_ICCV_2019/html/Feichtenhofer_SlowFast_Networks

 

ICCV 2019 Open Access Repository

Christoph Feichtenhofer, Haoqi Fan, Jitendra Malik, Kaiming He; Proceedings of the IEEE/CVF International Conference on Computer Vision (ICCV), 2019, pp. 6202-6211 We present SlowFast networks for video recognition. Our model involves (i) a Slow pathway, o

openaccess.thecvf.com

SourceCode

리눅스 우분투 18.04 버전에서 최종 설치와 구현 모두 완료하였습니다. 기본 설치 환경은 표와 같습니다.

 

운영체제 그래픽카드 그래픽카드 버전 CUDA & cuDNN 파이썬
우분투 18.04 Nvidia RTX 3090 460.32.03 11.2 / 8.0.5 Python 3.8 

 

1. 기본 패키지 설치

 

기본적인 설치 과정은 SlowFast 깃허브 링크를 참조하셔도 좋습니다.

충돌 방지를 위해 가상 환경을 생성해줍니다. 본 포스팅은 파이썬 3.8 버전을 기준으로 작성되었습니다.

 

 

이후, 본인의 그래픽 카드와 쿠다 버전에 맞는 pytorch (최소 1.3 ver 이상)를 설치해줍니다. pytorch 공홈에서 쉽게 다운로드할 수 있습니다. 파이토치 설치가 완료되면 순차적으로 필수 패키지를 설치해줍니다.

 

객체 탐지와 객체별 행동 분석을 위해서는 Detectron2 설치는 필수인 것 같습니다.

pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio===0.7.2 -f https://download.pytorch.org/whl/torch_stable.html

1-1. 의존성 패키지 설치 (1/2)

pip install 'git+https://github.com/facebookresearch/fvcore'
pip install simplejson

1-2. 의존성 패키지 설치 (2/2)

conda install av -c conda-forge
pip install -U iopath
pip install psutil
pip install opencv-python
pip install torchvision
pip install tensorboard
pip install moviepy

1-3. Detectron2 설치 (1/2)

pip install cython
pip install -U 'git+https://github.com/facebookresearch/fvcore.git' 'git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI'

1-4. Detectrion2 설치 (2/2)

git clone https://github.com/facebookresearch/detectron2 detectron2_repo
pip install -e detectron2_repo

2. SlowFast 설치

2-1 slowfast 환경변수 설정하기

필수 패키지가 모두 설치되었다면, slowfast를 깃허브 링크를 통해 clone 해줍니다. 완료되면 slowfast 폴더를 파이썬 환경변수로 지정해야 합니다. nano 에디터에서 bashrc를 실행해주세요.

git clone https://github.com/facebookresearch/slowfast

sudo nano ~/.bashrc # bash 파일 수정
source ~/.bashrc    # bash 파일 수정 후 

최하단에 slowfast 경로를 추가한 다음, 컨트롤 + X 후 Y를 눌러 저장해줍니다. 이후 source ~/. bashrc를 입력해주세요. 환경변수 설정이 완료되었다면 실행 중인 터미널을 종료한 뒤, 다시 실행해주세요.

export PYTHONPATH="slowfast 절대 경로":$PYTHONPATH

 

2-2 slowfast 빌드하기

cd SlowFast
python setup.py build develop

RunDemo (Kinetics version)

slowfast 빌드까지 모두 완료되었다면 데모 실행을 위한 모든 준비는 끝입니다. 이제, 사전 학습된 가중치 파일을 기반으로 실시간 영상 또는 웹캠에서 행동을 인식해보도록 하겠습니다. 간단한 데모 실행 과정이 약간 복잡하게 되어있어 약간 우회하여 접근해야 합니다. 다소 복잡하더라도 천천히 따라오시면 됩니다.

 

KInetics 목록 하단에서 3번째 위치한 "Kinetics/c2/SLOWFAST_8x8_R50"를 받아줍니다. 

 

가중치 파일 링크 : github.com/anhminh3105/SlowFast/blob/master/MODEL_ZOO.md

 

anhminh3105/SlowFast

PySlowFast: video understanding codebase from FAIR for reproducing state-of-the-art video models. - anhminh3105/SlowFast

github.com

 

데모 실행을 위한 Config 파일 및 파이썬 소스코드 다운로드

데모 실행을 위한 yaml 파일과 run.py 오류가 수정된 slowfast 데모 버전 파일을 clone 해줍니다.

git clone -b prediction_demo https://github.com/anhminh3105/SlowFast.git
cd SlowFast

새롭게 받은 SlowFast 폴더 내 configs/Kinetics/demo의 경로에 다운로드한 가중치 파일을 옮겨줍니다. 실행을 위해서는 클래스 라벨 파일. cvs, config 파일. yaml, 가중치 파일. pkl 이 필요합니다.

 

 

yaml 파일을 열어 TEST.CHECKPOINT_FILE_PATH 항목에 다운로드한 가중치 파일의 경로를 입력해줍니다. 코드를 실행하면서 가중치 경로를 함께 입력한다면 수정하지 않아도 됩니다.

TEST:
  ENABLE: False
  DATASET: kinetics
  BATCH_SIZE: 16
  CHECKPOINT_TYPE: caffe2
  CHECKPOINT_FILE_PATH: "./configs/Kinetics/demo/SLOWFAST_8x8_R50.pkl"

이제, 웹캠을 연결한 뒤 slowfast 상위 경로에서 명령어를 입력하면 됩니다.

python ./tools/run_net.py --cfg ./configs/Kinetics/demo/SLOWFAST_8x8_R50.yaml

실행 과정에서 model_builder.py 오류가 난다면, bashrc 실행을 통해 기존 slowfast경로 이외에 추가로 다운로드 한 데모 버전 slowfast 경로를 추가하면 됩니다.

 

 

사실 SlowFast의 진가는 그림 3과 같이 객체를 탐지한 뒤, 객체의 행동을 독립적으로 인지 하는 것이라고 생각합니다. 일반화하기에는 다소 무리가 있지만, 요즘 AI 행동인지 기술은 연구하고 공급하는 분야에서 SlowFast는 국룰인것으로 알고 있습니다... 하지만,

 

본 포스팅에서 구현된 결과는 전체 화면을 하나의 입력 프레임으로 하기 때문에 객체의 크기가 너무 크거나 작으면 인식 정확도가 낮아진다는 단점이 있죠.

 

그림 3. AVA DATASET 평가 결과

 

오픈 소스라는 넘사벽 이로움은 있지만, 사용 환경에 맞게 최적화하기가 조금은 까다롭게 제공되는 것 같습니다. 하나의 포스팅으로 정리가 안되네요. 

 

다음 포스팅에서는 Detectron2 + Slowfast  구현, 학습 및 다양한 상황별 활용 가능한 코드를 정리하겠습니다.

 

 

Your Best AI Partner DEEP.I
AI 바우처 공급 기업
객체 추적 및 행동 분석 솔루션 | 제조 생산품 품질 검사 솔루션 | AI 엣지 컴퓨팅 시스템 개발

인공지능 프로젝트 개발 외주 및 상담
E-mail: contact@deep-i.ai
Site: www.deep-i.ai
 

딥아이 DEEP.I | AI 기반 지능형 기업 솔루션

딥아이는 AI 기술의 정상화라는 목표를 갖고, 최첨단 딥러닝 기술 기반의 기업 솔루션을 제공하고 있으며, 이를 통해 고도의 AI 기반 객체 탐지, 분석, 추적 기능을 통합하여 다양한 산업 분야에

deep-i.ai

 

반응형