객체 감지 및 자체 데이터세트 훈련을 위해 Yolov8 사용
1. 전제조건 준비
- 소스코드 다운로드
https://github.com/ultralytics/ultralytics - YOLOv8 문서:
https://docs.ultralytics.com/
2. 코드 다운로드 및 환경 구성
Linux에서는 다음과 같은 명령어를 사용하여 환경을 구성할 수 있으며, 물론 Windows 환경이라면 압축된 패키지를 다운로드 받아 압축을 풀면 됩니다.
코드 다운로드
git clone https://github.com/ultralytics/ultralytics # clone repo
환경 구성
요구 사항.txt
에는 기본적으로 다음과 같은 필수 구성 환경이 포함되어 있습니다 .
3.10>=Python>=3.7
torch>=1.7.0
torchvision>=0.8.1
#创建虚拟环境
conda create --name pytorch_gpu python=3.8
activate pytorch_gpu
conda info --envs
#安装gpu版本pytorch
pip install torch==1.13.0 torchvision==0.14.0 torchaudio==0.13.0 -i https://pypi.tuna.tsinghua.edu.cn/simple/
#安装其他依赖
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
#安装ultralytics,可以直接使用yolo
pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple/
테스트 환경이 성공적으로 구성되었는지 확인합니다.
import torch
print(torch.__version__)
print(torch.cuda.is_available())
a = torch.Tensor(5,3)
a=a.cuda()
print(a)
3. 사전 훈련된 모델 다운로드
4가지 버전의 모델을 다운로드하려면 Yolo 공식 github로 이동하세요.
https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n.pt
https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8s.pt
https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8m.pt
https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8l.pt
https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x.pt
4. 예측
Yolo v8 공식 감지 카테고리
['person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck',
'boat', 'traffic light', 'fire hydrant', 'stop sign', 'parking meter', 'bench',
'bird', 'cat', 'dog', 'horse', 'sheep', 'cow', 'elephant', 'bear', 'zebra','giraffe',
'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee', 'skis', 'snowboard',
'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard',
'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl',
'banana', 'apple', 'sandwich', 'orange', 'broccoli','carrot', 'hot dog', 'pizza',
'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed', 'dining table', 'toilet',
'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone', 'microwave', 'oven',
'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear',
'hair drier', 'toothbrush']
예측 명령
yolo predict model=./weights/yolov8l_23_0320.pt source=./input/*.jpg save
사진이 저장됩니다
yolo predict model=./weights/yolov8l_23_0320.pt source=./a.mp4 save
영상이 저장됩니다
예측 코드
단일 이미지 예측
from pathlib import Path
import cv2
import numpy as np
import torch
from PIL import Image
from ultralytics import YOLO
from ultralytics.yolo.data.build import load_inference_source
from ultralytics.yolo.utils import ROOT, SETTINGS
MODEL = './weights/yolov8s.pt'
SOURCE = './input/bus.jpg'
#SOURCE = '0'
model = YOLO(MODEL)
img = cv2.imread(str(SOURCE))
output = model(source=img, save=True, conf=0.5,iou=0.7,save_txt=True,show=True)
cv2.waitKey(1000)
cv2.waitKey(0)
매개변수 설명
https://docs.ultralytics.com/cfg/
기차
1. 태그
이미지 및 라벨 준비
2. yolov8/datasets에 새로운 make_train_val.py 파일을 생성하고 훈련 세트와 검증 세트를 나눕니다.
'''
*******************************************************************************
函数名称: ReadImage
描 述: yolov8训练,数据集的准备,从yolo数据集txt文件,分为预测训练验证
作 者:狄云
编写时间:2023.09.4
yolo task=detect mode=train model=/home/diyun/Desktop/work/python_project/yolov8/weights/yolov8s.pt \
data=/home/diyun/Desktop/work/python_project/yolov8/datasets/my_train_weizao.yaml batch=2 imgsz=640 epochs=100 pretrained=True mosaic=0.0
*******************************************************************************/
'''
import os
import random
trainval_percent = 0.2
train_percent = 0.8
sets = ['train', 'test','val']
#xmlfilepath = 'data/Annotations'
#txtsavepath = 'data/ImageSets'
ImageSets_path='ImageSets/'
Imgpath = '/home/diyun/1_train_data/1_weizao/images' #图片文件夹
xmlfilepath = '/home/diyun/1_train_data/1_weizao/labels' #label文件存放地址
if not os.path.exists('ImageSets/'):
os.makedirs('ImageSets/')
total_xml = os.listdir(xmlfilepath)
num = len(total_xml)
list = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)
ftrainval = open('ImageSets/trainval.txt', 'w')
ftest = open('ImageSets/test.txt', 'w')
ftrain = open('ImageSets/train.txt', 'w')
fval = open('ImageSets/val.txt', 'w')
for i in list:
name = total_xml[i][:-4] + '\n'
if i in trainval:
ftrainval.write(name)
if i in train:
ftest.write(name)
else:
fval.write(name)
else:
ftrain.write(name)
ftrainval.close()
ftrain.close()
fval.close()
ftest.close()
for image_set in sets:
if not os.path.exists('labels/'):
os.makedirs('labels/')
image_ids = open(ImageSets_path+'%s.txt' % (image_set)).read().strip().split()
list_file = open('%s.txt' % (image_set), 'w')
for image_id in image_ids:
list_file.write(Imgpath+'/%s.jpg\n' % (image_id))
list_file.close()
3、my_train.yaml
새 교육 구성 파일 만들기
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
train: /home/diyun/Desktop/work/python_project/yolov8/datasets/train.txt # voc_annotation.py生成的train.txt的路径
val: /home/diyun/Desktop/work/python_project/yolov8/datasets/val.txt # voc_annotation.py生成的val.txt的路径
# Classes
names:
0: weizao
4. 훈련 시작
yolo task=detect mode=train model=/home/diyun/Desktop/work/python_project/yolov8/weights/yolov8s.pt \
data=/home/diyun/Desktop/work/python_project/yolov8/datasets/my_train_weizao.yaml batch=2 imgsz=640 epochs=100 pretrained=True mosaic=0.0