Doarchive

YOLOv7 사용 방법 본문

Computer Vision/Deep learning

YOLOv7 사용 방법

오순발닦개 2023. 4. 5. 11:56

해당 코드는  구글 코랩에서 작업함 

https://colab.research.google.com/?hl=ko 

 

Google Colaboratory

 

colab.research.google.com

 

데이터 

사용한 커스텀 데이터   Data Annotation 작업은     https://app.roboflow.com/     에서 진행 함.

 

Sign in to Roboflow

Even if you're not a machine learning expert, you can use Roboflow train a custom, state-of-the-art computer vision model on your own data.

app.roboflow.com

 

이미지는 921장 사용 , 클래스는 2개 

 

roboflow에서 데이터를 내보낼때  YOLOV7 PyTorch 형식으로 Export 한다. 

 

 

YOLOv7 사용해보기 

 

1. 구글 드라이브 연결

import os

from google.colab import drive
drive.mount("/content/gdrive")

 

2.  내  드라이브 경로로 이동

%cd /content/gdrive/MyDrive

 

3.  학습관련 파일을 넣을 폴더 생성

if not os.path.isdir("guideDetection"): 
  os.makedirs("guideDetection")

 

4.  해당 경로로 이동

%cd guideDetection

 

 

5. YOLOv7  git 코드 복사     

https://github.com/WongKinYiu/yolov7

 

GitHub - WongKinYiu/yolov7: Implementation of paper - YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time

Implementation of paper - YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors - GitHub - WongKinYiu/yolov7: Implementation of paper - YOLOv7: Trainable bag-of...

github.com

 

!git clone https://github.com/WongKinYiu/yolov7.git

 

 

6. 학습에 사용할  YOLOv7 Whight 파일 선택  

 

나는 YOLOv7을 사용했다 

 

 

 

7.  YOLOv7 Weight 파일 다운로드 

!wget https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7.pt

해당 코드에서 yolov7 부분을 원하는 가중치 파일명으로 바꿔주면 된다 

 

 

8.  학습데이터를 넣을  폴더 생성

if not os.path.isdir("dataset"): 
  os.makedirs("dataset")

 

만들어진  폴더 구조를 보면 다음과 같다 

%ls
-------------------------------
dataset/  yolov7/  yolov7.pt

10. 학습데이터 업로드 

 

/content/gdrive/MyDrive/guideDetection/dataset 경로 안에

학습 시키고자 하는 데이터를 넣어준다 

데이터 폴더 구조는 다음과 같다 

 

학습 데이터 경로를 지정하는 data.yaml 파일  과,   test , train, valid 폴더

그리고 각 폴더안에   Images 와 labels 폴더를 만들고 데이터를 넣어준다 

 

data.yaml의 형식은 다음과 같다

test , train, valid 폴더의 경로지정

nc : 학습 시키고자 하는 클래스의 갯수 

names  각 클래스의 라벨 

 

 

각 데이터 이미지에 해당하는 label의 형식은 다음과 같다 

 

 

 

11. 학습에 사용할 가중치 파일에  해당하는 yaml 파일 수정

 

YOLOv7 Weight 파일을 사용하기 때문에 yolov7.yaml 수정해줘야 한다 

 yolov7.yaml  원본 파일은 그대로 놔두고  yolov7.yaml  복사한뒤  yolov7_guide.yaml 로 이름을 변경해준다     

 

 

 

 

해당 파일에서 nc 부분을  학습시키고자 하는 클래스의 개수로 수정한다 .

아래부분은 구주 관련 코드 이기때문에 수정하지 않아도 됨

 

 

12. 학습하기 

!python /content/gdrive/MyDrive/guideDetection/yolov7/train.py--device 0 --batch-size 16 --epochs 200 --img 640 640 --data /content/gdrive/MyDrive/guideDetection/dataset/data.yaml --hyp /content/gdrive/MyDrive/guideDetection/yolov7/data/hyp.scratch.custom.yaml --cfg /content/gdrive/MyDrive/guideDetection/yolov7/cfg/training/yolov7_guide.yaml --weights /content/gdrive/MyDrive/guideDetection/yolov7.pt --name yolov7_Guide
#학습에 사용할  train.py 파일경로 

!python /content/gdrive/MyDrive/guideDetection/yolov7/train.py

#batch-size 16 --epochs 200  사이즈지정

# batch size 가 너무 클 결우 cuda out of memory  에러가 뜰수 있으니 적당히 지정

# epochs  사이즈가 너무 크면 overfitting, 너무 작으면 underfitting 이 될 수 있으니 적당히 지정

--device 0 --batch-size 16 --epochs 200 

# 학습에 사용할 이미지 사이즈 
--img 640 640 

# data.yaml파일위치
--data /content/gdrive/MyDrive/guideDetection/dataset/data.yaml 

#수정 필요 없음
--hyp /content/gdrive/MyDrive/guideDetection/yolov7/data/hyp.scratch.custom.yaml 

#사용할 가중치에 해당하는 .yaml 위치 
--cfg /content/gdrive/MyDrive/guideDetection/yolov7/cfg/training/yolov7_guide.yaml 

#weight 파일 위치
--weights /content/gdrive/MyDrive/guideDetection/yolov7.pt 
--name yolov7_guide

 

 

학습 시  subprocess.CalledProcessError: Command 'git tag' returned non-zero exit status 128. 이런 에러가 발생하는데 

에러 수정 방법 글을 참고 하세요 

 

https://doa-oh.tistory.com/150

 

YOLOv7 학습 시 에러 발생 : subprocess.CalledProcessError: Command 'git tag' returned non-zero exit status 128.

2023-04-05 01:34:48.221041: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations. To enable the following instructions: AVX2 FMA, in other operations,

doa-oh.tistory.com

 

 

13. 테스트

# 테스트에 사용할 코드
!python detect.py 
# 학습한 모델 위치 best.pt , last.pt 가 있음
--weights /content/gdrive/MyDrive/guideDetection/runs/train/yolov7_Guide/weights/best.pt 
# confidence 가 70% 이하인 객체는 표시하지 않음
--conf 0.7 
# 테스트에 사용할 이미지의 사이즈를 주령줌
--img-size 640 
# 테스트에 사용할 이미지 경로 
--source /content/gdrive/MyDrive/guideDetection/testset/1.bmp 
# 파이토치용 traced_model이 필요하면 작성하지 않는다 
--no-trace
!python yolov7/detect.py --weights /content/gdrive/MyDrive/guideDetection/runs/train/yolov7_Guide/weights/best.pt --conf 0.7 --img-size 640 --source /content/gdrive/MyDrive/guideDetection/testset/1.bmp --no-trace

 

 

14. 결과 출력 

참고로 cv2.imshow  는 사용 불가라 

from google.colab.patches import cv2_imshow 이걸 사용해야함
 
import cv2
from google.colab.patches import cv2_imshow

img = cv2.imread('runs/detect/exp9/1.bmp')
cv2_imshow(img)

결과

 

728x90