Data Mavericks
[YOLOv7 사용법] YOLOv7 Custom.ver 설치&실행 (egg.2) 본문
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
위 git을 터미널에 쳐서 설치
YOLOv7(yolov7.pt) 와 yolov7_training.pt도 git에서 다운 받아줌
처음 git한 파일에 압출 풀어주기
# COCO 2017 dataset http://cocodataset.org
# download command/URL (optional)
download: bash ./scripts/get_coco.sh
train: data/train.txt
val: data/valid.txt
test: #./coco/test-dev2017.txt
# 20288 of 40670 images, submit to https://competitions.codalab.org/competitions/20794
# number of classes
nc: 3
# class names
names: [ 'egg', 'fried_egg', 'boiled_egg' ]
customdataset이기 때문에 새로운 yaml파일 생성하여 custom.yaml 생성
nc : class 개수와 names 수정
train.txt(학습할 사진 위치 저장)와 valid.txt(test해볼 사진 위치 저장)를 생성
data는 egg라벨링 이전 포스트에서 라벨링한 eggs를 사용함
# parameters
nc: 3 # number of classes
depth_multiple: 1.0 # model depth multiple
width_multiple: 1.0 # layer channel multiple
# anchors
anchors:
- [12, 16, 19, 36, 40, 28] # P3/8
- [36, 75, 76, 55, 72, 146] # P4/16
- [142, 110, 192, 243, 459, 401] # P5/32
# yolov7 backbone
backbone:
# [from, number, module, args]
- [-1, 1, Conv, [32, 3, 1]] # 0
- [-1, 1, Conv, [64, 3, 2]] # 1-P1/2
- [-1, 1, Conv, [64, 3, 1]]
- [-1, 1, Conv, [128, 3, 2]] # 3-P2/4
- [-1, 1, Conv, [64, 1, 1]]
- [-2, 1, Conv, [64, 1, 1]]
- [-1, 1, Conv, [64, 3, 1]]
- [-1, 1, Conv, [64, 3, 1]]
- [-1, 1, Conv, [64, 3, 1]]
- [-1, 1, Conv, [64, 3, 1]]
- [[-1, -3, -5, -6], 1, Concat, [1]]
- [-1, 1, Conv, [256, 1, 1]] # 11
- [-1, 1, MP, []]
- [-1, 1, Conv, [128, 1, 1]]
- [-3, 1, Conv, [128, 1, 1]]
- [-1, 1, Conv, [128, 3, 2]]
- [[-1, -3], 1, Concat, [1]] # 16-P3/8
- [-1, 1, Conv, [128, 1, 1]]
- [-2, 1, Conv, [128, 1, 1]]
- [-1, 1, Conv, [128, 3, 1]]
- [-1, 1, Conv, [128, 3, 1]]
- [-1, 1, Conv, [128, 3, 1]]
- [-1, 1, Conv, [128, 3, 1]]
- [[-1, -3, -5, -6], 1, Concat, [1]]
- [-1, 1, Conv, [512, 1, 1]] # 24
- [-1, 1, MP, []]
- [-1, 1, Conv, [256, 1, 1]]
- [-3, 1, Conv, [256, 1, 1]]
- [-1, 1, Conv, [256, 3, 2]]
- [[-1, -3], 1, Concat, [1]] # 29-P4/16
- [-1, 1, Conv, [256, 1, 1]]
- [-2, 1, Conv, [256, 1, 1]]
- [-1, 1, Conv, [256, 3, 1]]
- [-1, 1, Conv, [256, 3, 1]]
- [-1, 1, Conv, [256, 3, 1]]
- [-1, 1, Conv, [256, 3, 1]]
- [[-1, -3, -5, -6], 1, Concat, [1]]
- [-1, 1, Conv, [1024, 1, 1]] # 37
- [-1, 1, MP, []]
- [-1, 1, Conv, [512, 1, 1]]
- [-3, 1, Conv, [512, 1, 1]]
- [-1, 1, Conv, [512, 3, 2]]
- [[-1, -3], 1, Concat, [1]] # 42-P5/32
- [-1, 1, Conv, [256, 1, 1]]
- [-2, 1, Conv, [256, 1, 1]]
- [-1, 1, Conv, [256, 3, 1]]
- [-1, 1, Conv, [256, 3, 1]]
- [-1, 1, Conv, [256, 3, 1]]
- [-1, 1, Conv, [256, 3, 1]]
- [[-1, -3, -5, -6], 1, Concat, [1]]
- [-1, 1, Conv, [1024, 1, 1]] # 50
# yolov7 head
head:
- [-1, 1, SPPCSPC, [512]] # 51
- [-1, 1, Conv, [256, 1, 1]]
- [-1, 1, nn.Upsample, [None, 2, 'nearest']]
- [37, 1, Conv, [256, 1, 1]] # route backbone P4
- [[-1, -2], 1, Concat, [1]]
- [-1, 1, Conv, [256, 1, 1]]
- [-2, 1, Conv, [256, 1, 1]]
- [-1, 1, Conv, [128, 3, 1]]
- [-1, 1, Conv, [128, 3, 1]]
- [-1, 1, Conv, [128, 3, 1]]
- [-1, 1, Conv, [128, 3, 1]]
- [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]]
- [-1, 1, Conv, [256, 1, 1]] # 63
- [-1, 1, Conv, [128, 1, 1]]
- [-1, 1, nn.Upsample, [None, 2, 'nearest']]
- [24, 1, Conv, [128, 1, 1]] # route backbone P3
- [[-1, -2], 1, Concat, [1]]
- [-1, 1, Conv, [128, 1, 1]]
- [-2, 1, Conv, [128, 1, 1]]
- [-1, 1, Conv, [64, 3, 1]]
- [-1, 1, Conv, [64, 3, 1]]
- [-1, 1, Conv, [64, 3, 1]]
- [-1, 1, Conv, [64, 3, 1]]
- [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]]
- [-1, 1, Conv, [128, 1, 1]] # 75
- [-1, 1, MP, []]
- [-1, 1, Conv, [128, 1, 1]]
- [-3, 1, Conv, [128, 1, 1]]
- [-1, 1, Conv, [128, 3, 2]]
- [[-1, -3, 63], 1, Concat, [1]]
- [-1, 1, Conv, [256, 1, 1]]
- [-2, 1, Conv, [256, 1, 1]]
- [-1, 1, Conv, [128, 3, 1]]
- [-1, 1, Conv, [128, 3, 1]]
- [-1, 1, Conv, [128, 3, 1]]
- [-1, 1, Conv, [128, 3, 1]]
- [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]]
- [-1, 1, Conv, [256, 1, 1]] # 88
- [-1, 1, MP, []]
- [-1, 1, Conv, [256, 1, 1]]
- [-3, 1, Conv, [256, 1, 1]]
- [-1, 1, Conv, [256, 3, 2]]
- [[-1, -3, 51], 1, Concat, [1]]
- [-1, 1, Conv, [512, 1, 1]]
- [-2, 1, Conv, [512, 1, 1]]
- [-1, 1, Conv, [256, 3, 1]]
- [-1, 1, Conv, [256, 3, 1]]
- [-1, 1, Conv, [256, 3, 1]]
- [-1, 1, Conv, [256, 3, 1]]
- [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]]
- [-1, 1, Conv, [512, 1, 1]] # 101
- [75, 1, RepConv, [256, 3, 1]]
- [88, 1, RepConv, [512, 3, 1]]
- [101, 1, RepConv, [1024, 3, 1]]
- [[102, 103, 104], 1, IDetect, [nc, anchors]] # Detect(P3, P4, P5)
위와 같이 yolov7-custom.yaml도 생성해준다
위의 nc값만 주의
터미널 창에
python train.py --workers 8 --device 0 --batch-size 8 --data data/custom.yaml --img 512 512 --cfg cfg/training/yolov7-custom.yaml --weights 'yolov7_training.pt' --name yolov7-custom --hyp data/hyp.scratch.custom.yaml
하면 끝
TypeError: No loop matching the specified signature and casting was found for ufunc greater
발생시 혹은 그냥 안되면
pip install --upgrade numpy==1.23.5
numpy버전을 지정해주면 해결된다
정상적으로 실행
학습 후 저장된 결과의 경로가 출력된 모습
python3 detect.py --weights runs/train/yolov7-custom2/weights/best.pt --conf 0.25 --img-size 640 --source data/img/1.jpg
를 터미널에 입력해주면
위치를 반환해주는데 해당위치로 간다면
학습 시키지 않은 이미지도 넣어보겠다
python3 detect.py --weights runs/train/yolov7-custom2/weights/best.pt --conf 0.25 --img-size 640 --source data/img/valid/ --save-txt --save-conf --exist-ok --name result
를 터미널에 입력
위치를 반환하는데 해당 위치로 가보면
3가지 유형 다 잘 나오는 모습을 확인할 수 있다
'CI' 카테고리의 다른 글
YOLOX custom.ver 모델 학습 (0) | 2023.08.28 |
---|---|
YOLOv5 custom.ver 모델 학습 (0) | 2023.08.24 |
[Yolo mark 사용법] Yolo mark로 라벨링 데이터 생성 + coco 형식으로 전환 (egg.1) (0) | 2023.07.13 |