近幾年的物體偵測 (Object Recognition)由於卷積神經網絡(CNN)的關係,準確度與運算速度也大幅度的提升,有一些論文很值得去讀一讀: R-CNN, Fast R-CNN, Faster R-CNN, YOLO, SSD。
這篇文章主要是說說明YOLO演算法一些重要概念的筆記。
雖然這些結果令人印象深刻,但圖像分類比真實的人類視覺理解的複雜性和多樣性要簡單得多。
在分類(image clarification)中,通常是以單個物體作為焦點的圖像,任務是說出該圖像是什麼
但是當我們看到周圍的世界時,我們執行的任務要複雜得多
我們看到多個重疊的物體,不同的背景,複雜的景象,我們不僅需要分類這些不同的對象,而且還要確定了彼此的邊界,差異和關係!
CNN可以幫助我們完成這麼複雜的任務嗎?是的!
R-CNN使用稱為選擇性搜索(Selective Search)的過程創建邊界框(bounding boxes)或區域提議(regin proposals)
選擇性搜索(Selective Search)通過不同大小的窗口來查看圖像,並且對於每個大小嘗試通過紋理,顏色或強度將相鄰像素組合在一起以識別對象。
它進行的程序如下:
YOLO將圖像分成13×13的網格:
預測的邊界框可能看起來像下面這樣(信心得分越高,框被繪製得越胖):
該神經網絡僅使用標準圖層類型:3×3內核卷積和2×2內核最大共享。沒有花俏的東西。 YOLOv2中沒有使用全連接層(fully-connected layer)。
最後一個卷積層有一個1×1內核,用於將數據減少到13×13×125的形狀。這13×13應該看起來很熟悉:那就是圖像分成的網格的大小。
所以我們最終為每個網格單元提供了125個通道。這125個數字包含邊界框和類別預測的數據。為什麼125? 那麼,每個網格單元預測5個邊界框,邊界框由25個數據元素描述:
使用YOLO很簡單:給它一個輸入圖像(調整大小為416×416像素),一次通過卷積網絡,另一端作為一個13×13×125的張量來描述邊界框網格單元格。所有你需要做的是計算邊界框的最終分數,並丟棄那些得分低於30%的分數的圖框。
from IPython.display import HTML
# Youtube
HTML('<iframe width="560" height="315" src="https://www.youtube.com/embed/QCdmmWh8I8o?rel=0&controls=0&showinfo=0" frameborder="0" allowfullscreen></iframe>')
在這篇文章中有一些個人學習到的一些有趣的重點: