본문 바로가기
Project

CCTV 이상행동 판별 시스템 제작 - 03. YOLOv5 모델 훈련시키기

by EunjiBest 2022. 8. 17.

CCTV 이상행동 판별 시스템 제작 - 03. YOLOv5 모델 훈련시키기


CCTV 이상행동 판별 시스템 제작 - 02. 데이터셋 확보 및 정제 / YOLOv5 labels.txt 만들기

CCTV 이상행동 판별 시스템 제작 - 02. 데이터셋 확보 및 정제 계획은 완벽했다. 하지만 실전은 달랐다. 1. AI hub AI hub에 있는 데이터들을 다운 받아서 모델 돌리기만 하면 끝~!? 이라고 안일

eunjibest.tistory.com


↑↑↑↑↑↑↑
모든 데이터 준비가 끝났으니, 이제는 훈련시키는 일만 남았다.
(행복회로 돌리기)

이미지 디텍션하기에 최적화된 모델을 사용하고, 데이터도 만들었겠다 학습만 잘하면
프로젝트 끝?!인줄..ㅎ


YOLOv5 훈련 준비



데이터셋만 준비된다면 모델 자체를 커스텀하지 않는 이상 YOLOv5 모델은 학습시키기 쉽다.
평소에는 Colab으로 학습하지만, 이번엔 데이터양이 많이 때문에 로컬에서 학습시켜보기로했다.

easycoding님 영상을 보면 쉽게 로컬에서 학습 시킬 수 있는 방법을 알려주신다.
↓↓↓↓↓↓↓↓


하지만 cuda버전, 파이썬 버전 기타 등등 모두 아다리(?)가 맞지 않는다면,,,
코드 자체가 돌아가지 않기 때문에 설치하는것만 엄청나게 오래걸렸다..
이런 버전이나 경로문제를 마주했을 때, 컴공 지식(?)이 없다는 것이 서럽다ㅠㅠㅠ

파이토치 설치를 위한 CUDA + cuDNN 설치(cuda toolkit 11.3.0, cudnn v8.2.0)

내 소감 : 지난 몇달간 텐서플로우로 논문구현을 하려고 얼마나 애를 썼는지 모른다. 텐서플로우로 논문을 구현하려면, cuda 와 cudnn 모두 설치해줘야 했다. 한동안 열심히 여러차례 시도해봤지만

leonam.tistory.com


이 분 블로그에서 도움을 많이 받았다.

GitHub - ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite

YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite. Contribute to ultralytics/yolov5 development by creating an account on GitHub.

github.com


위 깃허브 주소에서 Code를 다운받아도 되고

git clone https://github.com/ultralytics/yolov5  # clone
cd yolov5
pip install -r requirements.txt  # install


다음 코드로 클론 시킬 수도 있다.
pip install -r requirements.txt로 모델 학습에 필요한 파이썬 라이브러리들을 설치할 수 있다.

데이터셋은
train -> images / label
valid -> images / label
경로로 준비해주고,

data 폴더에 데이터셋을 넣어준다.
.

.yaml 파일 만들기


YOLOv5 모델의 특별한(?)점은 yaml 형식의 파일로 학습을 시킨다.

train: E:\yolov5-master\data\cctv_dataset\train\images
val: E:\yolov5-master\data\cctv_dataset\valid\images

nc: 7
names: ['assault', 'fainting', 'property_damage', 'stairway_fall', 'theft', 'turnstile_trespassing', 'wandering']


train : train 이미지의 경로
valid : valid 이미지의 경로
nc : 카테고리 개수)
names : 카테고리 명 (0번부터 순서대로 쓰기!)

yaml파일을 만들면 data 폴더에 함께 넣어준다.


학습시키기


데이터셋, GPU, 기타 라이브러리 등..준비가 완료 되었다면
다음 코드를 입력하고 학습 시작한다.

!python train.py --img 640 --batch 16 --epochs 40 --data cctv.yaml --weights yolov5s.pt --cache


나는 40에포크를 돌렸다.
이제 컴퓨터가 열일하기를 기다리면 되는 줄 알았다...!




학습 결과


두구두구...

40 epochs completed in 14.372 hours.
Optimizer stripped from runs\train\exp6\weights\last.pt, 14.4MB
Optimizer stripped from runs\train\exp6\weights\best.pt, 14.4MB

Validating runs\train\exp6\weights\best.pt...
Fusing layers...
Model summary: 213 layers, 7029004 parameters, 0 gradients, 15.8 GFLOPs
Class Images Labels P R mAP@.5 mAP@.5:.95: 100%██████████| 2208/2208 [02:27<00:00, 14.98it/s]
all 17660 17982 0.34 0.405 0.376 0.281
assault 17660 3724 0.384 0.608 0.432 0.297
fainting 17660 613 0.0892 0.222 0.0625 0.0421
property_damage 17660 4023 0.124 0.00249 0.224 0.174
stairway_fall 17660 305 0.865 0.611 0.792 0.61
theft 17660 3168 0.00421 0.00316 0.041 0.026
turnstile_trespassing 17660 1774 0.766 0.989 0.95 0.724
wandering 17660 4375 0.15 0.401 0.129 0.0948
Results saved to runs\train\exp6


거의 15시간을 돌렸는데... mAP실화일까..ㅎ
우리의 목표는 최소 60이다. 30도 안나온 결과를 보고..갑자기 확! 막막해졌다...ㅎ

지금 이 포스팅을 하는 시점으로 생각하면 왜 결과가 안나왔는지 대충 알 것같다..
하지만
저 당시에는 데이터셋 정제도 했지, 데이터 양도 충분하지, 요즘 사물인식중에 제일 성능이 좋기로 유명한 YOLOv5로 돌렸는데 도대체 무엇이 문제인가?라는 생각을 했었다..


그럼 이제 어떻게 해야하는 것일까..?



반응형

댓글