YOLO 的全稱“You Only Look Once”,它通過(guò)引入一種與傳統(tǒng)方法截然不同的方法,徹底改變了物體檢測(cè)領(lǐng)域。YOLO 擺脫了傳統(tǒng)的提案驅(qū)動(dòng)技術(shù),創(chuàng)新地在一次傳遞中直接從完整圖像中預(yù)測(cè)邊界框和類別概率。這種突破常規(guī)的做法不僅簡(jiǎn)化了物體檢測(cè)流程,還顯著加快了檢測(cè)速度,使實(shí)時(shí)檢測(cè)不僅成為可能,而且成為現(xiàn)實(shí)。
概念概述
YOLO 創(chuàng)新方法的核心是將對(duì)象檢測(cè)視為單一回歸問(wèn)題的概念,從圖像像素直接到邊界框坐標(biāo)和類別概率。以下是 YOLO 如何實(shí)現(xiàn)這一點(diǎn)的細(xì)分:
-
網(wǎng)格劃分:YOLO 首先將輸入圖像劃分為S×S網(wǎng)格。每個(gè)網(wǎng)格單元負(fù)責(zé)預(yù)測(cè)中心位于該單元內(nèi)的物體。這種劃分使模型能夠定位物體并確保檢測(cè)分布在圖像上。
-
邊界框預(yù)測(cè):對(duì)于每個(gè)網(wǎng)格單元,YOLO 會(huì)預(yù)測(cè)多個(gè)邊界框。每個(gè)邊界框預(yù)測(cè)包括坐標(biāo)(中心、寬度和高度)以及置信度分?jǐn)?shù),該分?jǐn)?shù)反映了邊界框的準(zhǔn)確性以及該框包含特定對(duì)象的可能性。
-
類別概率:除了邊界框預(yù)測(cè)之外,每個(gè)網(wǎng)格單元還會(huì)預(yù)測(cè)其檢測(cè)到的對(duì)象屬于哪個(gè)類別的概率。這些概率取決于包含對(duì)象的網(wǎng)格單元。
-
組合預(yù)測(cè):YOLO 流程的最后一步是將邊界框預(yù)測(cè)與類別概率相結(jié)合,以提供完整的檢測(cè)輸出。每個(gè)邊界框的置信度分?jǐn)?shù)由類別概率調(diào)整,確保檢測(cè)既反映邊界框的準(zhǔn)確性,又反映模型對(duì)對(duì)象類別的置信度。
YOLO 架構(gòu)揭曉
從圖像到預(yù)測(cè)
YOLO 架構(gòu)是一個(gè)引人注目的例子,展示了如何利用卷積神經(jīng)網(wǎng)絡(luò) (CNN) 完成物體檢測(cè)等復(fù)雜任務(wù)。與可能輸出單個(gè)類別概率向量的傳統(tǒng) CNN 不同,YOLO 架構(gòu)旨在輸出包含邊界框預(yù)測(cè)和類別概率的多維張量。以下是它如何處理圖像的概述:
-
卷積主干:YOLO 使用一系列卷積層作為主干。這些層負(fù)責(zé)從輸入圖像中提取特征。這些層的架構(gòu)在 YOLO 的不同版本(例如 YOLOv3、YOLOv4 等)之間可能有所不同,每個(gè)版本都旨在在速度和準(zhǔn)確性之間取得平衡。
-
特征提取:當(dāng)圖像穿過(guò)卷積層時(shí),網(wǎng)絡(luò)會(huì)提取和下采樣特征,從而創(chuàng)建一個(gè)豐富的特征圖,其中包含檢測(cè)所需的基本信息。
-
預(yù)測(cè)層:在網(wǎng)絡(luò)末端,YOLO 過(guò)渡到預(yù)測(cè)層,該層通常是具有特定數(shù)量濾波器的卷積層。這些濾波器對(duì)應(yīng)于每個(gè)網(wǎng)格單元的預(yù)測(cè)向量,包括邊界框坐標(biāo)、置信度分?jǐn)?shù)和類別概率。
-
輸出張量:輸出是形狀為 (S×S×(B×5+C)) 的張量,其中S×S是網(wǎng)格大小,B是每個(gè)網(wǎng)格單元的邊界框數(shù)量,55 表示四個(gè)邊界框坐標(biāo)加上置信度分?jǐn)?shù),C表示類別數(shù)量。此張量封裝了網(wǎng)絡(luò)對(duì)圖像進(jìn)行的所有檢測(cè)。
代碼片段:加載和使用預(yù)訓(xùn)練的 YOLO 模型
以下是一個(gè)簡(jiǎn)化的 Python 示例,演示如何使用流行的深度學(xué)習(xí)框架(例如 TensorFlow 或 PyTorch)加載預(yù)訓(xùn)練的 YOLO 模型并對(duì)圖像執(zhí)行對(duì)象檢測(cè)。此示例假設(shè)使用 PyTorch 并且可以使用預(yù)訓(xùn)練的 YOLO 模型:
import torch
import torchvision.transforms as transforms
from PIL import Image
# Load a pre-trained YOLO model
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)
# Function to perform object detection
def detect_objects(image_path):
# Load and transform the image
image = Image.open(image_path)
transform = transforms.Compose([
transforms.ToTensor(),
])
image = transform(image).unsqueeze(0) # Add batch dimension
# Perform inference
model.eval() # Set the model to evaluation mode
with torch.no_grad():
predictions = model(image)
# Process predictions
# Note: The output format can vary, so adjust the processing as needed
for pred in predictions[0]:
bbox = pred[:4] # Bounding box coordinates
score = pred[4] # Confidence score
class_id = pred[5] # Class ID
print(f'Class: {class_id}, Score: {score}, BBox: {bbox}')
# Example usage
detect_objects('path/to/your/image.jpg')
此代碼片段提供了加載 YOLO 模型和執(zhí)行對(duì)象檢測(cè)的基本框架。實(shí)際實(shí)現(xiàn)細(xì)節(jié)(例如處理輸出格式和置信度分?jǐn)?shù)的閾值)將取決于所使用的 YOLO 的具體模型和版本。
訓(xùn)練 YOLO 模型
學(xué)會(huì)觀察
訓(xùn)練 YOLO 模型涉及一個(gè)獨(dú)特而復(fù)雜的過(guò)程,這主要是由于其獨(dú)特的輸出格式以及同時(shí)預(yù)測(cè)多個(gè)邊界框和類概率。此訓(xùn)練過(guò)程的一個(gè)關(guān)鍵方面是 YOLO 采用的專門損失函數(shù),該函數(shù)旨在有效地最小化預(yù)測(cè)任務(wù)不同部分之間的誤差。此損失函數(shù)通常包含幾個(gè)部分:
-
定位損失:損失函數(shù)的這一部分懲罰邊界框預(yù)測(cè)位置和大小的誤差。它通常關(guān)注預(yù)測(cè)邊界框坐標(biāo)與地面真實(shí)坐標(biāo)之間的差異,通常使用諸如平方誤差和之類的度量。
-
置信度損失:此組件懲罰邊界框置信度分?jǐn)?shù)中的錯(cuò)誤。置信度分?jǐn)?shù)反映了模型對(duì)邊界框包含物體的確定性以及模型認(rèn)為邊界框的準(zhǔn)確度。對(duì)于包含物體的邊界框和不包含物體的邊界框,計(jì)算的損失不同,以幫助模型區(qū)分這兩種情況。
- 分類損失:損失函數(shù)的這一部分針對(duì)每個(gè)網(wǎng)格單元的類別概率預(yù)測(cè)。它通常涉及預(yù)測(cè)概率和獨(dú)熱編碼的真實(shí)類別標(biāo)簽之間的分類交叉熵?fù)p失。
代碼片段:YOLO 的訓(xùn)練設(shè)置
下面是一個(gè)簡(jiǎn)化的示例,演示了訓(xùn)練 YOLO 模型的設(shè)置。此示例是概念性的,旨在說(shuō)明配置訓(xùn)練過(guò)程所涉及的關(guān)鍵組件,包括損失函數(shù)和優(yōu)化。實(shí)際實(shí)施將根據(jù) YOLO 的具體版本和所使用的深度學(xué)習(xí)框架而有所不同:
import torch
import torch.optim as optim
# Assuming yolo_model is your YOLO model and train_loader is your data loader
# Define the optimizer
optimizer = optim.Adam(yolo_model.parameters(), lr=0.001)
# Placeholder for the YOLO loss function
# Note: You'll need to define this based on the specific YOLO version and its output format
def yolo_loss(predictions, targets):
# Compute localization loss, confidence loss, and classification loss
# localization_loss = ...
# confidence_loss = ...
# classification_loss = ...
# Combine the losses
total_loss = localization_loss + confidence_loss + classification_loss
return total_loss
# Training loop
for epoch in range(num_epochs):
for images, targets in train_loader: # Assuming targets contain ground truth
optimizer.zero_grad() # Zero the gradients
# Forward pass
predictions = yolo_model(images)
# Compute loss
loss = yolo_loss(predictions, targets)
# Backward pass and optimize
loss.backward()
optimizer.step()
print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item()}')
此代碼提供了設(shè)置 YOLO 模型訓(xùn)練循環(huán)的基本框架,重點(diǎn)介紹了使用專門的損失函數(shù)來(lái)解決 YOLO 預(yù)測(cè)任務(wù)的獨(dú)特方面。實(shí)際損失函數(shù)的實(shí)現(xiàn)、優(yōu)化器的選擇和其他訓(xùn)練超參數(shù)可以根據(jù)任務(wù)和數(shù)據(jù)集的具體要求進(jìn)行調(diào)整。
YOLO 實(shí)際應(yīng)用:真實(shí)世界的應(yīng)用
超越基礎(chǔ)
YOLO 物體檢測(cè)系統(tǒng)以其速度和準(zhǔn)確性而聞名,使其成為需要實(shí)時(shí)處理和可靠檢測(cè)的眾多實(shí)際應(yīng)用的理想選擇。它處理動(dòng)態(tài)和具有挑戰(zhàn)性的環(huán)境的能力已在各個(gè)領(lǐng)域得到證實(shí):
-
監(jiān)控:YOLO 的實(shí)時(shí)處理能力在監(jiān)控系統(tǒng)中特別有用,它可以同時(shí)檢測(cè)和跟蹤多個(gè)物體,例如個(gè)人、車輛或任何異常活動(dòng),從而增強(qiáng)公共和私人空間的安全措施。
-
自動(dòng)駕駛:在自動(dòng)駕駛汽車領(lǐng)域,YOLO 有助于完成檢測(cè)和分類汽車、行人和交通標(biāo)志等物體的關(guān)鍵任務(wù),使汽車能夠做出明智的決策并安全行駛。
-
野生動(dòng)物監(jiān)測(cè):YOLO 已被用于野生動(dòng)物監(jiān)測(cè)項(xiàng)目,它有助于自動(dòng)檢測(cè)和識(shí)別自然棲息地中的物種,協(xié)助保護(hù)工作和生物多樣性研究。
-
零售和庫(kù)存管理:在零售領(lǐng)域,YOLO 可以通過(guò)實(shí)時(shí)檢測(cè)和跟蹤貨架上的產(chǎn)品來(lái)簡(jiǎn)化庫(kù)存管理,并可以通過(guò)交互式顯示和監(jiān)控來(lái)增強(qiáng)客戶體驗(yàn)。
代碼片段:將 YOLO 應(yīng)用于視頻流
以下示例演示了如何使用 Python 應(yīng)用預(yù)先訓(xùn)練的 YOLO 模型來(lái)處理和顯示視頻流中的檢測(cè)結(jié)果。此示例使用 OpenCV 進(jìn)行視頻處理,并假設(shè)使用基于 PyTorch 的 YOLO 模型:
import cv2
import torch
# Load the pre-trained YOLO model
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)
# Initialize the video stream (replace '0' with a video file path for processing a video file)
cap = cv2.VideoCapture(0)
while True:
# Read frames from the video stream
ret, frame = cap.read()
if not ret:
break
# Convert the frame to the format expected by the model
frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
results = model([frame_rgb], size=640) # Adjust size as needed
# Render the detections on the frame
frame_with_detections = results.render()[0]
# Convert the frame back to BGR for displaying with OpenCV
frame_with_detections_bgr = cv2.cvtColor(frame_with_detections, cv2.COLOR_RGB2BGR)
# Display the frame with detections
cv2.imshow('YOLO Object Detection', frame_with_detections_bgr)
# Break the loop when 'q' is pressed
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# Release the video stream and close windows
cap.release()
cv2.destroyAllWindows()
此代碼片段展示了 YOLO 在視頻流中實(shí)時(shí)檢測(cè)物體的簡(jiǎn)單性和強(qiáng)大功能。通過(guò)高效處理視頻的每一幀并疊加檢測(cè)到的物體,YOLO 可幫助實(shí)現(xiàn)需要即時(shí)分析和響應(yīng)的廣泛應(yīng)用。結(jié)論YOLO(You Only Look Once)的探索及其對(duì)物體檢測(cè)領(lǐng)域的變革性影響,凸顯了計(jì)算機(jī)視覺(jué)技術(shù)能力的重大飛躍。YOLO 的創(chuàng)新方法以單次檢測(cè)為特點(diǎn),可以同時(shí)預(yù)測(cè)多個(gè)邊界框和類別概率,不僅提高了物體檢測(cè)的速度和效率,還擴(kuò)大了其在各種現(xiàn)實(shí)場(chǎng)景中的適用性。
從通過(guò)先進(jìn)的監(jiān)控系統(tǒng)增強(qiáng)安全性到提高自動(dòng)駕駛汽車的安全性和可靠性,從協(xié)助野生動(dòng)物保護(hù)工作到徹底改變零售和庫(kù)存管理,YOLO 的多功能性和效率使其成為各個(gè)領(lǐng)域的基石技術(shù)。它能夠以驚人的準(zhǔn)確性和速度處理動(dòng)態(tài)和具有挑戰(zhàn)性的環(huán)境,這凸顯了深度學(xué)習(xí)模型在處理曾經(jīng)無(wú)法實(shí)現(xiàn)的復(fù)雜實(shí)時(shí)任務(wù)方面的潛力。
提供的代碼片段深入了解了 YOLO 的架構(gòu)、訓(xùn)練過(guò)程和視頻流應(yīng)用,證明了該模型的可訪問(wèn)性和適應(yīng)性。它們說(shuō)明了如何在實(shí)際應(yīng)用中集成和使用 YOLO,使開(kāi)發(fā)人員和研究人員能夠在他們的項(xiàng)目中利用實(shí)時(shí)對(duì)象檢測(cè)的強(qiáng)大功能。
展望未來(lái),YOLO 的持續(xù)開(kāi)發(fā)和迭代有望取得更大進(jìn)步,檢測(cè)精度、處理速度和對(duì)更廣泛應(yīng)用的適應(yīng)性都有可能得到改善。YOLO 從誕生到現(xiàn)在乃至更遠(yuǎn)的未來(lái),是人工智能和計(jì)算機(jī)視覺(jué)領(lǐng)域不懈追求創(chuàng)新的生動(dòng)例證。它是未來(lái)發(fā)展的燈塔,鼓勵(lì)人們不斷探索,突破人工智能的極限。
-
監(jiān)控系統(tǒng)
+關(guān)注
關(guān)注
21文章
3843瀏覽量
173419 -
人工智能
+關(guān)注
關(guān)注
1789文章
46652瀏覽量
237064 -
代碼
+關(guān)注
關(guān)注
30文章
4722瀏覽量
68229
原文標(biāo)題:縱觀全局:YOLO 助力實(shí)時(shí)物體檢測(cè)原理及代碼
文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺(jué)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論