이번에는 DeepSORT라는 것을 이용해서 Yolov4의 성능을 높여보겠습니다.
DeepSORT가 어떤 건인지는 아래에 잘 정리가 나와있으니 궁금하신 분은 여기에 한번 들어가 읽어보시는 것을 추천드립니다.
간단하게 말하면 칼만필터, 헝가리안 알고리즘 등을 이용해서 인식 성능을 향상시켰다고 보면 됩니다.
이전에 TenssorRT는 딥러닝 네트워크 최적화를 통해 fps가 잘 나오도록 성능을 높였다면
이번에는 인식하고 있는 물체가 여러개 존재하고, 중간에 화면 밖으로 나가거나 장애물에 가려져서 안 보였다가 다시 나타나도 같은 대상으로 라벨링이 유지되는 기능이 추가되었습니다.
이 기능은 특정 대상을 쫓아가다가 주변에 비슷한 대상이 나타나도 추적하던 대상을 계속 쫓아갈 수 있게 해줍니다.
git clone https://github.com/MatPiech/DeepSORT-YOLOv4-TensorRT-OpenVINO
뿐만 아니라, 중간에 잠깐 가려져도 이전에 쫓던 대상인 것을 알기 때문에 다른 대상과 착각을 하지 않습니다.
https://github.com/MatPiech/DeepSORT-YOLOv4-TensorRT-OpenVINO
다음 깃허브 내용을 통해 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
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 이런 식으로 추가해주면 됩니다.
'정나우 > Jetson' 카테고리의 다른 글
Jetson-OpenCR 간 시리얼 통신하는 법 (0) | 2022.05.12 |
---|---|
[YOLOv4] 인식 결과 저장하기 (0) | 2022.05.05 |
TensorRT를 이용해서 Yolov4 성능 향상시키기 (3) | 2022.04.12 |
[yolov4] Bounding box 중심점 출력하기 (0) | 2022.03.28 |
[Yolov4] 영상인식 커스텀 학습법 (0) | 2022.03.20 |
댓글