주어진 비디오를 입력으로 받아 객체 감지 및 분석을 통해 사전에 정의된 434가지 상황 데이터 중 가장 유사한 상황을 예측하여 과실 비율을 측정하는 프로그램입니다.
이 프로젝트는 교통사고 영상을 입력 받아 사전에 정의된 434가지 사고 상황 중 가장 유사한 상황을 예측하고, 과실 비율을 측정하는 AI 기반 분석 프로그램입니다. 사용자는 비디오를 업로드하면 객체 감지 및 상황 인식을 통해 교통사고 과실 분석 결과를 받아볼 수 있습니다.
이 프로그램은 YOLOv8 객체 탐지와 Temporal Segment Networks(TSN)를 사용해 실시간으로 교통사고 데이터를 분석하여 높은 정확도의 사고 상황 예측을 가능하게 합니다. YOLOv8는 고속 객체 탐지에 최적화되어 사고 영상에서 표지판, 횡단보도 등을 빠르게 감지하는 데 적합하며, TSN은 교통사고와 같은 연속적인 이벤트를 시간에 따라 분석하는 데 강력한 성능을 발휘합니다. 이러한 기술의 조합을 통해 상황 인식 및 과실 비율 예측의 정확도를 높일 수 있었습니다.
프로젝트 진행 중 직면했던 주요 문제는 다양한 사고 상황에서 객체 인식의 일관성을 유지하는 것과 시간에 따른 사고 맥락을 정확하게 해석하는 것이었습니다.
graph LR
nID1[video];
nID2[YOLOv8\ndetection];
nID3[Temporal Segment Networks\nrecognizor];
nID4[text\nnegligence rate];
nID1--mp4-->nID2--dict-->nID3--set-->nID4
- 프로젝트 소개
- 주요 기술 스택
- 목차
- 요구 사항
- 데이터 설명
- 설치 및 실행
- API 주소
- 주요 기능
- 아키텍처 (디렉토리 구조 등)
- 모델 정확도
- 테스트
- Version Control
- 참고자료
- Docker 및 Python
- NVIDIA 그래픽카드 (VRAM 6GB 이상)
- 필요 패키지 목록은 requirements.txt에 명시
-
- 데이터 설명서
1-56 교통사고 영상 데이터_데이터설명서_v1.0.pdf - 데이터 사고유형별 index
Incident_Type_Classification_Table.csv
- 데이터 설명서
- docker 빌드
# 버전 수정 ARG PYTORCH="1.6.0" ARG CUDA="10.1" ARG CUDNN="7"
# build an image with PyTorch 1.6.0, CUDA 10.1, CUDNN 7. docker build -f ./docker/Dockerfile --rm -t accidentfaultai . # docker run --gpus all --shm-size=8g -it accidentfaultai docker run --gpus all --shm-size=8g -it -v G:/:/AccidentFaultAI/datasets/data accidentfaultai
#additional comments pip install mmcv==2.1.0 pip install -r requirements/build.txt python setup.py develop pip install pandas ##for yolo pip install --upgrade pip pip install numpy --upgrade pip install ultralytics pip install opencv-contrib-python==4.5.5.62 ##for fast api pip install fastapi pip install "uvicorn[standard]" pip install python-multipart pip install jinja2
- 경로 수정
## ./recognizer/single_tsn_recognizer.py config = '/AccidentFaultAI/model/TSN/best_model_0527/tsn_imagenet-pretrained-r50_8xb32-1x1x3-100e_kinetics400-rgb.py' checkpoint = '/AccidentFaultAI/model/TSN/best_model_0527/best_model_0527.pth' video = '/AccidentFaultAI/recognizer/demo_video/cc_5.mp4'
- run
python ./recognizer/single_tsn_recognizer.py
- 경로 수정
## ./recognizer/yolo_tsn_recognizer.py config = '/AccidentFaultAI/model/TSN/best_model_0527/tsn_imagenet-pretrained-r50_8xb32-1x1x3-100e_kinetics400-rgb.py' checkpoint = '/AccidentFaultAI/model/TSN/best_model_0527/best_model_0527.pth' video = '/AccidentFaultAI/recognizer/demo_video/cc_5.mp4'
- run
python ./recognizer/yolo_tsn_recognizer.py
- run
python ./fastapi/videoRecognizerAPI.py
-
API 엔드포인트:
localhost:8000/: 메인 페이지로, 간단한 비디오 업로드 기능 구현localhost:8000/predict: 비디오 입력에 대한 과실 예측 결과를 반환하는 엔드포인트
curl -X POST "<http://127.0.0.1:8000/predict>" -F "video=@C:/Users/Downloads/demo.mp4"
- 응답 형식: JSON
- 객체 탐지: YOLOv8 모델을 사용하여 교통사고 영상에서 차량, 표지판, 횡단보도 등 주요 객체를 빠르게 탐지하고 분류합니다.
- 상황 인식: TSN(Temporal Segment Networks)을 사용하여 연속적인 비디오 프레임의 맥락을 이해하고, 사전에 정의된 435가지 사고 상황 중 가장 유사한 상황을 예측합니다.
- 과실 비율 측정: 예측된 사고 상황을 바탕으로 과실 비율을 자동으로 계산하여 사용자에게 제공합니다.
- API를 통한 결과 제공: FastAPI를 통해 RESTful API 형태로 분석 결과를 제공하며, 비디오를 업로드하고 과실 비율 예측 결과를 JSON 형태로 받을 수 있습니다.
- 데이터 시각화 및 성능 평가: 주요 분석 결과에 대한 시각 자료 및 성능 지표를 제공하여, 모델의 정확도와 예측 신뢰도를 쉽게 확인할 수 있습니다.
recognizer/: TSN 및 YOLO 기반 인식 모듈model/: 학습된 모델 파일 및 구성docker/: Docker 설정 파일
| 모듈 | 모델 설명 | top_1 정확도 | top_5 정확도 | rate 정확도 | ±10% error rate 정확도 | 평균 코사인 유사도 |
|---|---|---|---|---|---|---|
| single_tsn_model | TSN(best_model_0522) | 20.6 | · | 29.9 | · | · |
| single_tsn_model | TSN(best_model_0527) | 23.0 | 46.8 | 32.0 | · | · |
| yolo_tsn_model | TSN(best_model_0527)+yolov8n | 22.1 | 47.2 | 31.8 | · | · |
| single_tsn_model | TSN(best_model_0529) | 24.67 | 48.90 | 33.50 | 46.83 | 81.54 |
| yolo_tsn_model | TSN(best_model_0529)+yolov8n | 23.50 | 49.48 | 33.43 | 47.3 | 81.58 |
| single_tsn_model | TSN(best_model_0531) | 21.50 | 45.36 | 30.63 | 44.92 | · |
-
모델 성능 평가
모듈 모델 설명 top_1 정확도 top_5 정확도 rate 정확도 ±10% error rate 정확도 평균 코사인 유사도 single_tsn_model TSN(best_model_0522) 20.6 · 29.9 · · single_tsn_model TSN(best_model_0527) 23.0 46.8 32.0 · · yolo_tsn_model TSN(best_model_0527)+yolov8n 22.1 47.2 31.8 · · single_tsn_model TSN(best_model_0529) 24.67 48.90 33.50 46.83 81.54 yolo_tsn_model TSN(best_model_0529)+yolov8n 23.50 49.48 33.43 47.3 81.58 single_tsn_model TSN(best_model_0531) 21.50 45.36 30.63 44.92 · -
테스트 코드 실행
# single_tsn_tester 실행 및 로그 파일 생성
python ./tester/single_tsn_tester.py > single_tsn_tester_log.txt
# yolo_tsn_tester 실행 및 로그 파일 생성
python ./tester/yolo_tsn_tester.py > yolo_tsn_log.txt| 버전 | 날짜 | 변경 내용 |
|---|---|---|
| 0.1 | 24.05.22 | 초기 repository 설정 및 초기 video-swin-transformer 버전 업로드 |
| 0.2 | 24.05.22 | main, video-swin-transformer의 readme.md 작성 |
| 0.3 | 24.05.22 | 사고 유형을 통해 과실 비율 등 검색 모듈 추가(accidentSerch) |
| 0.3.1 | 24.05.24 | main docker file 및 model 업로드 |
| 0.3.2 | 24.05.24 | main docker file 수정, single_tsn_teater 제작, main readme 환경 설정 섹션 추가 |
| 0.3.3 | 24.05.25 | video-swin-transformer를 main 폴더로 정리 |
| 0.3.4 | 24.05.27 | video-swin-transformer를 TSNAccidentAnalysis으로 분리, docker file 수정 |
| 0.4 | 24.05.27 | docker 환경 구축, single_tsn_model 테스트 |
| 0.4.1 | 24.05.27 | top_5 acc 추가, 모델(best_model_0527) 추가 |
| 0.5 | 24.05.27 | recognizer 제작 |
| 0.5.1 | 24.05.27 | incident_Type 컬럼 명 영어로 변경 및 모듈 대응 |
| 0.5.2 | 24.05.27 | yolo readme 추가 |
| 0.5.3 | 24.05.28 | yolo_tsn_model 테스트, detection filter 제작 |
| 0.6 | 24.05.28 | yolo_tsn_recognizer 제작 및 class화 |
| 0.6.1 | 24.05.28 | single_tsn_recognizer class화 및 패키지화 |
| 0.7 | 24.05.28 | fast api로 api 서버 제작 |
| 0.7.1 | 24.05.30 | best_model_0529 테스트, ±10% error rate 정확도 테스터 제작 |
| 0.7.2 | 24.05.30 | TSN(best_model_0529)+yolov8n 정확도 테스트 |
| 0.7.3 | 24.06.01 | TSN(best_model_0531) 정확도 테스트 |
| 0.8.0 | 24.06.02 | 코사인 유사도 test 모듈 제작 |
- YOLO v8 Car Crash Detection | Road Accident Detection Project (YouTube)
- GitHub Repository - freedomwebtech/yolov8-vehicle-crash-detection
- GitHub Repository - shubhankar-shandilya-india/Accident-Detection-Model: Accident Detection Model using Deep Learning, OpenCV, Machine Learning, AI
- YOLOv8 Custom Data Training Tutorial (YouTube)
- YOLO v5 Custom Training Tutorial (YouTube)
