一.前言
由於前一段時間以及實現了基於keras深度學習框架下yolov3的算法,本來想趁着余熱將自己的心得體會進行總結,但由於前幾天有點事就沒有完成計划,現在趁午休時間整理一下。
二.Keras框架的介紹
1.Keras是一個用Python編寫的高級API,它提供了一個簡單和模塊化的API來創建和訓練神經網絡,同時也隱藏了大部分復雜的細節。其能夠在TensorFlow、Theano或CNTK上運行。
2.keras的模型結構
常用模型有:序貫模型(Sequential)和函數式模型(Model),函數式模型應用更為廣泛,序貫模型是函數式模型的一種特殊情況。
a)序貫模型(Sequential):單輸入單輸出,一條路通到底,層與層之間只有相鄰關系,沒有跨層連接。這種模型編譯速度快,操作也比較簡單
b)函數式模型(Model):多輸入多輸出,層與層之間任意連接。這種模型編譯速度慢。
3. Keras搭建一個神經網絡流程
其中用到的優化函數,損失含函數,以及性能評估等請讀者自己補腦和查找相關資料。
三.Yolov3算法的簡介
1.yolo設計的理念
yolo是目前比較流行的目標檢測算法,速度快結構簡單。其他的目標檢測算法也有RCNN,faster-RCNN, SSD等。 yolo先將圖片分成S*S個塊。每個單元格會預測B個邊界框(bounding box)以及邊界框的置信度(confidence score)。所謂置信度其實包含兩個方面,一是這個框中目標存在的可能性大小,二是這個邊界框的位置准確度。前者我們把它記做Pr(obj),若框中 沒有目標物,則Pr(obj)=0,若含有目標物則Pr(obj)=1 。那么邊界框的位置的准確度怎么去判斷呢?我們使用了一種叫做IOU(交並比)的方法,意思就是說我預測的框與你真實的框相交的面積,和預測的框與真實框合並的面積的比例。我們可以記做 IOU(pred),那么置信度就可以定義為這兩項相乘。邊界框的大小和位置可以用四個值來表示,(x,y,w,h)注意,不要憑空想象是一個矩形對角兩個點的位置坐標,這里面的x,y是指預測出的邊界框的中心位置相對於這個格子的左上角位置的偏移量,而且這 個偏移量不是以像素為單位,而是以這個格子的大小為一個單位。
2. 算法在速度和精度上的提升可以查看如下圖:
3.yolov3算法的缺點
1).YOLO對相互靠的很近的物體,還有很小的群體 檢測效果不好,這是因為一個網格中只預測了兩個框,並且只屬於一類。
2).同一類物體出現的新的不常見的長寬比和其他情況時,泛化能力偏弱。
3).由於損失函數的問題,定位誤差是影響檢測效果的主要原因。尤其是大小物體的處理上還有待加強。
參考:
https://blog.csdn.net/zdy0_2004/article/details/74736656
https://blog.csdn.net/nanxiaoting/article/details/82497731
https://blog.csdn.net/Dongjiuqing/article/details/84763430