Rubik Pi 3 프레임 드랍 문제 해결, 멀티스레딩

2025. 5. 7. 09:40·Qualcomm 기업과제

YOLO 모델을 활용한 객체 탐지 시스템을 구현하던 중, 프레임 드랍과 프로그램 종료라는 심각한 문제가 발생했다.

초기에는 원활히 작동했지만, 감지되는 객체 수가 1~2개를 초과하면 프레임이 급격히 떨어지기 시작했고,

이후에는 프로그램이 강제 종료되기도 했다.

 문제 원인 : 후처리 병목

처음에는 객체 탐지 이후 수행되는 후처리 과정에서 병목이 발생한다고 판단했다.
매 프레임마다 수행되는 작업은 다음과 같다:

  • 객체의 좌표 처리
  • 객체 트래킹
  • 속도 계산 및 과속 여부 판단
  • 프레임 캡처 및 클라우드에 전송

이러한 연산을 단일 스레드에서 처리하다 보니, 프레임당 처리 시간도 점차 증가했고, 이는 곧 시스템의 전체 성능 저하로 이어졌다.

(나는 그렇게 추측해본다..)

 구조 개선 시도 : 멀티스레드 도입

병목 현상을 해소하기 위해 시스템 구조를 멀티스레드 방식으로 리팩토링했다.
작업을 아래처럼 병렬 처리로 분리했다:

  • 객체 탐지 메인 스레드
    YOLO 모델을 통해 실시간으로 객체 탐지 수행
  • 후처리 스레드
    트래킹, 속도 계산 등의 연산 처리
  • 스크린샷 및 서버 전송 스레드
    과속 차량 발생 시 이미지 저장 및 서버 업로드

이 구조는 일정 부분 성능을 향상시켰지만, 여전히 객체 수가 많아지면 프레임 드랍이 발생했고,

시스템 안정성을 완전히 확보하기는 어려웠다.

최종 해결 : 모델 경량화

결국 병목의 근본 원인을 모델의 연산 부하라고 판단하여,

YOLO NAS에서 보다 가벼운 YOLOv5m으로 모델을 변경했다.


YOLOv5m은 연산량이 적어 실시간 처리에 적합하며, 탐지 정확도도 목적에 충분히 부합했다.
모델 변경 이후, 프레임 드랍 문제는 완전히 해소되었고 시스템도 안정적으로 작동하게 되었다.

야외 테스트 : 실제 상황에서의 평가

이후 실제 야외 환경에서 테스트를 진행했다.

차량을 대상으로 한 테스트 결과, 시스템은 예상한 대로 정상적으로 작동했으며,

감지 및 트래킹, 과속 판단, 스크린샷 전송까지 전체 흐름이 잘 연결되었다.

 

다만, 속도 측정의 정확도는 낮은 편이었다.
현재는 픽셀 단위의 중심 좌표 이동량만으로 속도를 계산하고 있는데,

이는 카메라 보정이나 실제 거리 정보 없이 계산되기 때문이다.


실제 테스트 결과, 차량의 실제 속도와 측정값 간의 오차가 많이 발생했다.

https://www.youtube.com/watch?v=tIWNcrL4li8

 

 

'Qualcomm 기업과제' 카테고리의 다른 글

졸업작품 마무리 (On-Device Ai 시스템 개발)  (4) 2025.06.09
🔧 속도 측정 알고리즘 개선  (1) 2025.05.21
Rubik Pi 3 - 현재까지 진행 상황  (0) 2025.05.04
Rubik Pi 3 보드에서 YOLO-NAS로 실시간 객체탐지 시스템 구축기  (0) 2025.04.26
Rubik Pi3 보드에서 객체 탐지 후, 메타데이터 받기  (0) 2025.04.14
'Qualcomm 기업과제' 카테고리의 다른 글
  • 졸업작품 마무리 (On-Device Ai 시스템 개발)
  • 🔧 속도 측정 알고리즘 개선
  • Rubik Pi 3 - 현재까지 진행 상황
  • Rubik Pi 3 보드에서 YOLO-NAS로 실시간 객체탐지 시스템 구축기
Minu Jin
Minu Jin
정보의 바다
  • Minu Jin
    뇌 구조가 바이너리
    Minu Jin
  • 전체
    오늘
    어제
    • 분류 전체보기
      • C프로그래밍
        • 오류해결
        • 개인 공부
        • Programming Lab(학교수업)
        • MemoryTracker
      • C++
        • 개인 공부
      • 자료구조(Data Structure)
      • ARM arch
        • Cortex-M
        • FreeRTOS
      • 컴퓨터 공학(Computer Science)
        • OS
        • 컴퓨터 구조
      • Qualcomm 기업과제
      • Linux
        • start_contribute()
        • start_analyse()
      • Web
      • 똥글
      • 백준
      • Git 학습
        • 오류해결
        • 학습중
      • Python
        • 오류해결
        • 개인 공부
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    커널
    이진 트리
    토발즈
    자료구조
    포인터
    commit
    파이썬
    소수
    Qualcomm
    드라이버 분석
    파일 입출력
    순환
    arm
    INIT
    rubikpi3
    Branch
    yolo
    스택
    시스템콜
    피보나치
    동적메모리
    리눅스
    C++
    rubik pi
    앤드류모튼
    커널 기여
    c언어
    Git
    버퍼
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Minu Jin
Rubik Pi 3 프레임 드랍 문제 해결, 멀티스레딩
상단으로

티스토리툴바