YOLO算法

YOLO介紹?

YOLO,全稱為You Only Look Once: Unified, Real-Time Object Detection,是一種實時目標檢測算法。目標檢測是計算機視覺領域的一個重要任務,它不僅需要識別圖像中的物體類別,還需要確定它們的位置。與分類任務只關注對象是什么不同,目標檢測需要同時處理離散的類別數據和連續的位置數據。YOLO算法基于深度學習的回歸方法,它將目標檢測問題轉化為一個回歸問題,使用單個卷積神經網絡(CNN)直接從輸入圖像預測邊界框(bounding box)和類別概率。這種方法避免了傳統目標檢測算法中復雜的多階段處理流程,如區域提議、特征提取等。

  • YOLO的網絡結構受到了GoogLeNet的啟發,包含24個卷積層和2個全連接層。在YOLO v1中,作者使用了1×1的降維層緊跟著3×3的卷積層來代替GoogLeNet的inception模塊。
  • YOLO將輸入圖像分割成S×S的網格,每個網格單元負責檢測中心點落在該單元內的目標。這種策略簡化了目標的定位過程,并允許模型快速地對多個目標進行定位和分類。
  • YOLO的設計強調實時性能,通過一次前向傳播就可以完成檢測任務,這使得它非常適合用于視頻流分析或其他需要快速響應的應用場合。

Yolo算法采用一個單獨的CNN模型實現end-to-end的目標檢測,核心思想就是利用整張圖作為網絡的輸入,直接在輸出層回歸 bounding box(邊界框) 的位置及其所屬的類別:

首先將輸入圖片resize到448x448,然后送入CNN網絡,最后處理網絡預測結果得到檢測的目標。相比R-CNN算法,其是一個統一的框架,其速度更快。

Yolo算法思想?:

Yolo模型采用預定義預測區域的方法來完成目標檢測,具體而言是將原始圖像劃分為 7x7=49 個網格(grid),每個網格允許預測出2個邊框(bounding box,包含某個對象的矩形框),總共 49x2=98 個bounding box。我們將其理解為98個預測區,很粗略的覆蓋了圖片的整個區域,就在這98個預測區中進行目標檢測。

?Yolo的網絡結構?

YOLO的結構非常簡單,就是單純的卷積、池化最后加了兩層全連接,從網絡結構上看,與前面介紹的CNN分類網絡沒有本質的區別,最大的差異是輸出層用線性函數做激活函數,因為需要預測bounding box的位置(數值型),而不僅僅是對象的概率。YOLO的整個結構就是輸入圖片經過神經網絡的變換得到一個輸出的張量?

  • 網絡的輸入是原始圖像,唯一的要求是縮放到448x448的大小。主要是因為Yolo的網絡中,卷積層最后接了兩個全連接層,全連接層是要求固定大小的向量作為輸入,所以Yolo的輸入圖像的大小固定為448x448。
  • 網絡的輸出就是一個7x7x30 的張量。

根據YOLO的設計,輸入圖像被劃分為 7x7 的網格(grid),輸出張量中的 7x7 就對應著輸入圖像的 7x7 網格。

Yolo模型的訓練?

?在進行模型訓練時,需要構造訓練樣本和設計損失函數,才能利用梯度下降對網絡進行訓練。

將一幅圖片輸入到yolo模型中,對應的輸出是一個7x7x30張量,構建標簽label時對于原圖像中的每一個網格grid都需要構建一個30維的向量。

  • 20個對象分類的概率

對于輸入圖像中的每個對象,先找到其中心點。上圖中自行車,其中心點在黃色圓點位置,中心點落在黃色網格內,所以這個黃色網格對應的30維向量中,自行車的概率是1,其它對象的概率是0。所有其它48個網格的30維向量中,該自行車的概率都是0。這就是"中心點所在的網格對預測該對象負責"。

  • 2個bounding box的位置

訓練樣本的bbox位置應該填寫對象真實的位置bbox,填哪一個需要根據網絡輸出的bbox與對象實際bbox的IOU來選擇。

Yolo先使用ImageNet數據集對前20層卷積網絡進行預訓練,然后使用完整的網絡,在PASCAL VOC數據集上進行對象識別和定位的訓練。

Yolo的最后一層采用線性激活函數,其它層都是Leaky ReLU。訓練中采用了drop out和數據增強來防止過擬合。

?yoloV4算法

YOLOv4是YOLO系列算法的第四代版本,它在YOLOv3的基礎上進行了一系列改進和優化,以實現更高的檢測精度和更快的處理速度,為了提高模型的泛化能力和防止過擬合,YOLOv4還引入了Dropblock正則化方法。這種方法在訓練過程中逐漸增加遮擋的比例,迫使網絡學習更加魯棒的特征表示。

YOLOv4的網絡結構由四個關鍵部分組成:Input、Backbone、Neck和Head

  1. Input部分:這是網絡的輸入端,負責接收待處理的圖像數據。
  2. Backbone部分 (CSPDarknet53):這部分是整個網絡結構的主干,主要負責對輸入圖像進行特征提取。CSPDarknet53是一種殘差網絡,它通過CSP(Cross Stage Partial)模塊優化了梯度流和計算量,相較于DarkNet53,CSPDarknet53在保持準確率的同時減少了計算量。每個CSP模塊都會使輸出的特征圖大小減半而通道數增倍,有利于提取更深層的特征。
  3. Neck部分 (SPP和PANet):Neck部分緊隨Backbone,用于進一步加強特征提取。SPP(空間金字塔池化)可以融合不同尺寸的特征,增大模型的感受野,而PANet(路徑聚合網絡)則是FPN(特征金字塔網絡)的加強版,它融合了自底向上和自頂向下的特征信息,反復提取特征,以增強模型的表征能力。
  4. Head部分 (YOLOv3):最后是Head部分,也就是預測頭部,負責進行最終的邊界框預測和類別概率輸出。YOLOv4采用了YOLOv3作為其Head,利用前面提取的特征來執行實際的目標檢測任務。

yoloV4網絡的輸入依然要求是32的倍數,但大小不是固定的,在yoloV4中默認是608×608,在實際項目中也可以根據需要修改,比如320×320,一般是32的倍數。 輸入圖像的大小和最后的三個特征圖的大小也是對應的,比如416×416的輸入,最后的三個特征圖大小是13×13,26×26,52×52, 如果是608×608,最后的三個特征圖大小則是19×19,38×38,76×76。

yoloV4在輸入端除了采用常規的反轉、裁切、旋轉等方法外,主要采用了CutMix和馬賽克數據增強,馬賽克增強方式將4張訓練圖像按一定比例組合成1張。Mosaic增強方式使得模型能夠學習如何識別尺寸小的物體,還能夠幫助模型在圖像的不同部分定位不同類型的目標。

模型訓練?

yoloV4中的模型訓練與預測和YoloV3幾乎是一樣的,包括正負樣本的設置方式,損失函數的構成及訓練過程。唯一不同是在計算回歸值得損失時,V4中采用了IOU的損失。IOU損失非常簡單,直接使用檢測框與真實框的交并比并取對數作為回歸的損失函數?

GIOU損失是為了緩解IOU損失的問題提出來的,這種方式存在的問題是當檢測框在真實框內部或正式框在檢測框內部時,無法衡量差集,損失函數退化為1-IOU。

  1. 系統環境配置:確保您的計算機系統滿足訓練YOLOv4的要求。常見的配置包括Windows或Linux操作系統,以及安裝有CUDA和cuDNN的NVIDIA顯卡。
  2. 獲取YOLOv4代碼:從GitHub上克隆YOLOv4的官方代碼倉庫,該倉庫提供了訓練YOLOv4所需的所有腳本和配置文件。
  3. 數據集準備:準備用于訓練的目標檢測數據集。如果是視頻數據,需要先將視頻幀提取為圖片格式。此外,還需要對數據集進行標注,生成包含物體類別和位置信息的注釋文件。
  4. 修改配置文件:根據您的數據集和訓練需求,修改YOLOv4的配置文件。這些配置文件中定義了模型參數、訓練參數以及數據加載方式等重要信息。
  5. 模型訓練:使用準備好的數據集和配置文件開始訓練YOLOv4模型。訓練過程中,模型會學習識別和定位圖像中的物體。
  6. 模型評估:在訓練完成后,使用驗證集對模型的性能進行評估,檢查模型的準確率和召回率等指標。
  7. 模型部署:將訓練好的模型部署到實際應用中,如監控系統、自動駕駛車輛或其他需要實時目標檢測的場合。
  8. 優化調整:根據模型在實際應用場景中的表現,進一步調整模型參數或數據集,以提高模型的準確性和魯棒性。

?我們還需要參考YOLOv4的官方文檔、相關教程以及社區提供的經驗分享。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/711993.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/711993.shtml
英文地址,請注明出處:http://en.pswp.cn/news/711993.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【矩陣】【方向】【素數】3044 出現頻率最高的素數

作者推薦 動態規劃的時間復雜度優化 本文涉及知識點 素數 矩陣 方向 LeetCode 3044 出現頻率最高的素數 給你一個大小為 m x n 、下標從 0 開始的二維矩陣 mat 。在每個單元格,你可以按以下方式生成數字: 最多有 8 條路徑可以選擇:東&am…

安裝 Ubuntu 22.04.3 和 docker

文章目錄 一、安裝 Ubuntu 22.04.31. 簡介2. 下載地址3. 系統安裝4. 系統配置 二、安裝 Docker1. 安裝 docker2. 安裝 docker compose3. 配置 docker 一、安裝 Ubuntu 22.04.3 1. 簡介 Ubuntu 22.04.3 是Linux操作系統的一個版本。LTS 版本支持周期到2032年。 系統要求雙核 C…

C++的模板template

一、什么是模板 C中的模板分為類模板和函數模板,并不是一個實際的類或函數,這指的是編譯器不會自動為其生成具體的可執行代碼。只有在具體執行時,編譯器才幫助其實例化。 二、為什么引入模板 拿我們最常見的交換函數來舉例子,如果…

代碼隨想錄 二叉樹第二周

目錄 101.對稱二叉樹 100.相同的樹 572.另一棵樹的子樹 104.二叉樹的最大深度 559.N叉樹的最大深度 111.二叉樹的最小深度 222.完全二叉樹的節點個數 110.平衡二叉樹 257.二叉樹的所有路徑 101.對稱二叉樹 101. 對稱二叉樹 已解答 簡單 相關標簽 相關企業 給你一…

《求生之路2》服務器如何選擇合適的內存和CPU核心數,以避免丟包和延遲高?

根據求生之路2服務器的實際案例分析選擇合適的內存和CPU核心數以避免丟包和延遲高的問題,首先需要考慮游戲的類型和對服務器配置的具體要求。《求生之路2》作為一款多人在線射擊游戲,其服務器和網絡優化對于玩家體驗至關重要。 首先,考慮到游…

Java應用程序注冊成Linux系統服務后,關閉Java應用程序打印系統日志

Java應用程序有自己的日志框架,有指定位置的日志文件,不需要在系統日志里記錄,占用磁盤空間。 1.Linux系統文件目錄 /etc/systemd/system/ 找到要修改的Java應用程序服務配置 比如bis-wz-80.service 2.設置不打印日志 StandardOutputnull S…

centos7 搭建 harbor 私有倉庫

一、下載安裝 1.1、harbor 可以直接從 github 上下載:Releases goharbor/harbor GitHub 這里選擇 v2.10.0 的版本 wget https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-offline-installer-v2.10.0.tgz 1.2、解壓 tar zxvf harbor-offlin…

L2 網絡 Mint Blockchain 正式對外發布測試網

Mint Blockchain 是由 NFTScan Labs 發起的聚焦在 NFT 生態的 L2 網絡,致力于促進 NFT 資產協議標準的創新和 NFT 在現實商業應用場景中的大規模采用。 Mint Blockchain 于 2024 年 2 月 28 號正式對外發布測試網,開始全面進入生態開發者測試開發階段。 …

2403C++,C++11玩轉無棧協程

原文 C11里也能玩無棧協程了? 答案是:可以! 事實上異網在很早時,C11里就可用無棧協程寫異步代碼了,只不過用起來不太方便,來看看C11里怎么用異網無棧協程寫一個回音服務器的吧. #包含 <異網.h> #包含 <內存> #包含 <向量> #包含 <異網/產生.h> 用 …

c++異常機制(5)-- 繼承與異常

我們在c異常機制(3)中自定義類型&#xff0c;我們將相應的異常封裝成了類&#xff0c;在類中實現一些方法&#xff0c;對異常進行處理。其中每一個類都實現了print()方法。 我們使用throw拋出相應異常的虛擬對象&#xff0c;在catch參數中進行匹配&#xff0c;但是如果有很多異…

Springboot項目集成短信驗證碼(超簡單)

操作流程 注冊驗證碼平臺創建驗證碼模版開始集成&#xff08;無需引入第三方庫&#xff09; 注冊并登陸中昱維信驗證碼平臺 獲取AppID和AppKey。 創建驗證碼模版 創建驗證碼模版&#xff0c;獲取驗證碼模版id 開始集成 創建controller import org.springframework.web.bi…

MATLAB環境下基于隨機游走拉普拉斯算子的快速譜聚類方法

古人有云&#xff0c;物以類聚&#xff0c;在面臨信息爆炸問題的今天&#xff0c;對信息類別劃分的價值日益顯現&#xff0c;并逐步成為學者們的研究熱點。分類和聚類是數據挖掘的重要工具&#xff0c;是實現事物類別劃分的左右手&#xff0c;聚類又是分類一種特殊的方式。所謂…

CodeWhisperer安裝教導--一步到位!以及本人使用Whisperer的初體驗。

CodeWhisperer是亞馬遜出品的一款基于機器學習的通用代碼生成器&#xff0c;可實時提供代碼建議。類似 Cursor 和Github AWS CodeWhisperer 亞馬遜科技的CodeWhisperer是Amazon于2021年12月推出的一款代碼補全工具&#xff0c;與GitHub Copilot類似。主要的功能有:代碼補全注釋…

貓毛過敏養貓人士的必備養貓好物-寵物空氣凈化器品牌分享

許多貓奴在與貓相處一段時間后突然對貓毛過敏&#xff0c;這真是令人難受。一些人認為對貓咪過敏是因為它們在空氣中飄浮的毛發引起的&#xff0c;但實際上大部分人之所以過敏是因為對貓身上一種微小的蛋白質過敏。這種導致過敏的蛋白質附著在貓咪的一些皮屑上。我們都知道貓咪…

前端架構: 腳手架通用框架封裝之入口文件開發(教程一)

腳手架入口文件開發 創建腳手架項目: abc-cli $ mkdir abc-cli && cd abc-cli 全局安裝 lerna, $ npm i -g lerna 基于 lerna 完成項目初始化 $ lerna init 基于 lerna 創建腳手架 cli $ lerna create cli一路回車 好現在生成了一個 cli 的模板&#xff0c;目前需要…

Qt 中Json的構造和解析簡單例子

概述: Qt中使用Json比較方便&#xff0c;不像純C需要導入CJson RapidJson JsonCpp等第三方的庫&#xff0c;主要使用到QJsonDocument、QJsonObject對象即可 1、如何構造一個json字符串 假如我們需要構造 {"cmd":"1001","data":{"content&q…

Linux 下安裝Jupyter

pip3 install jupyter pip3 install ipython -------------------------------------------- pip3 install jupyterlab jupyter lab pip3 list | grep jupyterlab 啟動&#xff1a; python3 -m jupyter lab 2.安裝朱皮特 pip3 install -i https://pypi.douban.com/simpl…

高性能的key-value數據庫Redis 介紹

Redis 是一個高性能的key-value數據庫。 Redis是一個開源的鍵值存儲系統&#xff0c;通常用于緩存和消息傳遞。它支持多種類型的數據結構&#xff0c;如字符串、列表、集合、散列表和有序集合等。Redis的特點是提供了高性能、靈活性和可伸縮性。 Redis的主要特點包括&#xff…

Pytorch學習 day02(加載數據)

加載數據 * Dataset提供一種方式&#xff1a;來獲取數據及其label&#xff0c;給數據進行編號 * Dataloader為神經網絡提供不同的數據形式 Dataset的組織形式有很多種&#xff0c;例如&#xff1a; 將label放在文件夾名上&#xff0c;如下&#xff1a; #Dateset # --train #…

Python算法題集_組合總和

Python算法題集_組合總和 題39&#xff1a;組合總和1. 示例說明2. 題目解析- 題意分解- 優化思路- 測量工具 3. 代碼展開1) 標準求解【值傳遞回溯】2) 改進版一【引用傳遞堆棧回溯】3) 改進版二【過程值列表緩存遍歷后檢索】 4. 最優算法5. 相關資源 本文為Python算法題集之一的…