版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第基于深度學(xué)習(xí)和OpenCV實現(xiàn)目標(biāo)檢測目錄使用深度學(xué)習(xí)和OpenCV進行目標(biāo)檢測MobileNets:高效(深度)神經(jīng)網(wǎng)絡(luò)使用OpenCV進行基于深度學(xué)習(xí)的對象檢測使用OpenCV檢測視頻
使用深度學(xué)習(xí)和OpenCV進行目標(biāo)檢測
基于深度學(xué)習(xí)的對象檢測時,您可能會遇到三種主要的對象檢測方法:
FasterR-CNNs(Renetal.,2015)
YouOnlyLookOnce(YOLO)(Redmonetal.,2015)
SingleShotDetectors(SSD)(Liu等人,2015年)
FasterR-CNNs可能是使用深度學(xué)習(xí)進行對象檢測最“聽說”的方法;然而,該技術(shù)可能難以理解(特別是對于深度學(xué)習(xí)的初學(xué)者)、難以實施且難以訓(xùn)練。
此外,即使使用“更快”的R-CNN實現(xiàn)(其中“R”代表“區(qū)域提議”),算法也可能非常慢,大約為7FPS。
如果追求純粹的速度,那么我們傾向于使用YOLO,因為這種算法要快得多,能夠在TitanXGPU上處理40-90FPS。YOLO的超快變體甚至可以達到155FPS。
YOLO的問題在于它的準(zhǔn)確性不高。
最初由Google開發(fā)的SSD是兩者之間的平衡。該算法比FasterR-CNN更直接。
MobileNets:高效(深度)神經(jīng)網(wǎng)絡(luò)
在構(gòu)建對象檢測網(wǎng)絡(luò)時,我們通常使用現(xiàn)有的網(wǎng)絡(luò)架構(gòu),例如VGG或ResNet,這些網(wǎng)絡(luò)架構(gòu)可能非常大,大約200-500MB。由于其龐大的規(guī)模和由此產(chǎn)生的計算數(shù)量,諸如此類的網(wǎng)絡(luò)架構(gòu)不適合資源受限的設(shè)備。相反,我們可以使用Google研究人員的另一篇論文MobileNets(Howard等人,2017年)。我們稱這些網(wǎng)絡(luò)為“MobileNets”,因為它們專為資源受限的設(shè)備而設(shè)計,例如您的智能手機。MobileNet與傳統(tǒng)CNN的不同之處在于使用了深度可分離卷積。深度可分離卷積背后的一般思想是將卷積分成兩個階段:
3×3深度卷積。
隨后是1×1逐點卷積。
這使我們能夠?qū)嶋H減少網(wǎng)絡(luò)中的參數(shù)數(shù)量。問題是犧牲了準(zhǔn)確性——MobileNets通常不如它們的大哥們準(zhǔn)確…………但它們的資源效率要高得多。
使用OpenCV進行基于深度學(xué)習(xí)的對象檢測
MobileNetSSD首先在COCO數(shù)據(jù)集(上下文中的常見對象)上進行訓(xùn)練,然后在PASCALVOC上進行微調(diào),達到72.7%mAP(平均精度)。
因此,我們可以檢測圖像中的20個對象(背景類為+1),包括飛機、自行車、鳥、船、瓶子、公共汽車、汽車、貓、椅子、牛、餐桌、狗、馬、摩托車、人、盆栽植物、羊、沙發(fā)、火車和電視顯示器。
在本節(jié)中,我們將使用OpenCV中的MobileNetSSD+深度神經(jīng)網(wǎng)絡(luò)(dnn)模塊來構(gòu)建我們的目標(biāo)檢測器。
打開一個新文件,將其命名為object_detection.py,并插入以下代碼:
importnumpyasnp
importcv2
if__name__=="__main__":
image_name='11.jpg'
prototxt='MobileNetSSD_totxt.txt'
model_path='MobileNetSSD_deploy.caffemodel'
confidence_ta=0.2
#初始化MobileNetSSD訓(xùn)練的類標(biāo)簽列表
#檢測,然后為每個類生成一組邊界框顏色
CLASSES=["background","aeroplane","bicycle","bird","boat",
"bottle","bus","car","cat","chair","cow","diningtable",
"dog","horse","motorbike","person","pottedplant","sheep",
"sofa","train","tvmonitor"]
COLORS=np.random.uniform(0,255,size=(len(CLASSES),3))
導(dǎo)入需要的包。
定義全局參數(shù):
image_name:輸入圖像的路徑。
prototxt:Caffeprototxt文件的路徑。
model_path:預(yù)訓(xùn)練模型的路徑。
confidence_ta:過濾弱檢測的最小概率閾值。默認(rèn)值為20%。
接下來,讓我們初始化類標(biāo)簽和邊界框顏色。
#loadourserializedmodelfromdisk
print("[INFO]loadingmodel...")
net=cv2.dnn.readNetFromCaffe(prototxt,model_path)
#加載輸入圖像并為圖像構(gòu)造一個輸入blob
#將大小調(diào)整為固定的300x300像素。
#(注意:SSD模型的輸入是300x300像素)
image=cv2.imread(image_name)
(h,w)=image.shape[:2]
blob=cv2.dnn.blobFromImage(cv2.resize(image,(300,300)),0.007843,
(300,300),127.5)
#通過網(wǎng)絡(luò)傳遞blob并獲得檢測結(jié)果和
#預(yù)測
print("[INFO]computingobjectdetections...")
net.setInput(blob)
detections=net.forward()
從磁盤加載模型。
讀取圖片。
提取高度和寬度(第35行),并從圖像中計算一個300x300像素的blob。
將blob放入神經(jīng)網(wǎng)絡(luò)。
計算輸入的前向傳遞,將結(jié)果存儲為detections。
#循環(huán)檢測結(jié)果
foriinnp.arange(0,detections.shape[2]):
#提取與數(shù)據(jù)相關(guān)的置信度(即概率)
#預(yù)測
confidence=detections[0,0,i,2]
#通過確?!爸眯哦取眮磉^濾掉弱檢測
#大于最小置信度
ifconfidenceconfidence_ta:
#從`detections`中提取類標(biāo)簽的索引,
#然后計算物體邊界框的(x,y)坐標(biāo)
idx=int(detections[0,0,i,1])
box=detections[0,0,i,3:7]*np.array([w,h,w,h])
(startX,startY,endX,endY)=box.astype("int")
#顯示預(yù)測
label="{}:{:.2f}%".format(CLASSES[idx],confidence*100)
print("[INFO]{}".format(label))
cv2.rectangle(image,(startX,startY),(endX,endY),
COLORS[idx],2)
y=startY-15ifstartY-1515elsestartY+15
cv2.putText(image,label,(startX,y),
cv2.FONT_HERSHEY_SIMPLEX,0.5,COLORS[idx],2)
#showtheoutputimage
cv2.imshow("Output",image)
cv2.imwrite("output.jpg",image)
cv2.waitKey(0)
循環(huán)檢測,首先我們提取置信度值。
如果置信度高于我們的最小閾值,我們提取類標(biāo)簽索引并計算檢測到的對象周圍的邊界框。
然后,提取框的(x,y)坐標(biāo),我們將很快使用它來繪制矩形和顯示文本。
接下來,構(gòu)建一個包含CLASS名稱和置信度的文本標(biāo)簽。
使用標(biāo)簽,將其打印到終端,然后使用之前提取的(x,y)坐標(biāo)在對象周圍繪制一個彩色矩形。
通常,希望標(biāo)簽顯示在矩形上方,但如果沒有空間,我們會將其顯示在矩形頂部下方。
最后,使用剛剛計算的y值將彩色文本覆蓋到圖像上。
運行結(jié)果:
使用OpenCV檢測視頻
打開一個新文件,將其命名為video_object_detection.py,并插入以下代碼:
video_name='12.mkv'
prototxt='MobileNetSSD_totxt.txt'
model_path='MobileNetSSD_deploy.caffemodel'
confidence_ta=0.2
#initializethelistofclasslabelsMobileNetSSDwastrainedto
#detect,thengenerateasetofboundingboxcolorsforeachclass
CLASSES=["background","aeroplane","bicycle","bird","boat",
"bottle","bus","car","cat","chair","cow","diningtable",
"dog","horse","motorbike","person","pottedplant","sheep",
"sofa","train","tvmonitor"]
COLORS=np.random.uniform(0,255,size=(len(CLASSES),3))
#loadourserializedmodelfromdisk
print("[INFO]loadingmodel...")
net=cv2.dnn.readNetFromCaffe(prototxt,model_path)
#initialzethevideostream,allowthecameratosensortowarmup,
#andinitlaizetheFPScounter
print('[INFO]startingvideostream...')
vs=cv2.VideoCapture(video_name)
fps=30#保存視頻的FPS,可以適當(dāng)調(diào)整
size=(600,325)
fourcc=cv2.VideoWriter_fourcc(*'XVID')
videowrite=cv2.VideoWriter('output.avi',fourcc,fps,size)
time.sleep(2.0)
定義全局參數(shù):
video_name:輸入視頻的路徑。
prototxt:Caffeprototxt文件的路徑。
model_path:預(yù)訓(xùn)練模型的路徑。
confidence_ta:過濾弱檢測的最小概率閾值。默認(rèn)值為20%。
接下來,讓我們初始化類標(biāo)簽和邊界框顏色。
加載模型。
初始化VideoCapture對象。
設(shè)置VideoWriter對象以及參數(shù)。size的大小由下面的代碼決定,需要保持一致,否則不能保存視頻。
接下就是循環(huán)視頻的幀,然后輸入到檢測器進行檢測,這一部分的邏輯和圖像檢測一致。代碼如下:
#loopovertheframesfromthevideostream
whileTrue:
ret_val,frame=vs.read()
ifret_valisFalse:
break
frame=imutils.resize(frame,width=1080)
print(frame.shape)
#grabtheframedimentionsandconvertittoablob
(h,w)=frame.shape[:2]
blob=cv2.dnn.blobFromImage(cv2.resize(frame,(300,300)),0.007843,(300,300),127.5)
#passtheblobthroughthenetworkandobtainthedetectionsandpredictions
net.setInput(blob)
detections=net.forward()
#loopoverthedetections
foriinnp.arange(0,detections.shape[2]):
#extracttheconfidence(i.e.,probability)associatedwith
#theprediction
confidence=detections[0,0,i,2]
#filteroutweakdetectionsbyensuringthe`confidence`is
#greaterthantheminimumconfidence
ifconfidenceconfidence_ta:
#extracttheindexoftheclasslabelfromthe
#`detections`,thencomputethe(x,y)-coordinatesof
#theboundingboxfortheobject
idx=int(detections[0,0,i,1])
box=detections[0,0,i,3:7]*np.array([w,h,w,h])
(startX,startY,endX,endY)=box.astype("int")
#drawthepredictio
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年安徽林業(yè)職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試備考題庫帶答案解析
- 2026年福建體育職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試模擬試題帶答案解析
- 2026年貴州健康職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性考試備考試題帶答案解析
- 2026年湖南高速鐵路職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試模擬試題有答案解析
- 2026年東營科技職業(yè)學(xué)院單招綜合素質(zhì)考試模擬試題帶答案解析
- 2026年保定職業(yè)技術(shù)學(xué)院單招職業(yè)技能筆試備考題庫帶答案解析
- 2026年廣西科技職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性考試備考題庫有答案解析
- 2026年湖南環(huán)境生物職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性考試備考題庫有答案解析
- 投資并購合作框架協(xié)議2025年
- 2026年河南藝術(shù)職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試模擬試題有答案解析
- 青霉素過敏性休克處理
- 70周歲換證三力測試題,老人駕考模擬測試題
- 工地清場協(xié)議書
- 2026年包頭輕工職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫附答案詳解
- 2026年及未來5年市場數(shù)據(jù)中國內(nèi)貿(mào)集裝箱行業(yè)全景評估及投資規(guī)劃建議報告
- 2025貴州鹽業(yè)(集團)有限責(zé)任公司貴陽分公司招聘筆試考試備考題庫及答案解析
- 重慶八中高2026屆高三12月適應(yīng)性月考(四)生物試卷(含答案解析)
- 電商行業(yè)個性化服務(wù)2025年用戶需求分析報告
- 湘教版(2024)八上地理教學(xué)設(shè)計-第二章第三節(jié) 中國的河流 第二課時 長江
- 2024年全國職業(yè)院校技能大賽中職組(舞蹈表演賽項)考試題庫(含答案)
- 中醫(yī)外治技術(shù)之穴位注射操作指南:精準(zhǔn)操作與安全優(yōu)化的臨床應(yīng)用解析
評論
0/150
提交評論