1.簡(jiǎn)介
YOLOv8
是Ultralytics的最新版本YOLO。作為最先進(jìn)的 SOTA 模型,YOLOv8 建立在以前版本成功的基礎(chǔ)上,引入了新功能和改進(jìn),以增強(qiáng)性能、靈活性和效率。YOLOv8 支持全方位的視覺(jué) AI 任務(wù),包括檢測(cè)
、分割
、姿勢(shì)估計(jì)
、跟蹤
和分類(lèi)
。這種多功能性使用戶(hù)能夠在不同的應(yīng)用程序和域中利用YOLOv8的功能。模型中只需要設(shè)定不同的訓(xùn)練模型,就可以得到不同的檢測(cè)結(jié)果。
本文主要介紹如何使用該模型框架進(jìn)行CV中各種任務(wù)的推理使用,包含檢測(cè)
、分割
、姿勢(shì)估計(jì)
、跟蹤
,關(guān)于模型的訓(xùn)練等相關(guān)內(nèi)容,后續(xù)有空再進(jìn)行更新,感興趣的小伙伴,可以點(diǎn)贊關(guān)注我~謝謝
為了方便小伙伴們學(xué)習(xí),我已將本文的所有源碼、相關(guān)預(yù)訓(xùn)練模型及視頻等打包好,需要的小伙伴可以通過(guò)以下方式獲?。?/strong>
關(guān)注GZH【阿旭算法與機(jī)器學(xué)習(xí)】,回復(fù)【YOLOV8】可獲取本文所有源碼、預(yù)訓(xùn)練模型及示例圖片視頻數(shù)據(jù)
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-455498.html
2.環(huán)境安裝
2.1安裝torch相關(guān)庫(kù)
官網(wǎng)地址:https://pytorch.org/get-started/locally
安裝命令:
pip install torch torchvision torchaudio
2.2 獲取yolov8最新版本,并安裝依賴(lài)
github地址: https://github.com/ultralytics/ultralytics
通過(guò)克隆倉(cāng)庫(kù)到本地來(lái)獲得yolov8最新版本。
安裝依賴(lài)環(huán)境:
pip install ultralytics
3. 如何使用模型用于各種CV任務(wù)
安裝好yolov8需要的運(yùn)行環(huán)境之后,就可以直接使用模型了,目前,該模型可以直接用于檢測(cè)
、分割
、姿勢(shì)估計(jì)
、跟蹤
和分類(lèi)
這5類(lèi)檢測(cè)任務(wù)。
支持兩種運(yùn)行方式:
方式一:命令行形式示例
yolo TASK MODE ARGS
舉例: yolo detect predict model=yolov8n.pt source='1.jpg'
表示對(duì)圖片1.jpg進(jìn)行目標(biāo)檢測(cè)
參數(shù)說(shuō)明:
TASK (optional) 表示模型任務(wù)類(lèi)型,可以從列表 [detect, segment, classify, pose]選一個(gè). 分別代表檢測(cè)、分割、分類(lèi)、姿態(tài)檢測(cè)任務(wù)
MODE (required) 表示模型需要執(zhí)行的操作,可以從列表 [train, val, predict, export, track, benchmark]選一個(gè),分別代表訓(xùn)練、驗(yàn)證、預(yù)測(cè)、模型轉(zhuǎn)換、追蹤、基準(zhǔn)模型評(píng)估
ARGS (optional) 表示其他的一些參數(shù)設(shè)置,后面詳細(xì)說(shuō)明
方式二:python代碼形式示例
from ultralytics import YOLO
# 加載預(yù)訓(xùn)練模型,
model = YOLO('yolov8n.pt',task='detect')
# yolov8n.pt表示預(yù)訓(xùn)練模型
# task代表需要執(zhí)行的任務(wù):detect, segment, classify, pose
# 使用模型進(jìn)行指定任務(wù)
results = model(ARGS)
3.1 目標(biāo)檢測(cè)任務(wù)實(shí)現(xiàn)
檢測(cè)圖片代碼
from ultralytics import YOLO
import cv2
# 加載預(yù)訓(xùn)練模型
model = YOLO("yolov8n.pt", task='detect')
# model = YOLO("yolov8n.pt") task參數(shù)也可以不填寫(xiě),它會(huì)根據(jù)模型去識(shí)別相應(yīng)任務(wù)類(lèi)別
# 檢測(cè)圖片
results = model("./ultralytics/assets/bus.jpg")
res = results[0].plot()
cv2.imshow("YOLOv8 Inference", res)
cv2.waitKey(0)
檢測(cè)視頻代碼
import cv2
from ultralytics import YOLO
# Load the YOLOv8 model
model = YOLO('yolov8n.pt')
print('111')
# Open the video file
video_path = "1.mp4"
cap = cv2.VideoCapture(video_path)
# Loop through the video frames
while cap.isOpened():
# Read a frame from the video
success, frame = cap.read()
if success:
# Run YOLOv8 inference on the frame
results = model(frame)
# Visualize the results on the frame
annotated_frame = results[0].plot()
# Display the annotated frame
cv2.imshow("YOLOv8 Inference", annotated_frame)
# Break the loop if 'q' is pressed
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
# Break the loop if the end of the video is reached
break
# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()
3.2 分割任務(wù)實(shí)現(xiàn)
分割圖片代碼
from ultralytics import YOLO
import cv2
# Load a model
model = YOLO('yolov8n-seg.pt')
# Predict with the model
results = model('./ultralytics/assets/bus.jpg') # predict on an image
res = results[0].plot(boxes=False) #boxes=False表示不展示預(yù)測(cè)框,True表示同時(shí)展示預(yù)測(cè)框
# Display the annotated frame
cv2.imshow("YOLOv8 Inference", res)
cv2.waitKey(0)
分割視頻代碼
import cv2
from ultralytics import YOLO
# Load the YOLOv8 model
model = YOLO('yolov8n-seg.pt', task='segment')
# Open the video file
video_path = "1.mp4"
cap = cv2.VideoCapture(video_path)
# Loop through the video frames
while cap.isOpened():
# Read a frame from the video
success, frame = cap.read()
if success:
# Run YOLOv8 inference on the frame
results = model(frame)
# Visualize the results on the frame
annotated_frame = results[0].plot()
# annotated_frame = results[0].plot(boxes=False)不顯示預(yù)測(cè)框
# Display the annotated frame
cv2.imshow("YOLOv8 Inference", annotated_frame)
# Break the loop if 'q' is pressed
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
# Break the loop if the end of the video is reached
break
# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()
顯示預(yù)測(cè)框結(jié)果
不顯示預(yù)測(cè)框結(jié)果
將代碼中的boxes設(shè)為False即可:annotated_frame = results[0].plot(boxes=False)
3.3 追蹤任務(wù)
代碼如下:【與目標(biāo)檢測(cè)不同的是,每個(gè)物體有一個(gè)ID。】
from ultralytics import YOLO
# Load a model
model = YOLO('yolov8n.pt',task='detect')
# model = YOLO('yolov8n-seg.pt')
# Track with the model
results = model.track(source="1.mp4", show=True)
3.4 姿態(tài)檢測(cè)任務(wù)
姿態(tài)檢測(cè)(圖片)代碼
from ultralytics import YOLO
import cv2
# Load a model
model = YOLO('yolov8n-pose.pt') # load a pretrained model (recommended for training)
results = model('./ultralytics/assets/bus.jpg')
res = results[0].plot()
cv2.imshow("YOLOv8 Inference", res)
cv2.waitKey(0)
姿態(tài)檢測(cè)(視頻)代碼
import cv2
from ultralytics import YOLO
# Load the YOLOv8 model
model = YOLO('yolov8n-pose.pt', task='pose')
# Open the video file
video_path = "1.mp4"
cap = cv2.VideoCapture(video_path)
# Loop through the video frames
while cap.isOpened():
# Read a frame from the video
success, frame = cap.read()
if success:
# Run YOLOv8 inference on the frame
results = model(frame)
# Visualize the results on the frame
annotated_frame = results[0].plot()
# Display the annotated frame
cv2.imshow("YOLOv8 Inference", annotated_frame)
# Break the loop if 'q' is pressed
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
# Break the loop if the end of the video is reached
break
# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()
4. 模型中相關(guān)參數(shù)及結(jié)果說(shuō)明
4.1模型預(yù)測(cè)可以設(shè)置的參數(shù)
results = model(source= ‘./ultralytics/assets/bus.jpg’)
此處可以設(shè)置許多不同的參數(shù),參數(shù)說(shuō)明如下:
4.2 results[0].plot()圖形展示可以設(shè)置的參數(shù)說(shuō)明
results= model(img)
res_plotted = results[0].plot()
cv2.imshow("result", res_plotted)
4.3 模型支持的圖片與視頻格式
圖片格式:
視頻格式:
4.4 各任務(wù)檢測(cè)結(jié)果results信息說(shuō)明
上述各任務(wù)中的檢測(cè)結(jié)果results均為一個(gè)列表,每一個(gè)元素為result對(duì)象,包含以下屬性,不同任務(wù)中使用的屬性不相同。詳細(xì)說(shuō)明如下:
Results.boxes:表示Boxs對(duì)象,具有屬性和操作邊界框的方法
Results.masks:用于獲取分割相關(guān)信息
Results.probs:表示預(yù)測(cè)各類(lèi)別的概率
Results.orig_img:表示內(nèi)存中加載的原始圖像
Results.path:表示輸入圖像路徑的路徑
results = model("./ultralytics/assets/bus.jpg")
for result in results:
**# Detection 目標(biāo)檢測(cè)**
result.boxes.xyxy # box with xyxy format, (N, 4)
result.boxes.xywh # box with xywh format, (N, 4)
result.boxes.xyxyn # box with xyxy format but normalized, (N, 4)
result.boxes.xywhn # box with xywh format but normalized, (N, 4)
result.boxes.conf # confidence score, (N, 1)
result.boxes.cls # cls, (N, 1)
**# Segmentation 分割**
result.masks.data # masks, (N, H, W)
result.masks.xy # x,y segments (pixels), List[segment] * N
result.masks.xyn # x,y segments (normalized), List[segment] * N
**# Classification 分類(lèi)**
result.probs # cls prob, (num_class, )
總結(jié)
由于篇幅原因,本文只是介紹了如何使用預(yù)訓(xùn)練模型進(jìn)行相關(guān)的任務(wù)檢測(cè),關(guān)于模型的訓(xùn)練及其他相關(guān)內(nèi)容,后續(xù)有時(shí)間再進(jìn)行更新,感興趣的小伙伴,可以點(diǎn)贊關(guān)注我~謝謝
。
個(gè)人覺(jué)得這套YOLOv8框架還是十分強(qiáng)大的,一套框架幾乎可以解決大部分CV領(lǐng)域的檢測(cè)任務(wù),只需更換不同的訓(xùn)練模型就行,文章如果對(duì)你有幫助,感謝小伙伴們的一鍵3連哦~我們下次再見(jiàn)
。
為了方便小伙伴們學(xué)習(xí),我已將本文的所有源碼、相關(guān)預(yù)訓(xùn)練模型及視頻等打包好,需要的小伙伴可以通過(guò)以下方式獲取:
關(guān)注下方名片【阿旭算法與機(jī)器學(xué)習(xí)】,回復(fù)【YOLOV8】可獲取本文所有源碼、預(yù)訓(xùn)練模型及示例圖片視頻數(shù)據(jù)
參考:https://docs.ultralytics.co文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-455498.html
到了這里,關(guān)于【超詳細(xì)】【YOLOV8使用說(shuō)明】一套框架解決CV的5大任務(wù):目標(biāo)檢測(cè)、分割、姿勢(shì)估計(jì)、跟蹤和分類(lèi)任務(wù)【含源碼】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!