1、环境安装
在github上下载ultralytics框架源码,安装库参照requestment.txt,yolov8对python版本有一定要求。如果使用pip install ultralytics==8.0.0,那么这个库会存放在环境/site_packages里面,更改源码时候,到该路径下更改。
2、数据处理
数据处理的方式和其它版本yolo一样,生成标签的txt文件,在ultralytics/cfg/datasets里面,设定自己的数据集yaml文件。
data.yaml
第一种写法
path: D:\dataset\Test # dataset root dir
train: images/train # train images (relative to 'path')
val: images/val # val images (relative to 'path')
test: # test images (optional)
# Classes
names:
0: C1
1: C2
第二种写法
train: images/train.txt # train images (relative to 'path')
val: images/val.txt # val images (relative to 'path')
test: images/test.txt# test images (optional)
nc:1 #num of class
# Classes
names:["c1","c2"]
3、模型训练
训练前:
1、配置ultralytics/models/v8/yolov8.yaml中的类别数目
2、配置ultralytics/cfg/default.yaml中的任务,以及其它配置信息
官方训练、验证、测试、模型导出代码:
yolo task=detect mode=train model=yolov8n.pt args...
classify predict yolov8n-cls.yaml args...
segment val yolov8n-seg.yaml args...
export yolov8n.pt format=onnx args...
训练:yolo task=detect mode=train model=weights/yolov8n.pt data=data/mydata.yaml batch=16 epochs=50 imgsz=640 workers=16 device=0
验证:yolo task=detect mode=val model=runs/detect/train3/weights/best.pt data=data/mydata.yaml device=0
预测:yolo task=detect mode=predict model=weights/best.pt source=data/test_images save=True
第二种写法:
# train model
from ultralytics import YOLO
# Load a model 三选一
model = YOLO('yolov8n.yaml') # build a new model from YAML 配置好模型和训练数据yaml文件信息
model = YOLO('yolov8n.pt') # load a pretrained model (recommended for training)
model = YOLO('yolov8n.yaml').load('yolov8n.pt') # build from YAML and transfer weights
# Train the model
model.train(data='coco128.yaml', epochs=100, imgsz=640)
#val model
from ultralytics import YOLO
# Load a model 二选一
model = YOLO('yolov8n.pt') # load an official model
model = YOLO('path/to/best.pt') # load a custom model
# Validate the model
metrics = model.val() # no arguments needed, dataset and settings remembered
metrics.box.map # map50-95
metrics.box.map50 # map50
metrics.box.map75 # map75
metrics.box.maps # a list contains map50-95 of each category
#predict
from ultralytics import YOLO
import cv2
import os,datetime
os.environ['KMP_DUPLICATE_LIB_OK']='True' #如果训练时候报Initializing libiomp5md.dll, but found libiomp5md.dll already initialized错误,加上这句
model = YOLO('best.pt') #已经训练好的模型
# Define path to the image file
source = 'img or video' #待预测的数据保存路径
# Run inference on the source
results = model(source, mode='predict', save=True) # list of Results objects
#export model
from ultralytics import YOLO
# Load a model
model = YOLO('yolov8n.pt') # load an official model
model = YOLO('path/to/best.pt') # load a custom trained
# Export the model
model.export(format='onnx')
自己做的检测代码,实现boxes的显示,可根据需求进行修改:
from ultralytics import YOLO
import cv2
import os,datetime,time
os.environ['KMP_DUPLICATE_LIB_OK']='True'
path_pt="x.pt"
model=YOLO(path_pt)
img_dir="./img"
image_files=[os.path.join(img_dir,file) for file in os.listdir(img_dir) if file.endswith((".jpg","png","jpeg","mp4"))]
for img_file in image_files:
mat_img=cv2.imread(img_file)
res=model(img_file,save=True,conf=0.4,iou=0.2,imgsz=640,device="cuda:0") #use cuda
res_coord=[]
outputs=res[0]
boxes=res[0].boxes # include xyxy xywh xywhn
boxes=boxes.xyxy
boxes=boxes.cpu() #cuda data transfer cpu data
boxes=boxes.tolist()
count=0
for box in boxes:
count+=1
width=int(box[2])-int(box[0])
height=int(box[3])-int(box[1])
x_center=(int(box[2])+int(box[0]))//2
y_center=(int(box[3])+int(box[1]))//2
res_coord.append((x_center,y_center))
img=cv2.circle(mat_img,(x_center,y_center),5,(0,0,255),-1)
date_time=datetime.datetime.strftime(datetime.datetime.now(),"%Y%m%d%H%M%S")
path=".res/"+date_time+".jpg"
cv2.imwrite(path,img)
res.coord.append(path) # include box(center) and the result path of img