시작은 미약하였으나 , 그 끝은 창대하리라

YOLOv5 커스텀 데이터셋으로 학습하기 본문

인공지능/딥러닝 사이드 Project

YOLOv5 커스텀 데이터셋으로 학습하기

애플파ol 2022. 11. 4. 01:39

1) Yolov5를 설치함.

(참고 https://github.com/ultralytics/yolov5)

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

설치후

설치하고 나면 사진과 같은 폴더및 파일들이 생겨날것이다.

2) (핵심) Image detection 하고싶은 데이터 수집

   (나의 경우 포트홀,맨홀, 크랙 등등을 수집)

   (라벨링 툴 :https://github.com/heartexlabs/labelImg)

 

   -1)  train 폴더 생성후 images와 labels폴더를 생성한다.

   -2) 라벨링 툴을 이용하여 ' 클래스 넘버와, x1, y1, x2, y2 ' 의 좌표를 txt파일로 만들어준다.

   -3) txt파일은 labels 폴더에 ,이미지는 images 폴더에 넣어준다.

     

   -4) (주의)txt파일에서 주의해야 할점이 있는데 만약 클래스가 다 엉켜버리면 안된다는것이다.

         → 예를 들어 

              1열에 있는 클래스에 따라 인식하는것이 다르다는 것이다.

              3번 class는 Potholes, 0번은Longitudinal Cracks인식 , 5번은 Damaged paint, 2번은 Alligator Cracks

              등등 이렇게 다르다는 것이다.

              (만약 클래스가 섞여버린다면 그냥 처참한 최후를...)

 

3) data.yaml 파일을 만들어 준다. 

     (label studio(위의 라벨링 툴) 사용하면 아마 data.yaml 자동으로 만들어주는 것으로 알고 있다.)

      data 폴더안에 data.yaml 파일을 넣어주면 된다. 

       (class 순서에 맞게 써주자 , nc =클래스 개수)

 

4)  명령어를 통해 학습을 시켜보자! 

    1)  터미널에서 명령어 칠때 yolov5 로 들어가서 명령어를 입력해야 한다

cd yolov5

 

 

   2)  명령어 

        -GPU사용 X

python train.py --img 640 --batch 16 --epochs 30 --data data/data.yaml --cfg models/yolov5s.yaml --weights weights/yolov5s.pt

      --img    :   이미지 크기 

      --batch  :   배치크기

      --epochs : epoch크기

      --data  : 실행할 yaml파일의 위치 및 실행할 yaml파일명

      --cfg    : 아래에서 정한 모델 크기 (yolov5/models 폴더에 yaml파일로 저장되어 있음)

      --weights : 미리 학습된 모델로 학습할 경우 (yolov5s.pt 등의 형식으로 다운로드 가능)

      --name : 학습된 모델의 이름

     ( 파라미터의 더 자세한 설명은 python train.py -h 하면 나온다)

     

 

     -GPU사용 O

      뒷부분에 --device 사용할 번호

python train.py --img 640 --batch 16 --epochs 30 --data data/data.yaml --cfg models/yolov5s.yaml --weights weights/yolov5s.pt  --device 1,2

  (만약 RuntimeError: Unable to find a valid cuDNN algorithm to run convolution~~ 

     에러가 나면 GPU가 감당을 못하는것이니  --device 0,1,2,3 다 돌리던가 아니면 어쩔수 없다.)

    (이것땜에 고생했던 기억이..)

 

 

< 모델 종류 >

기본적으로 모델이 이렇게 존재하는데 크기가 클수록(우측으로 갈수록)  정확도가 높아지지만, GPU 및 시간을 많이 차지한다.

 

5) 돌린후 결과

결과물 디렉토리 runs/train/exp마지막번호 에 존재한다.

아래와 같은것을 확인할 수 있다.

 

6) 대망의 학습된 모델 사용하기

python detect.py --source ./inference/images/test.jpg --weights runs/train/exp22/weights/best.pt --conf 0.4

--source : 불러오는 이미지 경로 ( 나는 /inference/images/ 에 사진을 저장했다.)

--weight : 가장 좋은 best.pt의 경로

--conf : 정확도 설정 (0~1 까지 가능, 숫자가 1에 가까울수록 깐깐하게 평가함)

 

 

 

 

(어...저건 맨홀이 아닌데...)

무튼 이렇게 나오게 된다..

 

사진의 저장 디렉토리는 runs/detect/exp숫자 폴더에 저장이 될것이다.

 

 

 

 

 

 

기타 링크들 :

YOLOv5 docs  : https://github.com/ultralytics/yolov5

데이터셋 그나마 쉽게 구하기(?) :  https://universe.roboflow.com/

 

Comments