實(shí)驗(yàn)四:深度學(xué)習(xí)算法及應(yīng)用-基于YOLOV3-DarkNet50的籃球檢測模型
項(xiàng)目文檔工程:https://github.com/mindspore-ai/mindspore-21-days-tutorials/tree/main/
前言
這個實(shí)驗(yàn)要求做一個深度學(xué)習(xí)項(xiàng)目,做頭歌的或者自己在華為云找一個都行,然后在華為云一眼就相中了這個籃球檢測模型的項(xiàng)目(籃球愛好者狂喜),通過這次實(shí)驗(yàn)也學(xué)習(xí)到了許多東西,了解了一些課上沒有講到的內(nèi)容,但是因?yàn)樵创a的代碼量太多而且接口也很多,所以對源碼并不是很熟悉
一、實(shí)驗(yàn)?zāi)康?/h3>
-
了解深度學(xué)習(xí)的基本原理;
-
能夠使用深度學(xué)習(xí)開源工具;
-
應(yīng)用深度學(xué)習(xí)算法求解實(shí)際問題。
二、實(shí)驗(yàn)要求
-
解釋深度學(xué)習(xí)原理;
-
采用深度學(xué)習(xí)框架完成課程綜合實(shí)驗(yàn),并對實(shí)驗(yàn)結(jié)果進(jìn)行分析;
-
回答思考題。
三、實(shí)驗(yàn)平臺
了解深度學(xué)習(xí)的基本原理;
能夠使用深度學(xué)習(xí)開源工具;
應(yīng)用深度學(xué)習(xí)算法求解實(shí)際問題。
解釋深度學(xué)習(xí)原理;
采用深度學(xué)習(xí)框架完成課程綜合實(shí)驗(yàn),并對實(shí)驗(yàn)結(jié)果進(jìn)行分析;
回答思考題。
華為云平臺(推薦使用昇騰 910、ModelArts、OCR 識別、圖像識別等完成綜合實(shí)驗(yàn))
https://www.huaweicloud.com/
四、實(shí)驗(yàn)內(nèi)容與步驟
1.問題描述
主要內(nèi)容是使用yolo算法對一張籃球比賽的圖片進(jìn)行推理,分析出圖片中的籃球隊(duì)員及其動作(可能是進(jìn)攻、防守、走路、跑步、蓋帽、摔跤等等),并給出對應(yīng)的概率
2.算法原理
主要流程如下:
- 準(zhǔn)備籃球比賽相關(guān)的數(shù)據(jù)集
- 選擇YOLOv3模型
- 調(diào)用MindSpore API執(zhí)行流程
即通過給定的數(shù)據(jù)集和開發(fā)好的網(wǎng)絡(luò)模型,通過Model API進(jìn)行一次封裝,通過train和predict接口進(jìn)行訓(xùn)練和推理的功能,最終模型會預(yù)測出一個結(jié)果。
此次實(shí)驗(yàn)的算法原理如下,主要分為三個步驟:
1)數(shù)據(jù)準(zhǔn)備
首先從網(wǎng)絡(luò)中獲取mp4視頻,通過OpenCV逐幀獲取圖片并保存起來。
獲取原始圖片后,還需要進(jìn)行加工。即進(jìn)行數(shù)據(jù)集標(biāo)注。
接著再對圖片進(jìn)行預(yù)處理:
- 對圖片隨機(jī)進(jìn)行裁剪,生成十個候選框
- 篩選糾正候選框輸出唯一值
- 對輸出值進(jìn)行圖片隨機(jī)裁剪
- 對圖片進(jìn)行隨機(jī)翻轉(zhuǎn)操作(50%)
- 色彩擾動,對圖片的對比度和曝光度進(jìn)行處理,提高圖片魯棒性
- Normalize歸一化操作,將不均勻的區(qū)域均勻化
- HWC2CHW操作,對圖片尺寸進(jìn)行轉(zhuǎn)換
2)模型開發(fā)
目標(biāo)檢測
目標(biāo)檢測 = 圖像分類 + 位置檢測
目標(biāo)檢測分類:
Two-stage目標(biāo)檢測:
One-stage目標(biāo)檢測:
對于特征提取一般使用Backbone網(wǎng)絡(luò),對于目標(biāo)定位和目標(biāo)分類一般使用head網(wǎng)絡(luò)
此次實(shí)驗(yàn)使用的YOLOv3算法就是一個One-stage目標(biāo)檢測算法,其特點(diǎn)是檢測精度較低,檢測速度較快
使用YOLOv3如何提升小目標(biāo)檢測準(zhǔn)確率?
原因分析:隨著Backbone網(wǎng)絡(luò)層數(shù)越來越多,輸出特征圖的尺寸越小,更適合大目標(biāo)檢測的場景。
解決思路:
- 引入多尺度預(yù)測,將大尺寸特征圖用于小目標(biāo)檢測,使用小尺寸特征圖進(jìn)行大目標(biāo)檢測;
- 為解決大尺寸特征圖識別率低的問題,通過FPN算法實(shí)現(xiàn)特征融合,同時支持大、中、小目標(biāo)的檢測場景。
如圖將小尺寸的特征融合到大尺寸的特征中,使得大尺寸的特征信息更豐富,從而解決大尺寸特征圖識別率低的問題
新問題:如何在增加YOLOv3 Backbone網(wǎng)絡(luò)層數(shù)的同時,仍不影響網(wǎng)絡(luò)的精度?(過擬合問題)
答:引入殘差塊
YOLOv3算法檢測流程:
步驟1:提取圖像特征
首先是經(jīng)過預(yù)處理的圖片
接著做一次卷積運(yùn)算,通道量會從3個變成32個
再進(jìn)行卷積運(yùn)算,特征量進(jìn)一次增加,但圖像尺寸降低
接著不斷進(jìn)行卷積操作,最后依次得到三種尺寸的特征圖,用于后續(xù)的特征融合
-
一個256個特征,尺寸為52*52的大特征圖
-
一個512個特征,尺寸為26*26的中特征圖
-
一個1024個特征,尺寸為13*13的小特征圖
步驟2:輸出特征圖預(yù)處理
對于10可分為三種:
- 位置偏移量(4維),用于Bounding box檢測
- 檢測置信度(1維),用于Bounding box篩選
- 類別(5維)
步驟3:基于Anchor box預(yù)測Bounding box
Anchor box:預(yù)設(shè)的一組邊框集合,提升Bounding box預(yù)測準(zhǔn)確率。
選擇合適的Anchor box:
- 尺寸:不同于Faster-RCNN手動設(shè)置的方式,YOLOv3使用K-means聚類算法自動生成
- 數(shù)量:均衡檢測精度和網(wǎng)絡(luò)復(fù)雜度因素,選用9個Anchor box。
接著基于Anchor box求得Bounding box位置
步驟4:篩選Bounding box輸出預(yù)測結(jié)果
統(tǒng)計(jì)Bounding box個數(shù):
13
?
13
?
3
+
26
?
26
?
3
+
52
?
52
?
3
=
10674
13*13*3+26*26*3+52*52*3=10674
13?13?3+26?26?3+52?52?3=10674
置信度篩選:
- 置信度<0.01:丟棄
- 置信度>=0.01:進(jìn)入候選
進(jìn)行NMS算法:
- 結(jié)果大于等于0.5,說明重合過多,丟棄
- 結(jié)果小于0.5,輸出結(jié)果
注意事項(xiàng):
- 置信度和NMS的閾值都是人為設(shè)置的,比較依賴用戶經(jīng)驗(yàn)
- 首先執(zhí)行置信度篩選操作,可大幅減少NMS計(jì)算過程的運(yùn)算復(fù)雜度
3)訓(xùn)練/推理
Ascend環(huán)境信息:
- 硬件環(huán)境:ModelArts云服務(wù)(Ascend 910單卡)
- 框架版本:MindSpore v0.5
GPU環(huán)境信息:
- 硬件環(huán)境:GPU (Nvidia Tesla V100單卡)
- 框架版本:MindSpore v1.0
具體流程見看下面的實(shí)驗(yàn)步驟
3.實(shí)驗(yàn)步驟
1)上傳測試數(shù)據(jù)集和運(yùn)行腳本到OBS服務(wù)
進(jìn)入華為云的OBS服務(wù)平臺后,點(diǎn)擊桶列表,再點(diǎn)擊右上角創(chuàng)建桶
只需填寫桶名稱,將存儲策略改成單AZ存儲即可
上傳籃球比賽圖片、ckpt文件和源代碼到新建的 obs 桶中,將提前給好的文件夾中的所有文件到新建的 obs 桶中:
上傳全部完成之后如下:
- ckpt_files存放預(yù)訓(xùn)練模型
- log存放日志
- yolov3存放python程序
- basketball-dataset存放數(shù)據(jù)集
- output存放推理的結(jié)果圖片
2)在ModelArts服務(wù)上執(zhí)行模型推理任務(wù)
進(jìn)入 ModelArts 界面之后,點(diǎn)擊左側(cè)“訓(xùn)練管理”,在下拉菜單中點(diǎn)擊“訓(xùn)練作業(yè)”,進(jìn)入訓(xùn)練作業(yè)界面后,點(diǎn)擊中上方的“創(chuàng)建”按鈕
創(chuàng)建任務(wù)的參數(shù)配置參考如下:
創(chuàng)建任務(wù)成功后會進(jìn)行訓(xùn)練
訓(xùn)練完成后:
檢測的原圖為(今年NBA總決賽的截圖):
預(yù)測結(jié)果如下:
可以看到,可能和圖片清晰度和模型的準(zhǔn)確度等關(guān)系有關(guān),導(dǎo)致最后的結(jié)果并沒有將所有人物都框出來。
下面是完成進(jìn)階版本,即將預(yù)測的對象從圖片換成視頻,即預(yù)測一個打籃球視頻中各個人物的動作。
主要思想如上,與預(yù)測圖片的步驟相比多了兩部:
- 將籃球視頻解碼成許多籃球圖片,再對這些圖片進(jìn)行預(yù)測
- 將圖片合成生成視頻
首先是將視頻逐幀分解成圖片的代碼,參考
"""從視頻逐幀讀取圖片"""
import glob
import cv2
import numpy as np
cv2.__version__
# 讀取視頻文件
cap = cv2.VideoCapture('./input.mp4')
# 獲取視頻幀率(30p/60p)
frame_rate = round(cap.get(5))
# 獲取視頻幀數(shù)
frame_num = cap.get(7)
# type(frame_num)
# 由于frame_num是foat型,需要int()轉(zhuǎn)換
# 逐幀獲取圖片
for i in range(int(frame_num)):
ret, frame = cap.read()
cv2.imwrite('images\match_snapshot%d.jpg' % i, frame)
np.shape(frame)
cap.release()
cv2.destroyAllWindows()
運(yùn)行后結(jié)果如下:
得到將近600多張圖片
接著還需要對 predict.py 進(jìn)行修改,因?yàn)槠渲活A(yù)測了一張圖片,修改就是加一個for循環(huán)即可
接著將文件全部上傳至OBS桶中,然后進(jìn)行預(yù)測
預(yù)測完成,將輸出得到的圖片全部放入本地目錄下:
然后在圖片目錄下新建 jpg2video.py 文件:
# 要轉(zhuǎn)換的圖片的保存地址,按順序排好,后面會一張一張按順序讀取。
import glob
import cv2
# import numpy as np
# cv2.__version__
convert_image_path = 'images-out'
frame_rate = 30
# 幀率(fps),尺寸(size),size為圖片的大小,本文轉(zhuǎn)換的圖片大小為1920×1080,
# 即寬為1920,高為1080,要根據(jù)自己的情況修改圖片大小。
size = (960, 544)
fourcc = cv2.VideoWriter_fourcc('M', 'P', '4', 'V') # mp4
# cv2.VideoWriter_fourcc('I', '4', '2', '0')
videoWriter = cv2.VideoWriter('output.mp4', fourcc,
frame_rate, size)
for img in glob.glob(convert_image_path + "/*.jpg"):
read_img = cv2.imread(img)
videoWriter.write(read_img)
videoWriter.release()
最后生成的結(jié)果預(yù)測效果也并不是很好,很多人物都沒有預(yù)測到
4.思考題
深度算法參數(shù)的設(shè)置對算法性能的影響?
- 網(wǎng)絡(luò)架構(gòu):YOLO算法有幾個版本(如YOLOv1、YOLOv2、YOLOv3等),每個版本的網(wǎng)絡(luò)架構(gòu)可能有所不同,對于不同的任務(wù)和數(shù)據(jù)集,選擇適當(dāng)?shù)木W(wǎng)絡(luò)架構(gòu)是至關(guān)重要的。
- 特征提取器的深度:YOLO算法中使用的特征提取器通常是基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)的,網(wǎng)絡(luò)的深度可以通過增加卷積層或堆疊更多的殘差塊等方式來調(diào)整。增加網(wǎng)絡(luò)深度可能會增加模型的表達(dá)能力,但也可能增加訓(xùn)練和推理的計(jì)算成本。
- 輸入分辨率:輸入圖像的分辨率也會對算法性能產(chǎn)生影響。較高的分辨率可以提供更多的細(xì)節(jié)信息,但同時也會增加計(jì)算量。因此,在實(shí)際應(yīng)用中需要權(quán)衡分辨率與計(jì)算資源之間的關(guān)系。
- 學(xué)習(xí)率和學(xué)習(xí)策略:學(xué)習(xí)率是控制模型參數(shù)更新的速度的重要參數(shù)。選擇合適的學(xué)習(xí)率和學(xué)習(xí)策略,如學(xué)習(xí)率衰減、動量等,可以加速模型的訓(xùn)練收斂,并提高算法性能。
- 正則化和優(yōu)化器:正則化技術(shù)如L1或L2正則化可以幫助防止過擬合。選擇合適的優(yōu)化器(如Adam、SGD等)和正則化方法可以改善模型的泛化能力。
- 數(shù)據(jù)增強(qiáng):數(shù)據(jù)增強(qiáng)是通過對訓(xùn)練數(shù)據(jù)進(jìn)行隨機(jī)變換來增加數(shù)據(jù)多樣性。適當(dāng)?shù)臄?shù)據(jù)增強(qiáng)可以提高模型的魯棒性和泛化能力。
- 批量大?。号看笮∈侵该看斡?xùn)練時使用的樣本數(shù)量。較大的批量大小可以提高訓(xùn)練的效率,但也可能導(dǎo)致內(nèi)存消耗增加。選擇適當(dāng)?shù)呐看笮】梢栽诒3钟?xùn)練效果的同時,兼顧計(jì)算資源的利用。
五、實(shí)驗(yàn)總結(jié)
在進(jìn)行實(shí)驗(yàn)過程中,我使用YOLO算法對籃球比賽的圖片進(jìn)行推理,并成功地分析出了圖片中的籃球隊(duì)員及其動作,如進(jìn)攻、防守、走路、跑步、蓋帽、摔跤等等。通過這次實(shí)驗(yàn),我學(xué)到了許多寶貴的經(jīng)驗(yàn)和知識。
首先,我認(rèn)識到Y(jié)OLO算法在目標(biāo)檢測任務(wù)中的強(qiáng)大能力。YOLO算法通過將整個圖像劃分為多個網(wǎng)格,并在每個網(wǎng)格上預(yù)測邊界框和類別信息,能夠?qū)崿F(xiàn)實(shí)時目標(biāo)檢測。這種單階段的檢測算法具有較高的速度和準(zhǔn)確性,非常適用于處理籃球比賽這樣的動態(tài)場景。
其次,我了解到數(shù)據(jù)集對算法性能的重要性。為了訓(xùn)練和評估算法,我使用了包含籃球比賽圖像和相應(yīng)標(biāo)注的數(shù)據(jù)集。這個數(shù)據(jù)集的質(zhì)量和多樣性對于訓(xùn)練出準(zhǔn)確的模型起著至關(guān)重要的作用。在未來的工作中,我會更加關(guān)注數(shù)據(jù)集的收集和標(biāo)注過程,以獲得更好的結(jié)果。
此外,實(shí)驗(yàn)過程中我還注意到了一些參數(shù)調(diào)優(yōu)的技巧。例如,合理選擇網(wǎng)絡(luò)架構(gòu)、調(diào)整輸入分辨率、調(diào)節(jié)學(xué)習(xí)率和優(yōu)化器等,都可以對算法性能產(chǎn)生顯著影響。通過不斷調(diào)整這些參數(shù),我逐漸找到了適合我的任務(wù)和數(shù)據(jù)集的最佳配置。
最重要的是,這次實(shí)驗(yàn)加深了我對深度學(xué)習(xí)目標(biāo)檢測算法的理解。我進(jìn)一步掌握了YOLO算法的工作原理,包括特征提取、邊界框預(yù)測和類別分類等關(guān)鍵步驟。這不僅對籃球比賽的圖像分析有幫助,也為我在其他領(lǐng)域的目標(biāo)檢測任務(wù)提供了基礎(chǔ)。文章來源:http://www.zghlxwxcb.cn/news/detail-482639.html
每個網(wǎng)格上預(yù)測邊界框和類別信息,能夠?qū)崿F(xiàn)實(shí)時目標(biāo)檢測。這種單階段的檢測算法具有較高的速度和準(zhǔn)確性,非常適用于處理籃球比賽這樣的動態(tài)場景。
其次,我了解到數(shù)據(jù)集對算法性能的重要性。為了訓(xùn)練和評估算法,我使用了包含籃球比賽圖像和相應(yīng)標(biāo)注的數(shù)據(jù)集。這個數(shù)據(jù)集的質(zhì)量和多樣性對于訓(xùn)練出準(zhǔn)確的模型起著至關(guān)重要的作用。在未來的工作中,我會更加關(guān)注數(shù)據(jù)集的收集和標(biāo)注過程,以獲得更好的結(jié)果。
此外,實(shí)驗(yàn)過程中我還注意到了一些參數(shù)調(diào)優(yōu)的技巧。例如,合理選擇網(wǎng)絡(luò)架構(gòu)、調(diào)整輸入分辨率、調(diào)節(jié)學(xué)習(xí)率和優(yōu)化器等,都可以對算法性能產(chǎn)生顯著影響。通過不斷調(diào)整這些參數(shù),我逐漸找到了適合我的任務(wù)和數(shù)據(jù)集的最佳配置。
最重要的是,這次實(shí)驗(yàn)加深了我對深度學(xué)習(xí)目標(biāo)檢測算法的理解。我進(jìn)一步掌握了YOLO算法的工作原理,包括特征提取、邊界框預(yù)測和類別分類等關(guān)鍵步驟。這不僅對籃球比賽的圖像分析有幫助,也為我在其他領(lǐng)域的目標(biāo)檢測任務(wù)提供了基礎(chǔ)。
總的來說,這次實(shí)驗(yàn)是一次寶貴的學(xué)習(xí)經(jīng)歷。通過實(shí)踐應(yīng)用YOLO算法進(jìn)行籃球比賽圖像分析,我不僅提升了對目標(biāo)檢測算法的理解,還掌握了一些實(shí)際操作技巧。這將對我的未來研究和實(shí)際應(yīng)用中的計(jì)算機(jī)視覺任務(wù)產(chǎn)生積極的影響。文章來源地址http://www.zghlxwxcb.cn/news/detail-482639.html
到了這里,關(guān)于HNU人工智能實(shí)驗(yàn)四-基于YOLOV3-DarkNet50的籃球檢測模型的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!