計算機視覺的物體檢測技術對於眾多應用來說都是必不可少的。 我們將其用於機器人技術、監控設備、自動駕駛汽車以及更多領域。 因此,我們可以在圖片或視頻中找到並識別某些事物。
最知名的之一 物體識別算法是YOLO (You Only Look Once) 模型集。 這些模型是由 超力有限責任公司。
這個系列的最新版本是 YOLOv5。 而且,它是市場上最快、最精確的物體識別模型。 該模型對新數據的泛化能力得到了極大的提高。 此外,它包含許多使其性能優於早期迭代的功能。
YOLOv5 非常適合實時應用程序,因為它可以在單個 GPU 上以高達每秒 1000 幀的速率處理圖片。
在本文中,我們將介紹 YOLOv5 並詳細介紹其應用領域。
YOLO之旅:從YOLO到YOLOv5
約瑟夫雷德蒙等人。 最初在2016年推出了YOLO,一套物體識別模型。最初的YOLO模型可以實時識別物體。 然而,與當時的其他模型相比,它的準確性較低。
多年來,YOLO 發布了多個升級版本。 最後,Ultralytics LLC 創建了 YOLO 系列的最新版本 YOLOv5。
YOLOv5 是目前最準確、最快速的物體識別模型。
重要特徵
錨箱
YOLOv5 使用錨框預測圖像中對象的邊界框。 該模型使用錨框預測許多具有各種縱橫比的預定義框中的哪一個與圖片中的項目最匹配。 這些是預定義的框。
而且,它們使 YOLOv5 能夠準確地識別和查找圖片中的項目。
鑲嵌數據增強
在訓練時,YOLOv5 採用一種稱為馬賽克的方法 數據擴充. 為了開發新的訓練圖片,我們的模型隨機組合了幾張照片的補丁。 因此,該模型變得更具彈性和可靠性。 因此,它可以推廣到新數據並減少過度擬合。
獨特的培訓管道
一個獨特的訓練管道,混合了監督和 無監督學習 用來。
因此,該模型從較小的樣本中學習並有效地利用未標記的輸入。 這提高了模型的性能並增強了其泛化到新輸入的能力。
殘差層和非殘差層
YOLOv5 的架構結合了殘差層和非殘差層。 通過允許梯度跨層流動,殘差層幫助模型學習困難的特徵。 此外,非殘差層為模型提供了對輸入圖片更全面的把握。 因此,YOLOv5 可以更精確、更有效地運行。
如何使用 YOLOv5
安裝過程
使用 pip 可以快速完成 YOLOv5 安裝。 Pip 是一個 Python 包管理器。 安裝YOLOv5的大致流程如下:
1-安裝PyTorch:因為YOLOv5是基於PyTorch框架的,所以必須先安裝PyTorch。
pip install torch torchvision
2. 安裝 CUDA:如果你打算在 GPU 上運行 YOLOv5,你必須安裝 CUDA。
3.安裝YOLOv5:設置好PyTorch和CUDA後,使用如下命令下載YOLOv5。
pip install yolov5
4-安裝YOLOv5後,必須下載預訓練的權重。 Ultralytics GitHub 存儲庫中提供了預訓練的權重。
通過向下滾動轉到網站的“權重”部分。 您可以從此處找到的列表中下載預訓練權重。
5. 選擇已經過訓練且最適合您的用例的權重。 學習權重的數據集或特定 YOLOv5 版本可用於縮小列表範圍。
6- 選擇合適的權重後,單擊旁邊的“下載”按鈕選擇權重。 權重將可供下載。 點文件。
7- 將下載的權重傳輸到目錄。 這是您的檢測腳本將運行的地方。
8- 此時,您可以使用檢測腳本中的預訓練權重對照片或視頻運行對象檢測。
準備數據
您必須執行以下操作才能準備好數據以用於 YOLOv5:
1. 收集數據:第一步是收集您需要的圖片或視頻數據 目標檢測. 您希望檢測的事物應該出現在照片或視頻中。
2- 格式化數據:如果您正在使用它們,您可以將照片導入您的腳本。 如果您打算使用一個視頻,則必須將視頻變成一系列照片。 您可以使用 OpenCV 等庫從電影中提取幀。
import cv2
img = cv2.imread('path/to/image')
使用 OpenCV 庫,您可以使用以下命令將視頻轉換為一系列圖像:
import cv2
cap = cv2.VideoCapture('path/to/video')
while True:
ret, frame = cap.read()
if not ret:
break
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
3. 標記數據:如果您使用數據集,則必須標記數據。 在圖像的每一幀中圍繞您希望識別的項目繪製邊界框。 這是標記數據的過程。 您可以使用多種工具來協助您完成此操作,包括 LabelImg 和 RectLabel。
4-標記數據後,必須將數據分為訓練集和測試集。 這對於評估模型的性能至關重要。
5. 最後,您可能需要在訓練或測試之前對數據進行預處理。 這可能需要縮放圖片或視頻、標準化像素值或使用數據增強方法。
完成這些步驟後,您的數據就準備好了。
運行檢測腳本
這是分析圖片並查找對象的檢測腳本的示例。
import yolov5
import cv2
# Pre-trained weights should be loaded.
weights = 'path/to/weights.pt'
# Set the detection confidence level
conf_thres = 0.5
# Set the Non-Maxima Suppression (NMS) threshold
nms_thres = 0.5
# Create the detector object
detector = yolov5.YOLOv5(weights, conf_thres, nms_thres)
# Load the image
img = cv2.imread('path/to/image')
# Perform object detection
detections = detector.detect(img)
# Print the detections
for x1, y1, x2, y2, conf, cls_conf, cls_pred in detections:
print("Object:", classes[int(cls_pred)])
print("Confidence:", conf)
print("Bounding box:", (x1, y1, x2, y2))
後期處理
非極大值抑制是目標檢測 (NMS) 中最常用的後處理技術之一。 我們使用 NMS 來消除同一對象的重疊邊界框。 要對檢測執行 NMS,我們可以使用 OpenCV 庫的 cv2.dnn.NMSBoxes() 方法。
下面是如何使用 NMS 對檢測進行後處理的示例。
import cv2
# Perform Non-Maxima Suppression (NMS)
indices = cv2.dnn.NMSBoxes(檢測,置信度,conf_thres,nms_thres)
可視化
在可視化的情況下,我們可以再次使用像 OpenCV 這樣的庫。 我們可以在源圖片或視頻上顯示發現對象周圍的邊界框。 要繪製圖像的邊界框,請使用 cv2.rectangle() 方法。 以下是查看原始圖像檢測的方法:
導入cv2
# Draw the bounding boxes on the image
對於我在索引中:
i = i[0]
x1, y1, x2, y2 = detections[i][0], detections[i][1], detections[i][2], detections[i][3]
cv2.rectangle(img, (x1, y1), (x2, y2), (255, 0, 0), 2)
cv2.putText(img, classes[class_ids[i]], (x1, y1), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2)
# Show the image
cv2.imshow("Object Detection", img)
cv2
應用
YOLOv5 是一個強大的物體識別模型。 因此,我們可以在許多現實場景中使用它。 最突出的用途之一是自動駕駛汽車。 YOLOv5可以實時識別汽車、紅綠燈等物品。
在監控系統中,我們可以使用 YOLOv5 來識別和跟踪實時視頻流中的對象。 此外,YOLOv5 可以成為機器人技術的重要資產。 它可以幫助機器人檢測和理解周圍環境。 這對於導航和操作等活動極為重要。
YOLOv5 還可以用於任何需要對象檢測的行業,例如零售、體育、醫療和安全。
結論
最後,YOLOv5 是 YOLO 系列的最新、最複雜的版本 目標檢測 模型
. 此外,可以公平地說,它是可用的最準確的對象檢測模型。 由於其高精度和速度,您可以放心地為您的物體檢測項目選擇它。
雷斯基阿古斯
我用 yolov5 製作了第一本關於檢測車輛的期刊,這個網站幫助我搜索相關信息。
我對人工智能很感興趣。
如果你可以,我有很多關於 AI 的問題,也許你可以幫助我
謝謝