今天是第七天我要介紹今年新出的yolo v8,以下是程式碼
YOLOv8 是 YOLO (You Only Look Once) 系列目標檢測模型的最新版本,由 Ultralytics 開發。YOLO 系列模型以其快速且準確的物體檢測能力聞名,廣泛應用於各種電腦視覺任務中。YOLOv8 在前幾代模型的基礎上進行了多方面的改進,旨在提高檢測性能、降低計算成本,並且提供更靈活的部署選項。
改進的架構設計:
強化的精度和速度:
靈活的模型大小選擇:
強大的支持社群和工具鏈:
import torch
from ultralytics import YOLO
import cv2
import numpy as np
# 1. 載入 YOLOv8 模型(從預訓練模型開始)
model = YOLO('yolov8n.pt') # 載入 YOLOv8 nano 模型
# 2. 訓練模型 (使用自訂資料集)
# 資料集的配置文件應該包含路徑、類別數量等必要信息
model.train(data='path/to/your/custom_dataset.yaml', epochs=50, imgsz=640)
# 3. 推論 - 處理多張圖片
image_paths = ['path/to/image1.jpg', 'path/to/image2.jpg'] # 替換成你的圖片路徑
results = model(image_paths, imgsz=640) # 進行推論,imgsz 是圖片大小
# 4. 顯示與保存結果
for i, result in enumerate(results):
result_image = result.plot() # 將檢測結果繪製在圖片上
cv2.imshow(f'Result {i+1}', result_image) # 顯示圖片
cv2.imwrite(f'output/result_{i+1}.jpg', result_image) # 保存圖片
cv2.waitKey(0)
cv2.destroyAllWindows()
# 5. 自訂後處理 - 只提取高置信度的檢測結果
for result in results:
boxes = result.boxes.numpy() # 提取邊界框
scores = result.scores.numpy() # 提取置信度分數
labels = result.labels.numpy() # 提取類別標籤
for box, score, label in zip(boxes, scores, labels):
if score > 0.5: # 只考慮置信度超過 0.5 的檢測
x1, y1, x2, y2 = map(int, box) # 邊界框坐標
print(f'Label: {label}, Score: {score}, Box: ({x1}, {y1}, {x2}, {y2})')
# 6. 保存模型權重
model.save("trained_yolov8_custom.pt") # 保存訓練後的模型
載入預訓練模型:
yolov8n.pt
) 作為初始模型進行載入。這個模型已經在 COCO 資料集上進行了預訓練,可以進行遷移學習。訓練模型:
epochs
) 和圖片大小 (imgsz
) 等參數。批次推論:
顯示與保存結果:
自訂後處理:
保存模型:
這個範例展示了如何使用 YOLOv8 進行自訂資料集的訓練、批次推論和結果處理。你可以根據自己的需求進行進一步的調整,例如添加資料增強、自訂損失函數或優化策略,以提升模型的性能。