回覆列表
  • 1 # Java架構達人

    Darknet——一個原始碼為C的神經網路框架

    今天路同學介紹一個相對小眾的深度學習框架——Darknet。

    與流行的Tensorflow以及Caffe框架相比,Darknet框架在某些方面有著自己獨特的優勢。

    關於Darknet深度學習框架

    Darknet深度學習框架是由Joseph Redmon提出的一個用C和CUDA編寫的開源神經網路框架。它安裝速度快,易於安裝,並支援CPU和GPU計算。

    你可以在GitHub上找到原始碼:

    https://github.com/pjreddie/darknet

    你也可以在官網上閱讀完成更多事情:

    https://pjreddie.com/darknet/

    YOLO演算法

    YOLO(You Only Look Once)是Joseph Redmon針對這一框架提出的核心目標檢測演算法。

    作者在YOLO演算法中把物體檢測問題處理成迴歸問題,用一個卷積神經網路結構就可以從輸入影象直接預測bounding box和類別機率。

    YOLO演算法的優點

    1、YOLO的速度非常快。在Titan X GPU上的速度是45 fps(frames per second),加速版的YOLO差不多是150fps。

    2、YOLO是基於影象的全域性資訊進行預測的。這一點和基於sliding window以及region proposal等檢測演算法不一樣。與Fast R-CNN相比,YOLO在誤檢測(將背景檢測為物體)方面的錯誤率能降低一半多。

    3、可以學到物體的generalizable-representations。可以理解為泛化能力強。

    4、準確率高。有實驗證明。

    事實上,目標檢測的本質就是迴歸,因此一個實現迴歸功能的CNN並不需要複雜的設計過程。YOLO沒有選擇滑窗或提取proposal的方式訓練網路,而是直接選用整圖訓練模型。這樣做的好處在於可以更好的區分目標和背景區域,相比之下,採用proposal訓練方式的Fast-R-CNN常常把背景區域誤檢為特定目標。當然,YOLO在提升檢測速度的同時犧牲了一些精度。

    YOLO的設計理念遵循端到端訓練和實時檢測。YOLO將輸入影象劃分為S*S個網格,如果一個物體的中心落在某網格(cell)內,則相應網格負責檢測該物體。

    在訓練和測試時,每個網路預測B個bounding boxes,每個bounding box對應5個預測引數,即bounding box的中心點座標(x,y),寬高(w,h),和置信度評分。

    這裡的置信度評分(Pr(Object)*IOU(predtruth))綜合反映基於當前模型bounding box記憶體在目標的可能性Pr(Object)和bounding box預測目標位置的準確性IOU(predtruth)。如果bouding box內不存在物體,則Pr(Object)=0。如果存在物體,則根據預測的bounding box和真實的bounding box計算IOU,同時會預測存在物體的情況下該物體屬於某一類的後驗機率Pr(Class_iObject)。

    假定一共有C類物體,那麼每一個網格只預測一次C類物體的條件類機率Pr(Class_iObject), i=1,2,...,C;每一個網格預測B個bounding box的位置。即這B個bounding box共享一套條件類機率Pr(Class_iObject), i=1,2,...,C。基於計算得到的Pr(Class_iObject),在測試時可以計算某個bounding box類相關置信度:Pr(Class_iObject)*Pr(Object)*IOU(predtruth)=Pr(Class_i)*IOU(predtruth)。

    如果將輸入影象劃分為7*7網格(S=7),每個網格預測2個bounding box (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雖然可以降低將背景檢測為物體的機率,但同時導致召回率較低。

    路同學最近就在使用這一深度學習框架,親測好用!

  • 中秋節和大豐收的關聯?
  • 假如當初高通810不翻車,麒麟系列有可能像今天這樣擁有這麼大的市場嗎?