Darknet——一個源碼為C的神經網絡框架
今天路同學介紹一個相對小眾的深度學習框架——Darknet。
與流行的Tensorflow以及Caffe框架相比,Darknet框架在某些方面有著自己獨特的優勢。
關于Darknet深度學習框架
Darknet深度學習框架是由JosephRedmon提出的一個用C和CUDA編寫的開源神經網絡框架。它安裝速度快,易于安裝,并支持CPU和GPU計算。
你可以在GitHub上找到源代碼:
https://github.com/pjreddie/darknet
你也可以在官網上閱讀完成更多事情:
https://pjreddie.com/darknet/
YOLO算法
YOLO(YouOnlyLookOnce)是JosephRedmon針對這一框架提出的核心目標檢測算法。
作者在YOLO算法中把物體檢測問題處理成回歸問題,用一個卷積神經網絡結構就可以從輸入圖像直接預測boundingbox和類別概率。
YOLO算法的優點:
1、YOLO的速度非???。在TitanXGPU上的速度是45fps(framespersecond),加速版的YOLO差不多是150fps。
2、YOLO是基于圖像的全局信息進行預測的。這一點和基于slidingwindow以及regionproposal等檢測算法不一樣。與FastR-CNN相比,YOLO在誤檢測(將背景檢測為物體)方面的錯誤率能降低一半多。
3、可以學到物體的generalizable-representations??梢岳斫鉃榉夯芰姟?/p>
4、準確率高。有實驗證明。
事實上,目標檢測的本質就是回歸,因此一個實現回歸功能的CNN并不需要復雜的設計過程。YOLO沒有選擇滑窗或提取proposal的方式訓練網絡,而是直接選用整圖訓練模型。這樣做的好處在于可以更好的區分目標和背景區域,相比之下,采用proposal訓練方式的Fast-R-CNN常常把背景區域誤檢為特定目標。當然,YOLO在提升檢測速度的同時犧牲了一些精度。
YOLO的設計理念遵循端到端訓練和實時檢測。YOLO將輸入圖像劃分為S*S個網格,如果一個物體的中心落在某網格(cell)內,則相應網格負責檢測該物體。
在訓練和測試時,每個網絡預測B個boundingboxes,每個boundingbox對應5個預測參數,即boundingbox的中心點坐標(x,y),寬高(w,h),和置信度評分。
這里的置信度評分(Pr(Object)*IOU(predtruth))綜合反映基于當前模型boundingbox內存在目標的可能性Pr(Object)和boundingbox預測目標位置的準確性IOU(predtruth)。如果boudingbox內不存在物體,則Pr(Object)=0。如果存在物體,則根據預測的boundingbox和真實的boundingbox計算IOU,同時會預測存在物體的情況下該物體屬于某一類的后驗概率Pr(Class_iObject)。
假定一共有C類物體,那么每一個網格只預測一次C類物體的條件類概率Pr(Class_iObject),i=1,2,...,C;每一個網格預測B個boundingbox的位置。即這B個boundingbox共享一套條件類概率Pr(Class_iObject),i=1,2,...,C。基于計算得到的Pr(Class_iObject),在測試時可以計算某個boundingbox類相關置信度:Pr(Class_iObject)*Pr(Object)*IOU(predtruth)=Pr(Class_i)*IOU(predtruth)。
如果將輸入圖像劃分為7*7網格(S=7),每個網格預測2個boundingbox(B=2),有20類待檢測的目標(C=20),則相當于最終預測一個長度為S*S*(B*5+C)=7*7*30的向量,從而完成檢測+識別任務,整個流程可以通過下圖理解。
YOLO網絡設計遵循了GoogleNet的思想,但與之有所區別。YOLO使用了24個級聯的卷積(conv)層和2個全連接(fc)層,其中conv層包括3*3和1*1兩種Kernel,最后一個fc層即YOLO網絡的輸出,長度為S*S*(B*5+C)=7*7*30.此外,作者還設計了一個簡化版的YOLO-small網絡,包括9個級聯的conv層和2個fc層,由于conv層的數量少了很多,因此YOLO-small速度比YOLO快很多。如下圖所示給出了YOLO網絡的架構。
YOLO算法的缺點:
1、位置精確性差,對于小目標物體以及物體比較密集的也檢測不好,比如一群小鳥。
2、YOLO雖然可以降低將背景檢測為物體的概率,但同時導致召回率較低。
路同學最近就在使用這一深度學習框架,親測好用!