YOLOv8是一種物體檢測(cè)算法,是YOLO系列算法的最新版本。
YOLO(You Only Look Once)是一種實(shí)時(shí)物體檢測(cè)算法,其優(yōu)勢(shì)在于快速且準(zhǔn)確的檢測(cè)結(jié)果。YOLOv8在之前的版本基礎(chǔ)上進(jìn)行了一系列改進(jìn)和優(yōu)化,提高了檢測(cè)速度和準(zhǔn)確性。
YOLOv8采用了Darknet-53作為其基礎(chǔ)網(wǎng)絡(luò)架構(gòu)。Darknet-53是一個(gè)53層的卷積神經(jīng)網(wǎng)絡(luò),用于提取圖像特征。與傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)相比,Darknet-53具有更深的網(wǎng)絡(luò)結(jié)構(gòu)和更多的卷積層,可以更好地捕捉圖像中的細(xì)節(jié)和語(yǔ)義信息。
在YOLOv8中,還使用了一些技術(shù)來(lái)提高檢測(cè)性能。首先是使用了多尺度檢測(cè)。YOLOv8在不同的尺度上檢測(cè)物體,這樣可以更好地處理物體的大小變化和遠(yuǎn)近距離差異。其次是利用了FPN(Feature Pyramid Network)結(jié)構(gòu)來(lái)提取多尺度特征。FPN可以將不同層級(jí)的特征圖進(jìn)行融合,使得算法對(duì)不同大小的物體都有較好的適應(yīng)性。
此外,YOLOv8還利用了一種稱為CSPDarknet的網(wǎng)絡(luò)結(jié)構(gòu)來(lái)減少計(jì)算量。CSPDarknet使用了CSP(Cross Stage Partial)結(jié)構(gòu),在網(wǎng)絡(luò)的前向和后向傳播過(guò)程中進(jìn)行特征融合,從而減少了網(wǎng)絡(luò)的參數(shù)量和計(jì)算量。
在訓(xùn)練階段,YOLOv8使用了一種稱為CutMix的數(shù)據(jù)增強(qiáng)技術(shù)。CutMix將不同圖像的一部分進(jìn)行混合,從而增加了數(shù)據(jù)的多樣性和魯棒性。
總而言之,YOLOv8是一種快速而準(zhǔn)確的物體檢測(cè)算法,它通過(guò)引入Darknet-53網(wǎng)絡(luò)、多尺度檢測(cè)、FPN結(jié)構(gòu)、CSPDarknet結(jié)構(gòu)和CutMix數(shù)據(jù)增強(qiáng)等技術(shù),實(shí)現(xiàn)了對(duì)不同大小和距離的物體進(jìn)行快速、準(zhǔn)確的檢測(cè)。
本文介紹了基于Yolov8的火焰煙霧檢測(cè)模型,包括訓(xùn)練過(guò)程和數(shù)據(jù)準(zhǔn)備過(guò)程,同時(shí)提供了推理的代碼。對(duì)準(zhǔn)備計(jì)算機(jī)視覺(jué)相關(guān)的畢業(yè)設(shè)計(jì)的同學(xué)有著一定的幫助。
模型在線體驗(yàn):模型樂(lè)園
效果如下圖:
一、安裝YoloV8
yolov8官方文檔:主頁(yè) - Ultralytics YOLOv8 文檔
安裝部分參考:官方安裝教程
二、數(shù)據(jù)集準(zhǔn)備
火災(zāi)煙霧檢測(cè)數(shù)據(jù)集,檢測(cè)2種:火焰和煙霧。訓(xùn)練集總共6007張圖,驗(yàn)證集667張圖(部分?jǐn)?shù)據(jù)集圖片損壞,yolov8會(huì)自動(dòng)剔除損壞的圖片)。
示例圖片如下:
本文提供轉(zhuǎn)換好的yolov8格式數(shù)據(jù)集,可以直接放入yolov8中訓(xùn)練,數(shù)據(jù)集地址:火災(zāi)、煙霧檢測(cè)yolov8數(shù)據(jù)集
三、模型訓(xùn)練
1、數(shù)據(jù)集配置文件
在ultralytics/ultralytics/cfg/datasets目錄下添加fire_smoke.yaml,添加以下內(nèi)容(path修改為自己的路徑):
# Ultralytics YOLO ??, AGPL-3.0 license
# COCO 2017 dataset http://cocodataset.org by Microsoft
# Example usage: yolo train data=coco.yaml
# parent
# ├── ultralytics
# └── datasets
# └── coco ← downloads here (20.1 GB)
# 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, ..]
path: datasets/fire_smoke/fire_smoke-yolov8 # 替換為自己的數(shù)據(jù)集路徑
train: images/train
val: images/val
test: images/val
# Classes
names:
# 0: normal
0: fire
1: smoke
2、修改模型配置文件
在ultralytics/ultralytics/cfg/models/v8目錄下添加yolov8n_fire_smoke.yaml,添加以下內(nèi)容:
# Ultralytics YOLO ??, AGPL-3.0 license
# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect
# Parameters
nc: 2 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'
# [depth, width, max_channels]
n: [0.33, 0.25, 1024] # YOLOv8n summary: 225 layers, 3157200 parameters, 3157184 gradients, 8.9 GFLOPs
s: [0.33, 0.50, 1024] # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients, 28.8 GFLOPs
m: [0.67, 0.75, 768] # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients, 79.3 GFLOPs
l: [1.00, 1.00, 512] # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPs
x: [1.00, 1.25, 512] # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs
# YOLOv8.0n backbone
backbone:
# [from, repeats, module, args]
- [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
- [-1, 3, C2f, [128, True]]
- [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
- [-1, 6, C2f, [256, True]]
- [-1, 1, Conv, [512, 3, 2]] # 5-P4/16
- [-1, 6, C2f, [512, True]]
- [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32
- [-1, 3, C2f, [1024, True]]
- [-1, 1, SPPF, [1024, 5]] # 9
# YOLOv8.0n head
head:
- [-1, 1, nn.Upsample, [None, 2, 'nearest']]
- [[-1, 6], 1, Concat, [1]] # cat backbone P4
- [-1, 3, C2f, [512]] # 12
- [-1, 1, nn.Upsample, [None, 2, 'nearest']]
- [[-1, 4], 1, Concat, [1]] # cat backbone P3
- [-1, 3, C2f, [256]] # 15 (P3/8-small)
- [-1, 1, Conv, [256, 3, 2]]
- [[-1, 12], 1, Concat, [1]] # cat head P4
- [-1, 3, C2f, [512]] # 18 (P4/16-medium)
- [-1, 1, Conv, [512, 3, 2]]
- [[-1, 9], 1, Concat, [1]] # cat head P5
- [-1, 3, C2f, [1024]] # 21 (P5/32-large)
- [[15, 18, 21], 1, Detect, [nc]] # Detect(P3, P4, P5)
3、訓(xùn)練模型
使用如下命令訓(xùn)練模型,相關(guān)路徑更改為自己的路徑,建議絕對(duì)路徑:
yolo detect train project=deploy name=yolov8_fire_smoke exist_ok=True optimizer=auto val=True amp=True epochs=100 imgsz=640 model=ultralytics/ultralytics/cfg/models/v8/yolov8_fire_smoke.yaml data=ultralytics/ultralytics/cfg/datasets/fire_smoke.yaml
4、驗(yàn)證模型
使用如下命令驗(yàn)證模型,相關(guān)路徑根據(jù)需要修改:
yolo detect val imgsz=640 model=deploy/yolov8_fire_smoke/weights/best.pt data=ultralytics/ultralytics/cfg/datasets/fire_smoke.yaml
精度如下圖:
四、推理
訓(xùn)練好了模型,可以使用如下代碼實(shí)現(xiàn)推理,將權(quán)重放到同級(jí)目錄:
from PIL import Image
from ultralytics import YOLO
# 加載預(yù)訓(xùn)練的YOLOv8n模型
model = YOLO('best.pt')
# 在'bus.jpg'上運(yùn)行推理
image_path = 'fire_000137.jpg'
results = model(image_path) # 結(jié)果列表
# 展示結(jié)果
for r in results:
im_array = r.plot() # 繪制包含預(yù)測(cè)結(jié)果的BGR numpy數(shù)組
im = Image.fromarray(im_array[..., ::-1]) # RGB PIL圖像
im.show() # 顯示圖像
im.save('results.jpg') # 保存圖像
本教程訓(xùn)練好的權(quán)重連接:yolov8訓(xùn)練好的火災(zāi)煙霧檢測(cè)權(quán)重
五、界面開(kāi)發(fā)
界面開(kāi)發(fā)如下圖:
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-849790.html
本文提供完整的火災(zāi)煙霧檢測(cè)系統(tǒng)代碼,基于python實(shí)現(xiàn):基于yolov8的火災(zāi)檢測(cè)系統(tǒng),包含訓(xùn)練好的權(quán)重和推理代碼,GUI界面,支持圖片、視頻、攝像頭輸入,支持檢測(cè)結(jié)果導(dǎo)出文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-849790.html
到了這里,關(guān)于【深度學(xué)習(xí)目標(biāo)檢測(cè)】七、基于深度學(xué)習(xí)的火災(zāi)煙霧識(shí)別(python,目標(biāo)檢測(cè),yolov8)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!