提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔
前言
關于深度學習目標檢測,有許多概念性的東西需要先了解一下。這里主要以基于深度學習的目標檢測算法的部署實現(xiàn)來學習。
一、基于深度學習的目標檢測需要哪些步驟?
以yolov5為例:
使用YOLOv5進行車輛和行人的目標檢測通常涉及以下步驟:
數(shù)據(jù)準備:準備包含車輛和行人的訓練數(shù)據(jù)集,確保數(shù)據(jù)集中包含足夠數(shù)量和多樣性的車輛和行人的圖像,并標注它們的位置信息。
模型選擇:選擇適合目標檢測任務的YOLOv5模型,根據(jù)任務需求選擇不同的模型大?。ㄈ鏨OLOv5s、YOLOv5m、YOLOv5l、YOLOv5x)。
模型訓練:使用準備好的數(shù)據(jù)集對選定的YOLOv5模型進行訓練。在訓練過程中,模型會學習識別車輛和行人等目標的特征。
模型優(yōu)化:根據(jù)訓練過程中的驗證結(jié)果,調(diào)整模型的超參數(shù)、學習率等,以優(yōu)化模型的性能。
模型評估:使用測試數(shù)據(jù)集對訓練好的模型進行評估,評估模型在車輛和行人目標檢測任務上的準確率、召回率等指標。
模型部署:將訓練好的YOLOv5模型部署到實際應用中,用于車輛和行人的目標檢測任務。可以將模型集成到自動駕駛系統(tǒng)、智能監(jiān)控系統(tǒng)等中。
實時檢測:在部署后,可以利用YOLOv5模型進行實時的車輛和行人目標檢測,識別圖像或視頻流中的車輛和行人,并提供相應的輸出結(jié)果。
我逐步介紹這里面涉及到的一些內(nèi)容。
二、數(shù)據(jù)準備(即準備數(shù)據(jù)集)
1.目標檢測的數(shù)據(jù)集如何獲?。?/h3>
獲取目標檢測的數(shù)據(jù)集通??梢酝ㄟ^以下幾種途徑:
公開數(shù)據(jù)集:有許多公開的目標檢測數(shù)據(jù)集可供使用,如COCO(Common Objects in Context)、PASCAL VOC(Visual Object Classes)、ImageNet等。這些數(shù)據(jù)集包含了各種類別的圖像和相應的標注信息,可以用于訓練和評估目標檢測模型。
自行標注:如果需要特定領域或特定任務的數(shù)據(jù)集,可以自行收集圖像數(shù)據(jù)并進行標注。標注可以包括物體的邊界框、類別信息等??梢允褂脴俗⒐ぞ呷鏛abelImg、LabelMe等進行標注工作。
第三方數(shù)據(jù)提供商:有些數(shù)據(jù)提供商提供各種類型的標注數(shù)據(jù)集,可以根據(jù)需求購買或獲取這些數(shù)據(jù)集。一些公司和組織也提供定制的數(shù)據(jù)集收集和標注服務。
數(shù)據(jù)增強:除了獲取現(xiàn)有的數(shù)據(jù)集外,還可以通過數(shù)據(jù)增強技術來擴充數(shù)據(jù)集規(guī)模,增加數(shù)據(jù)的多樣性。數(shù)據(jù)增強包括旋轉(zhuǎn)、翻轉(zhuǎn)、縮放、亮度調(diào)整等操作,可以提高模型的泛化能力。
合作伙伴和社區(qū):與合作伙伴、學術界或開發(fā)者社區(qū)合作,共享數(shù)據(jù)集或參與共同構(gòu)建數(shù)據(jù)集,可以獲得更多的數(shù)據(jù)資源和支持。
2.數(shù)據(jù)集包括訓練集和驗證集嗎?
數(shù)據(jù)集通常包括訓練集和驗證集。在機器學習和深度學習任務中,訓練集用于訓練模型的參數(shù),而驗證集用于評估模型的性能和調(diào)整超參數(shù)。
訓練集是模型用來學習特征和參數(shù)的數(shù)據(jù)集,通常包含大量的標注數(shù)據(jù),用于訓練模型進行目標檢測、分類、分割等任務。訓練集的目的是讓模型學習到數(shù)據(jù)集中的模式和規(guī)律,以便對新的數(shù)據(jù)進行預測和分類。
驗證集是用來評估模型在訓練過程中的性能和泛化能力的數(shù)據(jù)集。在訓練過程中,可以使用驗證集來監(jiān)控模型的性能,并根據(jù)驗證集的表現(xiàn)調(diào)整模型的超參數(shù),防止模型過擬合或欠擬合。
通常,數(shù)據(jù)集會被劃分為訓練集和驗證集兩部分,比例可以根據(jù)具體任務和數(shù)據(jù)量來確定。常見的劃分比例是將數(shù)據(jù)集的大約80%用作訓練集,20%用作驗證集。
3.如何訓練自己的數(shù)據(jù)集?
這里的方法CSDN上有許多博主都在介紹,大致的流程是:
練自己的數(shù)據(jù)集通常涉及以下步驟:
數(shù)據(jù)收集標注——對收集到的圖像數(shù)據(jù)進行預處理——將數(shù)據(jù)集劃分為訓練集和驗證集——選擇適合目標檢測任務的模型,如YOLOv5、Faster R-CNN、SSD——使用訓練集對選定的模型進行訓練
——使用驗證集對訓練好的模型進行評估——根據(jù)評估結(jié)果調(diào)整模型的超參數(shù)、學習率等——將訓練好的模型部署到實際應用中,用于目標檢測任務,可以將模型集成到自動駕駛系統(tǒng)、智能監(jiān)控系統(tǒng)等中。
有一位博主利用yolov5進行訓練的過程如下:
4.環(huán)境配置中的python、pycharm、numpy、panda、anaconda、tensorflow、pytorch都是什么?
①python是一門編程語言。
②pycharm是一個IDE,即集成了解釋、編譯、調(diào)試等各種功能的開發(fā)平臺。
③numpy是Python中用于科學計算的基礎庫,提供了多維數(shù)組對象(ndarray)和各種數(shù)學函數(shù)。
④Pandas是建立在NumPy之上的數(shù)據(jù)處理庫,提供了高級數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具,如Series和DataFrame,用于處理和分析結(jié)構(gòu)化數(shù)據(jù)
⑤Anaconda 是包管理工具,也是一個解釋器。
⑥TensorFlow 是由Google開發(fā)的開源深度學習框架,提供了豐富的API和工具,支持各種深度學習任務,如圖像識別、自然語言處理、目標檢測等
⑦PyTorch 是由Facebook開發(fā)的開源深度學習框架,也用于構(gòu)建和訓練深度學習模型
⑧yolo是一種深度學習的算法,可以在TensorFlow或者PyTorch構(gòu)建的框架下實現(xiàn)。
三、目標檢測性能指標
分為檢測速度和檢測精度。
1.檢測精度
準確率(Precision):指檢測出的目標中真正為目標的比例,即檢測為目標且確實為目標的數(shù)量與所有檢測為目標的數(shù)量的比值。即
召回率(Recall):指所有真正為目標的樣本中被檢測出的比例,即檢測為目標且確實為目標的數(shù)量與所有真正為目標的數(shù)量的比值。
F1分數(shù):綜合考慮準確率和召回率,是準確率和召回率的調(diào)和平均值,可以幫助評估模型在準確率和召回率之間的平衡。
平均精度均值(mAP):是目標檢測任務中常用的評估指標,綜合考慮了不同類別的準確率和召回率,計算出每個類別的AP(平均精度),然后取所有類別AP的平均值作為最終的mAP。
交并比(IoU):指預測框與真實框之間的重疊程度,通常用于衡量目標檢測算法的定位準確性。
漏檢率(Miss Rate):指未檢測到的目標數(shù)量與所有真實目標數(shù)量的比值,是召回率的補數(shù)。
誤檢率(False Alarm Rate):指被錯誤檢測為目標的數(shù)量與所有未真實目標數(shù)量的比值,是準確率的補數(shù)。
2.檢測速度
前傳耗時:指模型進行一次前傳(從輸入到輸出的計算過程)所花費的時間。前傳耗時直接影響模型的推理速度,通常希望前傳耗時越短越好,特別是在實時應用中,如視頻分析、自動駕駛等。
FPS(Frames Per Second):指模型每秒能夠處理的幀數(shù),即模型每秒能夠進行多少次推理。FPS是衡量模型推理速度的重要指標,通常希望模型的FPS越高越好,以實現(xiàn)實時的目標檢測和識別。
FLOPS(Floating Point Operations Per Second):指模型每秒執(zhí)行的浮點運算次數(shù)。FLOPS是衡量模型計算復雜度的指標,可以用來評估模型的計算資源消耗和效率。通常情況下,F(xiàn)LOPS越低表示模型計算效率越高。
四、YOLO目標檢測系列的發(fā)展史
YOLO(You Only Look Once)是一種流行的目標檢測算法,以其簡單、快速和高效而聞名。以下是YOLO的發(fā)展歷程:
YOLO v1:YOLO v1是于2015年由Joseph Redmon等人提出的第一個YOLO版本。YOLO v1采用單個神經(jīng)網(wǎng)絡模型,將目標檢測任務轉(zhuǎn)化為回歸問題,通過在圖像中預測邊界框的坐標和類別來實現(xiàn)目標檢測。YOLO v1的特點是速度快,但在小目標檢測和定位精度上存在一定問題。
YOLO v2:YOLO v2(也稱為YOLO9000)是于2016年提出的改進版本,引入了一些新的技術和優(yōu)化,如使用更深的網(wǎng)絡、多尺度訓練、Batch Normalization等,提高了檢測精度和泛化能力。YOLO v2還引入了目標類別的多標簽預測,使得模型可以同時檢測多個類別。
YOLO v3:YOLO v3是于2018年發(fā)布的最新版本,進一步改進了檢測精度和速度。YOLO v3采用了更深的Darknet-53網(wǎng)絡作為基礎網(wǎng)絡結(jié)構(gòu),引入了多尺度預測、特征融合和更細粒度的邊界框預測,提高了模型的檢測性能。YOLO v3還支持多種不同尺寸的輸入圖像,適應不同場景的需求。
YOLO v4:YOLO v4是YOLO系列的最新版本,于2020年發(fā)布。YOLO v4引入了一系列新技術和優(yōu)化,如CSPDarknet53網(wǎng)絡、Mish激活函數(shù)、SAM模塊等,進一步提高了檢測精度和速度。YOLO v4還支持混合精度訓練、模型剪枝等技術,使得模型更加高效和靈活。
①one-stage和two-stage的區(qū)別?
Two-stage(兩階段):代表-- Fsater-rcnn Mask-rcnn系列
One-stage(單階段):代表-- Yolo系列
簡單地說,單階段相比多階段,更加一步到位,把圖像直接輸入單個神經(jīng)網(wǎng)絡后就能直接輸出結(jié)果,但是兩階段算法必須先將圖像生成一個可能含有目標對象的候選區(qū)域,再進一步處理。
所以,
One-stage
優(yōu)勢:速度非??欤m合做實時檢測任務
劣勢:效果通常不會太好
Two-stage
優(yōu)勢:效果通常比較好
劣勢:速度較慢,不適合做實時檢測任務
②yolo系列算法的特點
這個圖可以看出,yolo系列算法的mAP(即檢測精度)沒有快速線性卷積神經(jīng)網(wǎng)絡(RCNN)高,但是其FPS卻非常高,所以處理實時性要求高的場景比較合適。
五、YOLOV5算法的實現(xiàn)原理
總結(jié)就是:
①將輸入圖像分割成網(wǎng)格:YOLO5將輸入圖像分成S×S個網(wǎng)格,每個網(wǎng)格負責檢測一個目標。如果一個目標的中心點在某個網(wǎng)格內(nèi),那么就會在該網(wǎng)格內(nèi)擬合出一個邊界框。
②提取特征向量:使用卷積神經(jīng)網(wǎng)絡提取每個網(wǎng)格的特征向量,該特征向量代表了該網(wǎng)格內(nèi)目標的特征。
③預測邊界框和類別:對于每個網(wǎng)格,使用全連接層來預測一個或多個邊界框,以及每個邊界框可能的類別和置信度得分。
④預測結(jié)果的后處理:對于每個目標,選擇置信度最高的邊界框。然后,根據(jù)非極大值抑制(NMS)算法去掉重復邊界框并選擇最終的目標框。
5.1 分割網(wǎng)格的作用
主要起四個作用:
減少計算量:相比于對整張圖像進行目標檢測,只對每個網(wǎng)格進行檢測可以大大提高算法的運行速度。
定位目標:通過將圖像分割成網(wǎng)格,可以更精確地定位目標的位置。每個網(wǎng)格負責檢測其中的目標,減少目標位置的搜索范圍
適應不同尺寸的目標:分割成多個網(wǎng)格可以更好地適應不同尺寸和比例的目標。每個網(wǎng)格可以獨立地檢測目標,無需對整個圖像進行縮放或調(diào)整,從而提高了算法的魯棒性。
多尺度檢測:通過將圖像分割成多個網(wǎng)格,可以實現(xiàn)多尺度的目標檢測。不同大小的目標可能出現(xiàn)在不同大小的網(wǎng)格中,這樣可以更全面地檢測圖像中的目標。
5.2 對劃分出來的每個網(wǎng)格都使用一次卷積神經(jīng)網(wǎng)絡來提取特征向量嗎?
在YOLO算法中,每個網(wǎng)格都會經(jīng)過一次卷積神經(jīng)網(wǎng)絡的前向傳播過程,從而提取該網(wǎng)格內(nèi)目標的特征向量。這些特征向量將用于后續(xù)的目標邊界框和類別的預測。
至于如何用CNN進行特征提取的,這個就是先送入池化層減少復雜度,簡單的卷積層進行滑動窗口的卷積操作得到一個特征矩陣,然后送入全連接層,進行特征映射、非線性變換和參數(shù)學習,最終得到輸出特征圖。
5.3 每個邊界框的類別和置信度是怎么得出的?
在全連接層后,通常會使用softmax函數(shù)將網(wǎng)絡輸出轉(zhuǎn)換為概率分布,以表示每個類別的可能性。
5.4 非極大值抑制(NMS)算法是什么?
非極大值抑制(Non-Maximum Suppression,NMS)是一種常用的目標檢測算法后處理技術,用于去除重疊邊界框并選擇最終的目標框。其主要思想是在檢測到的多個邊界框中,保留置信度最高的邊界框,同時抑制與該邊界框重疊度較高的其他邊界框。
NMS算法的步驟如下:
①按照置信度排序:首先,對所有檢測到的邊界框按照其置信度得分進行排序,置信度高的邊界框排在前面。
②選擇置信度最高的邊界框:從排好序的邊界框列表中選擇置信度最高的邊界框,并將其添加到最終的目標框列表中。
③計算重疊度:對于剩余的邊界框,計算它們與已選中的最高置信度邊界框的重疊度(如IoU,交并比)。
④去除重疊邊界框:對于重疊度高于設定閾值的邊界框,將其從列表中去除,只保留重疊度較低的邊界框。
⑤重復操作:重復以上步驟,直到所有邊界框都被處理完畢。
通過非極大值抑制算法,可以有效地減少重疊邊界框,保留置信度最高的邊界框,從而得到最終的目標檢測結(jié)果。NMS算法在目標檢測領域被廣泛應用,能夠提高檢測結(jié)果的準確性和穩(wěn)定性。
六、實現(xiàn)一個yolov5目標檢測的項目,需要哪些基礎的軟件和環(huán)境配置呢?
要實現(xiàn)一個YOLOv5目標檢測項目,需要以下基礎的軟件和環(huán)境配置:
Python環(huán)境:YOLOv5是基于Python實現(xiàn)的,因此需要安裝Python環(huán)境。推薦使用Python 3.6及以上版本。
PyTorch:YOLOv5使用PyTorch作為深度學習框架,因此需要安裝PyTorch。可以通過PyTorch官方網(wǎng)站提供的安裝指南安裝對應版本的PyTorch。
CUDA和cuDNN:如果要在GPU上加速訓練和推理過程,需要安裝相應版本的CUDA和cuDNN,并配置PyTorch以支持GPU加速。
YOLOv5代碼庫:下載YOLOv5的代碼庫,可以從GitHub上的ultralytics/yolov5倉庫獲取??梢允褂胓it命令克隆代碼庫或直接下載zip文件。
依賴庫:安裝項目所需的依賴庫,如NumPy、OpenCV、Matplotlib等??梢酝ㄟ^pip或conda安裝這些庫。
數(shù)據(jù)集:準備用于訓練和測試的目標檢測數(shù)據(jù)集。可以使用已有的數(shù)據(jù)集,也可以自行收集和標注數(shù)據(jù)集。
預訓練模型:下載YOLOv5的預訓練模型權重,可以從YOLOv5官方發(fā)布的權重文件中獲取。文章來源:http://www.zghlxwxcb.cn/news/detail-845523.html
配置文件:根據(jù)項目需求,可以修改YOLOv5的配置文件,如模型結(jié)構(gòu)、超參數(shù)設置等。文章來源地址http://www.zghlxwxcb.cn/news/detail-845523.html
到了這里,關于YOLOv5目標檢測學習(1):yolo系列算法的基礎概念的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!