일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 파이썬 #업무자동화 #python
- ironpython
- 사무자동화
- YOLOv5
- pdf merge
- pyautogui
- Text To Speech
- pypdf2
- computervision
- Text-to-Speech
- pythonnet
- DeepLearning
- 업무자동화
- Google API
- google cloud
- processstart
- YOLOv7
- yolo
- objectdetection
- 사무자동화 #Selenium
- Today
- Total
Doarchive
YOLOv7 사용 방법 본문
해당 코드는 구글 코랩에서 작업함
https://colab.research.google.com/?hl=ko
데이터
사용한 커스텀 데이터 Data Annotation 작업은 https://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
!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
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 는 사용 불가라
import cv2
from google.colab.patches import cv2_imshow
img = cv2.imread('runs/detect/exp9/1.bmp')
cv2_imshow(img)
결과