본문 바로가기
정나우/Jetson

DeepSORT를 이용해서 Yolov4 성능 높이기

by 정_나우 2022. 5. 25.

이번에는 DeepSORT라는 것을 이용해서 Yolov4의 성능을 높여보겠습니다.

 

DeepSORT가 어떤 건인지는 아래에 잘 정리가 나와있으니 궁금하신 분은 여기에 한번 들어가 읽어보시는 것을 추천드립니다.

 

https://gngsn.tistory.com/94

 

DeepSORT, 제대로 이해하기

DeepSORT는 가장 널리 사용되고 있는 객체 추적 프레임워크 중 하나로, SORT(Simple Online and Realtime Tracking)을 보완 확장한 기술입니다. 📚 사전 지식 먼저 다룰 사전 지식은 DeepSORT에서 사용되는 기술

gngsn.tistory.com

 

간단하게 말하면 칼만필터, 헝가리안 알고리즘 등을 이용해서 인식 성능을 향상시켰다고 보면 됩니다.

 

이전에 TenssorRT는 딥러닝 네트워크 최적화를 통해 fps가 잘 나오도록 성능을 높였다면

 

이번에는 인식하고 있는 물체가 여러개 존재하고, 중간에 화면 밖으로 나가거나 장애물에 가려져서 안 보였다가 다시 나타나도 같은 대상으로 라벨링이 유지되는 기능이 추가되었습니다.

 

이 기능은 특정 대상을 쫓아가다가 주변에 비슷한 대상이 나타나도 추적하던 대상을 계속 쫓아갈 수 있게 해줍니다.

git clone https://github.com/MatPiech/DeepSORT-YOLOv4-TensorRT-OpenVINO

뿐만 아니라, 중간에 잠깐 가려져도 이전에 쫓던 대상인 것을 알기 때문에 다른 대상과 착각을 하지 않습니다.

 


 

https://github.com/MatPiech/DeepSORT-YOLOv4-TensorRT-OpenVINO

 

GitHub - MatPiech/DeepSORT-YOLOv4-TensorRT-OpenVINO: Object tracking implemented with YOLOv4, DeepSort, and TensorFlow. The infe

Object tracking implemented with YOLOv4, DeepSort, and TensorFlow. The inference extended to work with TensorRT, OpenVINO, and TensorFlow Lite. - GitHub - MatPiech/DeepSORT-YOLOv4-TensorRT-OpenVINO...

github.com

다음 깃허브 내용을 통해 DeepSORT를 작동시켜 보겠습니다.

 

깃허브에 있는 내용만 따라하면 오류가 발생하는데 연구실 형이 해결해준 내용까지 기록해두겠습니다.

 

1. 우선 깃허브에 있는 내용을 git clone을 통해 다운받아 줍니다.

git clone https://github.com/MatPiech/DeepSORT-YOLOv4-TensorRT-OpenVINO

 

2. 그리고 DeepSORT폴더로 들어가서 본인이 사용할 trt파일을 넣어줍니다.

trt파일은 cfg파일과 weight파일을 이용해서 변환하면 얻을 수 있고 그 방법은 이전 게시물에 있습니다.

https://kumoh-irl.tistory.com/49?category=1228699 

 

TensorRT를 이용해서 Yolov4 성능 향상시키기

Jetson Xavier에서 Yolov4로 실시간 객체 인식을 하면 14프레임 정도나옵니다. 여기서 딥러닝 네트워크를 최적화 시켜주는 도구인 TensorRT를 이용하면 프레임이 더 잘 나오게 됩니다. 방법은 깃허브를

kumoh-irl.tistory.com

 

3.  DeepSORT-YOLOv4-TensorRT-OpenVINO/data/classes 경로에 obj.names 파일을 넣어줍니다.

본인이 커스텀 학습한 trt파일을 사용한다면 obj,names 파일을 가져와서 넣어줘야 합니다.

그냥 yolocv4를 구현하신 다면 coco.names를 쓰기 때문에 이 과정은 무시하셔도 됩니다.

 

4. DeepSORT-YOLOv4-TensorRT-OpenVINO/detectors 경로에 있는 yolo_trt.py 파일을 수정해줍니다.

cd DeepSORT-YOLOv4-TensorRT-OpenVINO/detectors
code yolo_tyt.py

다음 명령어를 터미널 창에 입력해서 켜도 좋고, 그냥 마우스로 직접 경로에 들어가 더블클릭으로 파일을 켜도 좋습니다.

 

그리고 101번째 줄에 있는

assert 3 <= len(engine) <= 4  # expect 1 input, plus 2 or 3 outpus

이 내용을 주석처리해줍니다.

#assert 3 <= len(engine) <= 4  # expect 1 input, plus 2 or 3 outpus

 

5. 그리고 동일 경로에 있는 __init__.py 파일도 수정해줍니다.

#from .yolo_trt import TrtYOLO

4번째 줄에 다음 내용이 주석처리 되어있는데 주석처리를 풀어줍니다.

from .yolo_trt import TrtYOLO

Intel 장치를 쓰면 이게 주석처리가 되어있어야 하고, NVIDIA 장치를 쓰면 주석을 풀어줘야 하는데

저는 Jetson을 쓰기 때문에 풀어줬습니다.

 

6. /DeepSORT-YOLOv4-TensorRT-OpenVINO/tensorrt/yolo_layers_plugins에 있는 내용을 바꿔줍니다.

다음 경로로 이동해서 안에 내용을 싹다 지워줍니다.

그리고 /tensorrt_demos/plugins에 있는 내용을 모두 복사해서 붙여넣기 해줍니다.

tensorrt_demos 파일은 이전에 https://kumoh-irl.tistory.com/49?category=1228699 이 게시물을 따라하면 생깁니다.

 

7. 이제 실행할 준비가 됐습니다.

cd DeepSORT-YOLOv4-TensorRT-OpenVINO
python3 object_tracker.py -f trt -m ./yolov4.trt -n ./data/classes/obj.names -v 0 --dont_show False

-m 과 -n 뒤에 내용은 본인이 설정해놓은 것에 맞춰서 바꾸면 됩니다.

 

만약에 화면이 너무 크게 나온다고 하시는 분은

object_tracker.py 파일에 들어가서 101번째 줄을 보시면

    # begin video capture
    try:
        vid = cv2.VideoCapture(int(video_path))
    except:
        vid = cv2.VideoCapture(video_path)

이 내용이 있을 겁니다. 여기에

    # begin video capture
    try:
        vid = cv2.VideoCapture(int(video_path))
        vid.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
        vid.set(cv2.CAP_PROP_FRAME_HEIGHT,360)
    except:
        vid = cv2.VideoCapture(video_path)
        vid.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
        vid.set(cv2.CAP_PROP_FRAME_HEIGHT,360)

다음 내용을 추가해줍니다. 640, 360 같은 숫자는 본인이 원하는 크기로 바꿔서 사용하면 됩니다.

 

캠 대신에 동영상을 넣고 싶다하면 실행 명령어에 -v 0을 -v video.mp4 이런 식으로 바꿔주면 됩니다.

 

결과물을 저장하고 싶으면 -o video.mp4 이런 식으로 추가해주면 됩니다.

 

인식했던 대상을 잃어버리지 않고 잘 쫓아가는 모습을 확인할 수 있습니다.

 

 

댓글