Skip to content

개인형 이동장치의 교통법 위반 유형 탐지(CV)

Notifications You must be signed in to change notification settings

Hyeonseung0103/Mobility_Project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 

Repository files navigation

개인형 이동장치의 교통법 위반 유형 탐지

오토바이, 자전거, 킥보드와 같은 개인형 이동장치의 교통법 위반 유형 탐지를 위한 Object Detection 모델 개발을 주제로 진행한 프로젝트이다. 개인으로 진행했고, 데이터 수집, EDA 및 데이터 전처리, 모델링, 서비스 구현 등의 역할을 수행했다.

프로젝트 내용 설명 영상

프로젝트 개요 및 필요성

  • 오늘날 많은 사람들이 카카오 바이크, 지쿠터와 같은 개인형 이동수단을 이용하는만큼 발생하는 교통사고 건수도 해마다 증가하고 있는 추세다. 아래 그래프를 보면 알 수 있듯이 2021년에는 2017년보다 약 15배 이상이 되는 개인형이동수단 교통사고 건수를 기록하고 있다.


  • AI 모델이 위법 사항들을 자동으로 빠르게 탐지하여 바로 벌금을 부과하는 등의 처벌이 이루어진다면 사고를 발생시키는 이용자는 최대한 위법을 하지 않으려고 노력할 것이고, 교통사고가 사전에 예방되어 사고건수를 줄일 수 있다. 사고의 피해자가 될 수 있는 보행자 및 차량의 입장에서는 위험 요소가 사라져 안전하게 보행 혹은 주행을 할 수 있다는 안정성이 생길 것이고, 교통사고 발생시 사고현장을 처리하고 사고 정도에 따라 여러 인적 자원이 투입되어야 하는 경찰의 입장에서는 사고처리를 위한 비용과 이동수단 단속을 위한 인적 자원을 다른 현장에 사용할 수 있게 될 것이다.

  • 본 프로젝트는 위와 같은 기대효과에 달성하기위해 개인형 이동장치(오토바이, 자전거, 킥보드)의 교통법 위반 유형을 탐지하는 Object Detection 모델을 개발했다.

  • 목표: 개인형 이동장치의 위법사례로 인해 경찰, 이용자, 보행자 및 차량에게 발생할 수 있는 위험/불편한 요인들을 최소화 할 수 있도록 0.7이상의 mAP 50 Score를 기록하는 준수한 모델을 만들고, 해당 모델을 사용하여 실제로 개인형 이동장치의 교통법 위반 사례를 분류할 수 있는 웹페이지 형태의 서비스를 제공한다.

프로젝트 파이프라인

  1. 데이터는 AI-Hub에서 제공
  2. 제공 받은 데이터는 파이썬과 Open CV 라이브러리를 활용해 전처리(640 x 640 사이즈로 변환, 흑백 이미지로 변환)
  3. 딥러닝 프레임워크 중 하나인 Pytorch 기반의 YOLOv5s, YOLOv8n 모델 사용
  4. Flask를 활용하여 최종 모델을 실제로 사용해 볼 수 있도록 웹페이지 형태의 서비스 배포
image

데이터 설명

  • 수집 및 모델에 사용한 데이터: AI-Hub 사이트 제공(약 16,000개)

  • 학습/검증/테스트 데이터: 10,500/2,500/3,000개

  • 데이터 용량: 약 13GB

  • 원본 이미지

image

  • 라벨 이미지

image

모델링

객체 탐지 태스크에서 자주 사용되는 모델 중 하나인 YOLO 모델을 사용했다. YOLO는 Localization과 Classification이 하나의 stage에서 이루어지는 One-Stage-Detector이고, 해당 프로젝트에서는 mAP 50을 평가지표로 사용했다.

1. 사용한 모델

  1. YOLOv5s
  • YOLOv5 모델은 2020년 6월에 발표된 버전으로 그 중 YOLOv5s는 YOLOv5 s,m,l,xl 중 small을 나타내는 s에 해당하고 small이라는 의미처럼 크기가 작아서 속도가 빠르고 모델의 정확도는 다른 모델들에 비해 떨어진다는 특징을 가지고 있다.
  • Backbone 파트에서는 CSP(Cross-Stage Partial connetions)기법을 활용함으로써 특성 맵을 두 개의 경로로 나누어 더 풍부한 정보를 유지하면서도 더 깊은 네트워크를 구성하여 높은 정확도와 효율적인 특징 추출이 가능하게 했다.
  • Neck 파트에서는 PANet(Path Aggregation Network) 기법을 사용하여 여러 개의 특성 맵들을 다른 스케일로 업 스케일링하고 여러 경로를 통해 합쳐서 다양한 객체의 크기와 위치를 잘 탐지하고 적합한 특징을 생성할 수 있도록 했다.
  • 이전 YOLO모델들에 비해 크기를 줄였을 뿐만 아니라 YOLOv5m 모델을 사용했을 때 COCO 데이터셋에서 이전 모델들보다 더 높은 44.5 mAP를 기록했다. 또한, Pytorch 기반으로 구현되었기때문에 사용자가 쉽게 접근할 수 있다는 장점을 가지고 있다.
  • 본 프로젝트에서는 개발 환경을 고려하여 YOLOv5의 여러 개의 버전 중 모델의 크기가 가장 작고 속도가 빠른 YOLOv5s 모델을 사용했다.
  1. YOLOv8n
  • YOLOv8 모델은 2023년 1월에 발표된 버전으로 그 중 YOLOv8n은 YOLOv8 모델들 중 크기가 가장 작으면서 속도가 가장 빠른 모델이다.
  • YOLOv5 모델과 비교했을 때 Backbone의 첫번째 Convoluntion Layer를 3 x 3으로 교체하고, 특정 Convolution Layer를 삭제하는 등의 약간의 구조 변화가 존재한다.
  • 특히, 기존 YOLO와는 달리 완전히 새로운 레포지토리를 출시하여 객체 탐지, 인스턴스 세분화, 이미지 분류 등 다양한 태스크를 수행할 수 있는 통합 프레임워크로써 여러 도메인에서 활용이 가능하다.
  • YOLOv8m 모델을 사용했을 때 COCO 데이터셋에서 50.2 mAP를 달성한 것으로 보아 성능도 이전 모델들에 비해 크게 향상된 것을 알 수 있고 YOLOv5 모델과 마찬가지로 Pytorch를 기반으로 구현되어 접근 및 사용에 용이하다.
  • 본 프로젝트에서는 개발 환경을 고려하여 YOLOv8의 가장 크기가 작고 빠른 버전인 YOLOv8n을 사용했다.

2. 성능

  1. 1차 모델링(YOLOv5s)
  • 원본 데이터셋에서 아무런 전처리도 수행하지 않고, 하이퍼퍼라미터 또한 batch size 64와 epochs 7 외의 하이퍼파라미터들을 디폴트 값으로 가져갔을 때 검증 데이터에서 0.4의 mAP 수치를 기록했다. 이 0.4라는 수치를 baseline 수치로 설정하고 그 후로는 이미지의 사이즈를 640으로 줄여보고, 데이터셋에서 3000개의 데이터를 클래스 비율에 맞게 샘플링 하여 에포크 수를 크게 늘려보았다. 또한 옵티마이저를 SGD에서 Adam으로 수정하거나 코사인 스케줄링 기법을 사용해 학습률을 조정하는 방법 또한 시도해보았다.
  • 원본 데이터셋은 개인 이동장치의 위반 유형을 총 23개로 분리시켰는데 예를 들어, 횡단보도 위반이라는 유형이 있다고 했을 때 오토바이냐, 자전거냐, 킥보드냐에 따라 모두 다른 유형으로 파악하는 방법을 사용한 것이다. 따라서, 클래스가 너무 많아서 정확도가 떨어질 수 있다고 판단했고 한 가지 위반 유형을 개인 이동장치별로 분리시키는 것이 아니라 모두 통합하여 23개의 클래스를 8개로 축소한 데이터 또한 사용해보았다.
    • {0: 정상, 1: 보행자도로 통행 위반, 2: 동승자 탑승 위반, 3: 안전모 미착용 위반, 4: 무단횡단 위반, 5: 횡단보도 주행 위반, 6: 신호 위반, 7: 정지선 위반}
    • 위의 위반 유형은 8개로 축소시킨 유형이고 위 유형을 개인 이동장치별로 분류하면 원본과 같은 23개의 유형이 된다.
  • 결과적으로는 YOLOv5s 모델을 사용했을 때 batch 64, epochs 30 외에 별다른 하이퍼파라미터의 튜닝 없이 이미지를 흑백으로 변환시키고 클래스를 원본과 같이 23개로 사용했을 때 mAP50 0.42를 기록했다.
  1. 2차 모델링(YOLOv8n)
  • YOLOv5 모델을 학습하며 다양한 시도를 해보았지만 성능이 그리 좋지 않았다. 따라서, YOLO 모델의 가장 상위버전이면서 프로젝트 당시 가장 최근에 나온 모델인 YOLOv8 nano로 성능을 개선시켰다.
  • 데이터셋은 원본 이미지를 640으로 축소시키고 해당 이미지에 Gray Scale을 적용한 이미지를 원본 이미지에 추가하여 기존보다 갯수가 2배 많아진 데이터셋을 주로 사용했다.
  • Class 수 또한 기존의 23개를 사용했을 때보다 8개로 축소했을 때 성능이 더 좋았으며 최종적으로는 batch 64, epochs 25, lr 0.005, optimizer AdamW 하이퍼파라미터들을 사용했을 때 검증 mAP 0.751, 테스트 mAP 0.72를 기록했다.
  • 검증과 테스트 간의 성능 차이가 존재하긴하지만 critical한 수준은 아니라고 판단해서 해당 YOLOv8 nano 모델을 최종 모델로 선택했다.

결과

  • 원본 이미지

    image

  • 예측 이미지

    image

  • 예측 이미지를 보면 횡단보도 앞에 다수의 오토바이들이 정차해있고 횡단보도 주행 위반을 나타내는 5번 Class와 정지선 위반을 나타내는 7번 Class가 탐지되었다. 오토바이 이미지를 잘 탐지했을 뿐만 아니라 특히 정지선과 관련된 위반 사례를 적절히 탐지했다는 것을 확인할 수 있다.

시연 영상

영상에 대한 설명이 필요하다면 프로젝트 개요 및 필요성 파트 위의 프로젝트 내용 설명 영상 링크의 후반부 내용을 참고해주세요.

시연 영상 링크(설명은 위의 프로젝트 내용 설명 영상에서 참고)

개인형 이동수단 교통법 위반 유형 탐지 서비스 페이지로 이동하기

한계점 및 해결방안

  • CCTV 킥보드 데이터가 상대적으로 부족했기 때문에 블랙박스에서 연출한 데이터를 학습에 많이 사용했다.
    -> CCTV 킥보드 데이터를 추가로 수집하거나 데이터를 증강시킨다면 동승자 탑승위반과 같은 킥보드 데이터의 위반 유형들에 대해 더 정확한 예측을 수행함으로써 성능을 높일 수 있을 것이다.
  • 가장 힘들었던 GPU 성능의 한계로 다양한 시도를 하지 못했다.
    -> GPU 성능을 지원받을 수 있거나 더 좋은 환경을 결제한다면 데이터 수를 늘리거나 에포크 수를 많이 증가시켜본다던지 등의 방법을 추가로 시도해봄으로써 성능을 많이 높일 수 있을 것이다. 한 가지 대안으로는 YOLO보다 더 가벼운 다른 모델을 활용할 수 있다.
  • Oracle Cloud의 프리 티어 서버를 사용했기 때문에 서버 성능이 좋지 않았다.
    -> 모델을 조금 더 경량화하거나 더 좋은 서버를 결제했다면 서비스를 이용하는 사용자의 편의가 보다 개선되었을 것이다.

GPU와 서버 성능의 이슈로 어려움을 겪으면서 객체 탐지와 관련해서 좀 더 좋은 환경에서 작업 해보고싶다는 도전 정신이 생긴 프로젝트였다. 앞으로 이미지나 영상 처리와 같은 태스크를 좋은 환경에서 수행할 수 있다면 훨씬 더 다양한 방법들을 시도해보면서 실력을 키워나가고 싶다!

About

개인형 이동장치의 교통법 위반 유형 탐지(CV)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages