OpenCV實例(九)基于深度學習的運動目標檢測(一)YOLO運動目標檢測算法

基于深度學習的運動目標檢測(一)

  • 1.YOLO算法檢測流程
  • 2.YOLO算法網絡架構
  • 3.網絡訓練模型
    • 3.1 訓練策略
    • 3.2 代價函數的設定

2012年,隨著深度學習技術的不斷突破,開始興起基于深度學習的目標檢測算法的研究浪潮。

2014年,Girshick等人首次采用深度神經網絡實現目標檢測,設計出R-CNN網絡結構,實驗結果表明,在檢測任務中性能比DPM算法優越。同時,何愷明等人針對卷積神經網絡(Convolutional Neural Network,CNN)計算復雜度高的問題,引入空間金字塔池化層,設計出基于SPP-Net的目標檢測網絡,不但提高了目標檢測速度,而且支持任意尺寸大小的圖像輸入。

2015年,Girshick在R-CNN目標檢測網絡的基礎上針對候選框特征重復提取進行優化,提出了Fast R-CNN(Fast Regions with CNN,Fast R-CNN)網絡結構,實現了端對端式的訓練,并且所有網絡層的參數在不斷更新。任少卿和何愷明等人采用區域建議網絡(Region Proposal Network,RPN)和Fast R-CNN網絡結合的方式,設計出新的目標檢測網絡,該網絡使得目標檢測精度和速度得到很大的提升。

傳統的目標檢測算法的基本思路一般都是先對圖像進行預處理,然后使用滑動窗口策略在整個圖像均勻間隔的區域上提取特征,最后利用機器學習中的分類器判斷是否存在目標,比如之前的DMP系統不但檢測流程復雜,而且檢測過程中卷積計算量較大,無法滿足現實生活中檢測的實時性。對于該算法的不足,Joseph Redmon等人提出了YOLO算法,主要利用的是將目標檢測任務的問題轉換為回歸問題,其設計的網絡只要進行一次計算,就能直接得到完整圖像中目標的邊界框和類別概率。同時,該網絡結構單一,實現端對端式的訓練。因此,YOLO檢測算法的檢測速度可滿足實際的檢測需求。下面我們從檢測流程、網絡架構、網絡訓練模型3個角度來分析YOLO算法。

基于YOLO算法的目標檢測流程大致可分為3個步驟:

(1)把待檢測的圖像調整大小為448×448。

(2)將圖像放到CNN輸出待檢測目標邊界框的坐標信息和類別概率。

(3)使用非極大抑制算法去除冗余的標注框,篩選出最終的目標檢測結果。

在這里插入圖片描述

1.YOLO算法檢測流程

YOLO算法的整體檢測思路為:首先將待檢測圖像劃分為S×S個網格,然后對每個網格都預測B個邊界框(bounding boxes)和這些邊界框所對應的自信得分(confidence scores)。YOLO算法具體的檢測示意圖如圖所示。

在這里插入圖片描述

此時,若有目標的中心點落在某個格子單元中,則該格子將負責檢測這個目標,而confidence score負責檢測該網絡模型的單元格中是否有目標,以及對預測位置的精確度。當單元格中沒有目標時,confidence score為0,如果存在目標,則為預測的boxes與真實的boxes之間的IoU值。
在這里插入圖片描述

每個邊界框都包含了5個預測值:x,y,w,h,confidence。其中,坐標(x,y)代表邊界框的中心坐標,與網格單元對齊(相當于當前網格單元的偏移值),使得范圍變成[0,1];坐標(w,h)代表預測的邊框相對于整個圖像的高度和寬度的比例。每個網格還要預測一個類別信息,記為C類,則C個類別條件概率值為Pr( | )。在測試階段,每個邊界框的具體類別的自信得分計算公式如下:

在這里插入圖片描述

上式得到的結果中既包含了邊界框中預測類別的概率信息,也反映了邊界框中是否含有目標和邊界框位置的精確度。

2.YOLO算法網絡架構

通過上述分析YOLO的檢測流程可以看出,YOLO算法將格子數S設置為7×7的大小,網絡方面采用GooleNet的思想,其中包含了24個卷積層和2個全連接層,如圖所示。卷積層主要用來提取特征,全連接層主要用來預測類別概率和坐標,與GooleNet的不同之處在于YOLO檢測網絡沒有采用Inception結構,而采用1×1和3×3的卷積層代替了Inception。從上述網絡檢測流程的分析可以看出,每個單元需要預測(B×5+C)值,假設將輸入圖像劃分為S×S個網格單元,那么最終的預測值為S×S×(B×5+C)大小的張量,對于PASCAL VOC數據,最終的預測結果為7×7×30大小的張量。

在這里插入圖片描述
可以看出,網絡的最終輸出為7×7×30大小的張量,這和前面的分析一致。該張量所代表的具體含義如圖所示。對于每一個單元格,最后20個元素代表類別概率值,其中前面10個中有兩個是邊界框置信度,兩者的乘積就是類別置信度,剩下8個元素代表邊界框的(x,y,w,h)。

在這里插入圖片描述

3.網絡訓練模型

3.1 訓練策略

在訓練之前,先在ImageNet上進行預訓練,其預訓練的分類模型采用圖15-12中前20個卷積層,然后添加一個average-pool層和全連接層。預訓練之后,在預訓練得到的20層卷積層之上加上隨機初始化的4個卷積層和2個全連接層。由于檢測任務一般需要更高清的圖片,因此將網絡的輸入從224×224增加到448×448。整個網絡的流程如圖所示。

在這里插入圖片描述
YOLO算法開始并沒有像Goole Net那樣直接構建24層的卷積網絡,而是構建20層的卷積網絡,然后在ImageNet數據集上預訓練了前面的20層卷積層。Ren等人采用將卷積層和全連接層添加到預訓練網絡中的策略,進一步提高了網絡的性能。因此,YOLO采用基于該原理在初始的20層卷積網絡基礎上,隨機初始化后面的4層卷積層和2層全連接層。由于在檢測中需要更詳細的視覺信息,因此YOLO將網絡模型的輸入圖像大小由224×224調整為448×448。網絡最終預測輸出結果的邊界框的信息是(x,y,w,h),但是坐標(x,y)用對應網格的偏移量表示,然后歸一化到(0,1)之間,坐標(w,h)用圖像width和height歸一化到(0,1)之間。由于在訓練的過程中一般的激活函數Sigmoid會出現梯度消失、梯度爆炸的現象,因此YOLO采用LeakyReLU線性激活函數作為激活函數,其函數表達式如下:

在這里插入圖片描述

3.2 代價函數的設定

YOLO算法的最終輸出結果包含邊界框的坐標、置信度得分、類別概率值3個部分,代價函數的設計目標是讓這三方面達到很好的平衡。剛開始,YOLO簡單地采用平方和誤差作為代價函數,通過梯度下降法很容易達到最優化,但是這種代價函數的設計最終導致的結果是模型的擬合能力很差,主要原因在于代價函數的設定不合適,同時造成的不足之處有以下兩個方面:

(1)8維的坐標誤差和20維的類別概率誤差,采用平方差誤差時,兩者視為同等重要,這顯然是不合理的。

(2)在一幅圖像中,如果一個網絡中沒有目標,就將這些網絡中的格子單元的置信度設置為0。相比于較少的有目標的網絡,這種方法是不可取的,會導致網絡不穩定甚至不收斂。基于上述的不足,YOLO進一步改進代價函數,更重視8維坐標預測的誤差損失,對其賦予更大的權值,同時減小不包含目標的單元格的置信度預測的權值。對于包含目標的單元格的置信度和類別概率預測的誤差損失保持不變,同時將其權值設定為1。平方和誤差同時對大邊界框和小邊界框中的誤差采用相同的權值,改進后小邊界框中的微小偏差顯得尤為重要。因此,網絡的代價函數將原來的w、h分別用[插圖]和[插圖]代替,這樣做的好處在于進一步降低了敏感度之間的差異。最終,代價函數設計如下:

在這里插入圖片描述

其中,第一項是邊界框中心坐標的誤差項,[插圖]用于判斷第i個網格中第j個邊界框是否檢測該目標,λcoord表示邊界框坐標誤差損失的權值,[插圖]用于判斷目標是否出現在網格中,λnoobj表示不包含目標邊界框的置信度預測的誤差權值。在上述代價函數中,只有當某個網絡中有目標時才對預測誤差進行懲罰,即增加權重系數。

總之,YOLO算法的缺點有兩個方面:一方面,難以檢測小目標,導致對視頻中運動目標的檢測出現漏檢的現象;另一方面,對目標的定位不準,檢測到的目標與實際目標之間存在偏差。

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

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

相關文章

電腦突然黑屏的解決辦法

記錄一次電腦使用問題 問題描述 基本情況:雷神游戲筆記本 windows10操作系統 64位 使用時間 4年 日期:2023年8月11日 當時 電腦充著電 打開了兩個瀏覽器:edge[頁面加載5個左右],火狐[頁面加載1個左右] 兩個文件夾 一個百度網盤…

Davinci 報表工具 0.3.0-rc release 文本框模糊查詢不生效問題

背景: 在使用過程中發現davinci 的控制器配置中, 取值配置的對應關系設置 包含 或 不包含時 不生效, 不能實現模糊匹配效果, 只能精確查詢; 問題分析: 通過跟蹤接口及相應代碼, 發現在sql 拼接時沒有對 like 和 not like 類型的值兩側添加百分號, 導致模糊查詢失敗 調用過程…

CentOS系統環境搭建(七)——Centos7安裝MySQL

centos系統環境搭建專欄🔗點擊跳轉 坦誠地說,本文中百分之九十的內容都來自于該文章🔗Linux:CentOS7安裝MySQL8(詳),十分佩服大佬文章結構合理,文筆清晰,我曾經在這篇文章…

Kotlin 使用 View Binding

解決的問題: 《第一行代碼——Android》第三版 郭霖 P277 視圖綁定的問題 描述: kotlin-android-extensions 插件已經棄用 butter knife 已經棄用 解決辦法 推薦使用 View Binding 來代替 findViewById 使用方法 1、配置 build.gradle 2、在act…

踩坑---uni-app中@input 事件不生效

在開發的時候遇到這么一種情況,我們希望input輸入框的值是范圍是0-100或者保留兩位小數之類的,當你輸入時處理后的結果卻不生效,但是試過很多辦法發現都實現不了,最后是按照以下方法解決的,問題原因是uni-app會延時,導致輸入的結果…

Go語言的主要優勢

Go語言的主要優勢包括: 1. 簡潔和易學 Go語法簡單明了,沒有太多晦澀難懂的概念,上手容易,適合快速開發。 2. 強大的并發支持 利用goroutine和channel,可以非常方便地編寫高效的并發程序。 3. 執行性能好 Go編譯成機器碼,執行性能接近C/C,比解釋型語言更高效。 4. 內存管…

絕對值函數的可導性

絕對值函數的可導性 聲明:下面截圖來自《考研數學常考題型解題方法技巧歸納》

利用Figlet工具創建酷炫Linux Centos8服務器-登錄歡迎界面-SHELL自動化編譯安裝代碼

因為我們需要生成需要的特定字符,所以需要在當前服務器中安裝Figlet,默認沒有安裝包的,其實如果我們也只要在一臺環境中安裝,然后需要什么字符只要復制到需要的服務器中,并不需要所有都安裝。同樣的,我們也可以利用此生成的字符用到腳本運行的開始起頭部分,用ECHO分行標…

學習筆記十八:污點、容忍度

污點、容忍度 污點、容忍度管理節點污點把k8snode2當成是生產環境專用的,其他node是測試的給k8snode1也打上污點 污點、容忍度 給了節點選則的主動權,我們給節點打一個污點,不容忍的pod就運行不上來,污點就是定義在節點上的鍵值屬…

使用python讀Excel文件并寫入另一個xls模版

效果如下: 原文件內容 轉化后的內容 大致代碼如下: 1. load_it.py #!/usr/bin/env python import re from datetime import datetime from io import BytesIO from pathlib import Path from typing import List, Unionfrom fastapi import HTTPExcep…

睿趣科技:抖音開網店現在做還來得及嗎

隨著社交媒體的迅速發展,抖音作為一款短視頻平臺,已經在年輕人中間取得了巨大的成功。而近年來,越來越多的人開始考慮在抖音上開設網店,以迎合這一潮流。那么,抖音開網店現在還來得及嗎? 首先,要明確的是&…

一篇文章教會你搭建私人kindle圖書館,并內網穿透實現公網訪問

搭建私人kindle圖書館,并內網穿透實現公網訪問 在電子書風靡的時期,大部分人都購買了一本電子書,雖然這本電子書更多的時候是被擱置在儲物架上吃灰,或者成為蓋泡面的神器,但當亞馬遜發布消息將放棄電子書在中國的服務…

Kubernetes部署Wordpress時碰到的兩個問題解決

文章目錄 小結問題1解決問題2解決參考 小結 在使用Kubernetes部署Wordpress時返回了兩個問題: Function not implemented: AH00141: Could not initialize random number generator chown: changing ownership of .: Operation not permitted 對這個兩個返回錯誤&#xff0…

利用Python隧道爬蟲ip輕松構建全局爬蟲網絡

嘿,爬蟲程序員們!你們有沒有碰到過需要大規模數據爬取的情況?也許你們之前遇到過網站的反爬措施,卡住你們的進度。別擔心,今天我來分享一個利用Python隧道爬蟲ip實現的方法,幫助你們輕松搭建全局爬蟲ip網絡…

jmeter界面設置為中文

jmeter版本:5.6.2 找到jmeter下的bin目錄,打開jmeter.properties 文件 第39行修改為 languagezh_CN去掉前面的#,以后打開就是中文界面了

IC設計仿真云架構

對于IC仿真來說,最重要的是要安全、可維護、高性能的的HPC環境環境。 那么云上如何搭建起一套完整的IC仿真云環境呢? 這種架構應該長什么樣子? 桌面虛擬化基礎架構 將所有桌面虛擬機在數據中心進行托管并統一管理;同時用戶能夠…

RxJava 復刻簡版之三,map 多次中轉數據

案例代碼:https://gitee.com/bobidali/lite-rx-java/commit/292e9227a5491f7ec6a07f395292ef8e6ff69290 RxJava 的調用第一步是封裝了觀察者接受了數據的處理,進一步就是使用 map 將數據操作傳遞給上下游 1、類似Observer.create 創建一個簡單的觀察者…

神經網絡基礎-神經網絡補充概念-05-導數

概念 導數是微積分中的一個概念,用于描述函數在某一點的變化率。在數學中,函數的導數表示函數值隨著自變量的微小變化而產生的變化量,即斜率或變化率。 假設有一個函數 f(x),其中 x 是自變量,y f(x) 是因變量。函數…

如何評價機械革命?

機械革命是在全球頂尖IT廠商藍天、intel、nvidia、Microsoft等聯手的打造下推出的中高端品牌。(零件組裝) 機械革命研發實力雄厚,糟糕的外觀設計和極致的游戲性能一樣出名。圖片皆來自于未來世界。

【0214】postgres后端進程session退出,如何通過日志分析其會話信息

文章目錄 1. postgres進程session退出2. 開啟日志記錄postgres進程會話狀態3. postgres進程會話結束,記錄日志的實現原理1. postgres進程session退出 默認情況下,新建一個postgres后端進程會話(session),或是postgres進程正常/異常退出時,日志中沒有很明顯的記錄用于說明…