大家好,我是微學(xué)AI,今天給大家介紹一下計算機視覺的應(yīng)用7-利用YOLOv5模型啟動電腦攝像頭進行目標(biāo)檢測,本文將詳細介紹YOLOv5模型的原理,YOLOv5模型的結(jié)構(gòu),并展示如何利用電腦攝像頭進行目標(biāo)檢測。文章將提供樣例代碼,以幫助讀者更好地理解和實踐YOLOv5模型。
目錄
-
引言
-
YOLOv5模型簡介
-
YOLOv5模型原理
3.1. 網(wǎng)絡(luò)結(jié)構(gòu)
3.2. 損失函數(shù)
3.3. 數(shù)學(xué)原理
-
利用電腦攝像頭進行目標(biāo)檢測
4.1. 環(huán)境配置
4.2. 樣例代碼
4.3. 結(jié)果展示
-
總結(jié)
1. 引言
目標(biāo)檢測是計算機視覺領(lǐng)域的一個重要研究方向,它旨在識別圖像中的物體并給出其位置信息。YOLO(You Only Look Once)是一種實時目標(biāo)檢測算法,自2016年提出以來,已經(jīng)發(fā)展到第五代(YOLOv5)。本文將詳細介紹YOLOv5模型的原理,并展示如何利用電腦攝像頭進行目標(biāo)檢測。
2. YOLOv5模型簡介
YOLOv5是YOLO系列的最新版本,相較于前幾代,YOLOv5在速度和精度上都有顯著提升。YOLOv5采用了一種端到端的深度學(xué)習(xí)方法,可以在單次前向傳播中完成目標(biāo)檢測任務(wù)。
3. YOLOv5模型原理
3.1. 網(wǎng)絡(luò)結(jié)構(gòu)
YOLOv5的網(wǎng)絡(luò)結(jié)構(gòu)主要包括:CSPDarknet53作為骨干網(wǎng)絡(luò),PANet和SPP模塊作為特征提取器,以及YOLOv5的檢測頭。
3.1.1. CSPDarknet53
CSPDarknet53是一種輕量級的骨干網(wǎng)絡(luò),它采用了CSP(Cross Stage Partial)結(jié)構(gòu),可以有效地減少參數(shù)數(shù)量和計算量。CSPDarknet53的網(wǎng)絡(luò)結(jié)構(gòu)如下:
CSPDarknet53由一系列卷積層、殘差塊和CSP模塊組成。其中,CSP模塊將輸入特征圖分成兩部分,一部分進行卷積操作,另一部分直接輸出。這種設(shè)計可以減少計算量,同時保持特征圖的信息流動。
3.1.2. PANet
PANet(Path Aggregation Network)是一種特征金字塔網(wǎng)絡(luò),用于解決目標(biāo)檢測中的尺度變化問題。
PANet由一系列卷積層、上采樣層和下采樣層組成。其中,下采樣層用于提取高層次的語義信息,上采樣層用于恢復(fù)低層次的細節(jié)信息。PANet將不同尺度的特征圖進行融合,可以有效地提高目標(biāo)檢測的精度。
3.1.3. SPP
SPP(Spatial Pyramid Pooling)是一種空間金字塔池化方法,用于解決目標(biāo)檢測中的尺度變化問題。
SPP由一系列池化層和卷積層組成。SPP將輸入特征圖分成多個尺度,每個尺度進行不同大小的池化操作,然后將池化結(jié)果拼接在一起。這種設(shè)計可以使網(wǎng)絡(luò)對不同尺度的目標(biāo)具有更好的適應(yīng)性。
3.1.4. 檢測頭
YOLOv5的檢測頭由一系列卷積層和全連接層組成。檢測頭的輸入是特征圖,輸出是目標(biāo)的類別、置信度和位置信息。YOLOv5采用了三種不同大小的錨框,每個錨框?qū)?yīng)一個預(yù)測框。檢測頭的輸出經(jīng)過解碼和非極大值抑制(NMS)處理后,可以得到最終的目標(biāo)檢測結(jié)果。
3.2. 損失函數(shù)
YOLOv5的損失函數(shù)包括分類損失、位置損失和置信度損失。
3.2.1. 分類損失
分類損失采用交叉熵損失,用于衡量模型對目標(biāo)類的分類準(zhǔn)確度。假設(shè)有 C C C 個類別, p i p_i pi? 表示模型對第 i i i 個類別的預(yù)測概率, t i t_i ti? 表示第 i i i 個類別的真實標(biāo)簽,則分類損失可以表示為:
L c l s = ? 1 N ∑ i = 1 N ∑ c = 1 C t i , c log ? ( p i , c ) L_{cls} = -\frac{1}{N}\sum_{i=1}^{N}\sum_{c=1}^{C}t_{i,c}\log(p_{i,c}) Lcls?=?N1?i=1∑N?c=1∑C?ti,c?log(pi,c?)
其中, N N N 表示樣本數(shù)量。
3.2.2. 位置損失
位置損失采用均方誤差損失,用于衡量模型對目標(biāo)位置的預(yù)測準(zhǔn)確度。假設(shè)有 B B B 個錨框, t i , j t_{i,j} ti,j? 表示第 i i i 個樣本中第 j j j 個錨框的位置信息, p i , j p_{i,j} pi,j? 表示模型對第 j j j 個錨框的位置信息的預(yù)測值,則位置損失可以表示為:
L l o c = 1 N B ∑ i = 1 N ∑ j = 1 B 1 , j o b j [ λ c o o r d ∑ n ∈ { x , y , w , h } ( t i , j n ? p i , j n ) 2 ] L_{loc} = \frac{1}{N_B}\sum_{i=1}^{N}\sum_{j=1}^{B}1_{,j}^{obj}\left[\lambda_{coord}\sum_{n\in\{x,y,w,h\}}(t_{i,j}^{n}-p_{i,j}^{n})^2\right] Lloc?=NB?1?i=1∑N?j=1∑B?1,jobj? ?λcoord?n∈{x,y,w,h}∑?(ti,jn??pi,jn?)2 ?
其中, N B N_B NB? 表示樣本中包含目標(biāo)的錨框數(shù)量, 1 i , j o b j 1_{i,j}^{obj} 1i,jobj? 表示第 i i i 個樣本中第 j j j 個錨框包含目標(biāo), λ c o o r d \lambda_{coord} λcoord? 表示位置損失的權(quán)重系數(shù)。
3.2.3. 置信度損失
置信度損失采用二值交叉熵損失,用于衡量模型對目標(biāo)存在性的預(yù)測準(zhǔn)確度。假設(shè)有 B B B 個錨框, t i , j o b j t_{i,j}^{obj} ti,jobj? 表示第 i i i 個樣本中第 j j j 個錨框是否包含目標(biāo), t i , j n o o b j t_{i,j}^{noobj} ti,jnoobj? 表示第 i i i 個樣本中第 j j j 個錨框是否不包含目標(biāo), p i , j o b j p_{i,j}^{obj} pi,jobj? 表示模型對第 j j j 個錨框是否包含目標(biāo)的預(yù)測值,則置信度損失可以表示為:
L c o n f = 1 N B ∑ i = 1 N ∑ j = 1 B [ 1 i , j o b j ∑ n ∈ { c o n f } ( t i , j n ? p i , j n ) 2 + λ n o o b j 1 i , j n o o b j ∑ n ∈ { c o n f } ( t i , j n ? p i , j n ) 2 ] L_{conf} = \frac{1}{N_B}\sum_{i=1}^{N}\sum_{j=1}^{B}\left[1_{i,j}^{obj}\sum_{n\in\{conf\}}(t_{i,j}^{n}-p_{i,j}^{n})^2 + \lambda_{noobj}1_{i,j}^{noobj}\sum_{n\in\{conf\}}(t_{i,j}^{n}-p_{i,j}^{n})^2\right] Lconf?=NB?1?i=1∑N?j=1∑B? ?1i,jobj?n∈{conf}∑?(ti,jn??pi,jn?)2+λnoobj?1i,jnoobj?n∈{conf}∑?(ti,jn??pi,jn?)2 ?
其中, λ n o o b j \lambda_{noobj} λnoobj? 表示不包含目標(biāo)的錨框的置信度損失的權(quán)重系數(shù)。
綜合上述三種損失,YOLOv5的總損失可以表示為:
L = L c l s + λ c o o r d L l o c + λ c o n f L c o n f L = L_{cls} + \lambda_{coord}L_{loc} + \lambda_{conf}L_{conf} L=Lcls?+λcoord?Lloc?+λconf?Lconf?
其中, λ c o o r d \lambda_{coord} λcoord? 和 λ c o n f \lambda_{conf} λconf? 分別表示位置損失和置信度損失的權(quán)重系數(shù)。
3.3. 數(shù)學(xué)原理
YOLOv5的數(shù)學(xué)原理主要包括錨框生成、預(yù)測框解碼和非極大值抑制(NMS)。
3.3.1. 錨框生成
假設(shè)有 k k k 個聚類中心,每個聚類中心對應(yīng)一個錨框,錨框的寬度和高度分別為 w i w_i wi? 和 h i h_i hi?。對于一張輸入圖像,假設(shè)其寬度和高度分別為 W W W 和 H H H,則可以生成 W × H × k W \times H \times k W×H×k 個錨框。每個錨框的中心坐標(biāo)為 ( x , y ) (x, y) (x,y),其中 x x x 和 y y y 的取值范圍分別為 [ 0 , W ] [0, W] [0,W] 和 [ 0 , H ] [0, H] [0,H]。錨框的寬度和高度為 w i w_i wi? 和 h i h_i hi?。
3.3.2. 預(yù)測框解碼
假設(shè)某個錨的中心坐標(biāo)為 ( x a , y a ) (x_a, y_a) (xa?,ya?),寬度和高度為 w a w_a wa? 和 h a h_a ha?,預(yù)測框的中心坐為 ( x , y ) (x, y) (x,y),寬度和高度為 w w w 和 h h h。則預(yù)測框的坐標(biāo)可以通過以下公式計算:
x = σ ( t x ) + x a y = σ ( t y ) + y a w = p w e t w h = p h e t h x = \sigma(t_x) + x_a \\ y = \sigma(t_y) + y_a \\ w = p_we^{t_w} \\ h = p_he^{t_h} x=σ(tx?)+xa?y=σ(ty?)+ya?w=pw?etw?h=ph?eth?
其中, σ \sigma σ 表示 sigmoid 函數(shù), t x t_x tx?、 t y t_y ty?、 t w t_w tw? 和 t h t_h th? 分別表示預(yù)測框的偏移量, p w p_w pw? 和 p h p_h ph? 分別表示錨框的寬度和高度。
3.3.3. 非極大值抑制
非極大值抑制(NMS)是一種常用的目標(biāo)檢測后處理方法,用于去除重疊檢測框。具體來說,NMS 的過程如下:
- 對于每個類別,按照置信度從高到低排序。
- 選擇置信度最高的框,將其與所有其他框進行重疊度計算。
- 去除與置信度最高的框重疊度大于一定閾值的框。
- 重復(fù)上述步驟,直到所有框都被處理。
NMS 的數(shù)學(xué)原理可以表示為:
S i = { j ∣ j > i , I o U ( b i , b j ) > θ } B = { b i ∣ i ∈ { 1 , 2 , . . . , n } } B ^ = { b i ∣ i ? S j , j ∈ S i } S_i = \{j | j > i, IoU(b_i, b_j) > \theta\} \\ B = \{b_i | i \in \{1, 2, ..., n\}\} \\ \hat{B} = \{b_i | i \notin S_j, j \in S_i\} Si?={j∣j>i,IoU(bi?,bj?)>θ}B={bi?∣i∈{1,2,...,n}}B^={bi?∣i∈/Sj?,j∈Si?}
其中, S i S_i Si? 表示與第 $i 個框重疊度大于閾值 θ \theta θ 的所有框的集合, B B B 表示所有框的集合, B ^ \hat{B} B^經(jīng)過 NMS 處理后剩余的框的集合。 I o U ( b i , b j ) IoU(b_i, b_j) IoU(bi?,bj?) 表示第 i i i 個框和第 j j j 個框的重疊度。
4. 利用電腦攝像頭進行目標(biāo)檢測
4.1. 環(huán)境配置
為了使用YOLOv5進行目標(biāo)檢測,首先需要配置環(huán)境。本文使用的環(huán)境為Python 3.7+,需要安裝的庫包括:torch、torchvision、opencv-python等。
4.2. 樣例代碼
import cv2
from yolov5 import YOLOv5
# 加載預(yù)訓(xùn)練的YOLOv5模型
model = YOLOv5("yolov5s.pt",device='cpu') # 選擇模型
# 打開攝像頭
cap = cv2.VideoCapture(0)
while True:
# 從攝像頭讀取幀
ret, frame = cap.read()
if not ret:
break
# 使用YOLOv5進行目標(biāo)檢測
results = model.predict(frame)
# 在幀上繪制檢測結(jié)果
for *xyxy, conf, cls in results.xyxy[0]:
label = f'{model.model.names[int(cls)]} {conf:.2f}'
cv2.rectangle(frame, (int(xyxy[0]), int(xyxy[1])), (int(xyxy[2]), int(xyxy[3])), (0, 0, 255), 2)
cv2.putText(frame, label, (int(xyxy[0]), int(xyxy[1]) - 10), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 0, 255), 2)
# 顯示幀
cv2.imshow('YOLOv5 Real-time Object Detection', frame)
# 按'q'鍵退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 釋放資源并關(guān)閉窗口
cap.release()
cv2.destroyAllWindows()
4.3. 結(jié)果展示
運行上述代碼,可以實時查看攝像頭畫面中的目標(biāo)檢測結(jié)果。YOLOv5能夠準(zhǔn)確識別出各種物體,并給出其位置信息。文章來源:http://www.zghlxwxcb.cn/news/detail-499615.html
5. 總結(jié)
本文到這里就結(jié)束了,其中主要詳細介紹了YOLOv5模型的原理,并展示了如何利用電腦攝像頭進行目標(biāo)檢測。YOLOv5在速度和精度上的優(yōu)勢使其在實時目標(biāo)檢測任務(wù)中具有廣泛的應(yīng)用前景。文章來源地址http://www.zghlxwxcb.cn/news/detail-499615.html
到了這里,關(guān)于計算機視覺的應(yīng)用7-利用YOLOv5模型啟動電腦攝像頭進行目標(biāo)檢測的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!