개요

얼마 전 FairMOT 논문의 얕은 리뷰를 포스팅 하였고 실제 FairMOT 를 내 개발 환경에서 돌려보면서 겪은 문제 및 해결 경험을 기록한다. 원작자의 코드 리포지토리가 본인이 돌려보는 당시 최신 버전의 프레임워크에도 문제 없다면 따로 이런 포스팅을 올리지 않았는데, 실제로 뭔가에 막혔었고, 해결했으니 기록하는게 좋겠다 싶었다.

기본 설치

설치는 기본적으로 아래의 FairMOT 공식 리포지토리를 참조하였다.

  • FairMOT: https://github.com/ifzhang/FairMOT
$ git clone https://github.com/ifzhang/FairMOT.git
$ cd FairMOT

하단의 Installation 섹션을 참조하였고, 기본적으로 셋팅한 환경은 다음과 같다. 중간에 부연설명을 더 하겠지만, DCNv2의 빌드 때문에 실제 로컬 CUDA 버전을 맞춰야하는 소요가 있었다.

  • OS: Ubuntu 22.04
  • Conda python env: python 3.8.20
  • Pytorch 관련
    • torch 2.4.1
    • torchvision 0.19.1
    • CUDA 12.4 버전으로 설치: pip install --extra-index-url https://download.pytorch.org/whl/cu124 torch==2.4.1 torchvision==0.19.1
  • GPU 관련
    • 원래는 torch에 포함된 CUDA 라이브러리 많으로 torch의 GPU 기능을 사용하는데에 충분했는데, CPP 코드의 GPU 빌드가 있어 로컬 라이브러리도 필요해졌다.
    • Nvidia Driver 550.120
    • NVIDIA CUDA 12.4

위의 셋팅 기준 conda 환경 내 3.8 버전의 python + 특정 Local CUDACUDA 기반 pytorch 까지 셋팅 완료하였고, 아래의 명령어들로 필요한 파이썬 패키지 설치하였다.

$ pip install cython
$ pip install -r requirements.txt

DCNv2 설치

위의 기본설치만 하고 테스트를 돌려보기 위해 Demo 코드를 돌리려하면 DCN이 없다고 에러가 막 난다. 대충 아래와 같은 에러 메시지를 볼 것이다.

...
...
  File "/data/tracker/FairMOT/src/lib/models/model.py", line 11, in <module>
    from .networks.pose_dla_dcn import get_pose_net as get_dla_dcn
  File "/data/tracker/FairMOT/src/lib/models/networks/pose_dla_dcn.py", line 16, in <module>
    from dcn_v2 import DCN
ModuleNotFoundError: No module named 'dcn_v2'

이러면 이제 Installation 섹션에 언급된 DCNv2를 설치하려 할 것이다. 근데 readme에 적힌 아래 처럼 받으면 아마 make.sh 명령어에서 에러가 날 것 이다.

$ cd {FairMOT}
$ git clone -b pytorch_1.7 https://github.com/ifzhang/DCNv2.git`
$ cd DCNv2
$ ./make.sh

다음과 같이 <TH/TH.h> 파일이 없다는 에러가 발생한다.

/data/tracker/FairMOT/DCNv2/src/cpu/dcn_v2_cpu.cpp:8:10: fatal error: TH/TH.h: No such file or directory
    8 | #include <TH/TH.h>
      |          ^~~~~~~~~
compilation terminated.
error: command '/usr/bin/g++' failed with exit code 1

그래서 깃허브 이슈 및 스택오버플로를 검색한 결과 기존 언급된 리포지토리는 깔끔히 지우고 다른 리포지토리를 통해 해결할 수 있었다. FairMOT 경로에서 실행한다. 단, 주의할 점이 있다. 해당 리포지토리의 setup.py의 27번째 줄을 보면 CUDA_HOME 환경 변수가 없을 시 cpu 버전으로 빌드 된다. 환경변수 존재하는지 확인하고 빌드할 것. 본인은 PATHLD_LIBRARY_PATH는 있었는데 해당 CUDA_HOME 변수는 정의되어있지 않아 정의하고 빌드하였다.(이 때문에, 로컬 CUDA 12.4 를 설치하였다.)

$ git cloen https://github.com/lucasjinreal/DCNv2_latest
$ cd DCNv2_latest
$ export CUDA_HOME=/usr/local/cuda-12.4/
$ python setup.py build develop
  • 확인 한 사항 1
    • PATHLD_LIBRARY_PATH 환경변수에는 CUDA 11.8 경로를 추가 해놓고 CUDA_HOME 환경변수는 정의하지 않은 채 빌드하려하면 아래와 같은 에러를 확인하였다.
      ...
        File "/home/dongle94/miniconda3/envs/tmp_track/lib/python3.8/site-packages/torch/utils/cpp_extension.py", line 413, in _check_cuda_version
          raise RuntimeError(CUDA_MISMATCH_MESSAGE.format(cuda_str_version, torch.version.cuda))
      RuntimeError: 
      The detected CUDA version (11.8) mismatches the version that was used to compile
      PyTorch (12.4). Please make sure to use the same CUDA versions.
      
  • 확인 한 사항 2
    • PATHLD_LIBRARY_PATH 환경변수에는 CUDA 12.4 경로를 적고, CUDA_HOME 경로는 직접 지정 안한 경우
    • 빌드 및 추론에 문제 없었음(성공).
  • 확인 한 사항 3
    • PATHLD_LIBRARY_PATH 환경변수에는 CUDA 11.8 경로로 적고 CUDA_HOME 변수는 12.4 경로를 적은 경우
    • 빌드 및 추론에 문제 없었음(성공)

Pre-trained 모델 다운로드

모델 다운로드는 공식 리포지토리에 언급된 모델 다운로드 링크를 참고하자.

테스트 실행

다시 FairMOT 경로로 돌아와 이제 데모를 돌려본다. 테스트용 비디오 파일은 videos 디렉토리에 있다.

$ cd ../src   # FairMOT Directory
$ python demo.py mot --load_model ../models/fairmot_dla34.pth --conf_thres 0.4 --gpus 0 --input-video ../videos/MOT16-03.mp4

다음과 같이 정상적으로 박스 추론 및 객체 추적 및 Re-ID가 실행됨을 확인할 수 있다.

...
...
loaded ../models/fairmot_dla34.pth, epoch 30
2025-01-24 11:10:36 [INFO]: Processing frame 0 (100000.00 fps)
2025-01-24 11:10:37 [INFO]: Processing frame 20 (27.75 fps)
2025-01-24 11:10:38 [INFO]: Processing frame 40 (31.15 fps)

참고: FairMOT Github
참고: <TH/TH.h> 관련 Github Issue

댓글남기기