上周最后一課
你已經(jīng)學(xué)了對象檢測算法的大部分零件了,接下來,我們把所有的零件組合到一起,構(gòu)成YOLO檢測算法。
首先:構(gòu)建訓(xùn)練集
創(chuàng)建一個y向量3x3x2x8,要構(gòu)造訓(xùn)練集,你需要遍歷九個格子,然后構(gòu)成對應(yīng)的目標(biāo)向量y,當(dāng)然實(shí)際中,你可能使用的是19x19x5x8的向量集。

構(gòu)成訓(xùn)練集以后,你訓(xùn)練一個卷積網(wǎng)絡(luò),輸入圖片,可能是100x100x3,然后你的卷積神經(jīng)網(wǎng)絡(luò)最后輸出尺寸是3x3x16,接下來你的算法應(yīng)該做出預(yù)測:

最后你要跑一下非最大值抑制:
如果你使用兩個anchor box,那么對于9個格子中任何一個都會有兩個預(yù)測的邊界框,其中一個格子的概率pc非常低,但是9個格子中,每個都有兩個預(yù)測的邊界框,注意有些邊界框可以超出所在格子的高度和寬度。
接下來你拋棄概率低的預(yù)測。
最后如果你有三個對象檢測類別,行人,摩托,汽車,那么你要做的是對于每個類別,單獨(dú)運(yùn)行非最大值抑制,處理那個預(yù)測結(jié)果是哪個類別的邊界框,用非最大值抑制來處理行人類別,再用非最大值抑制處理車子類別,然后對摩托車類實(shí)行非最大值抑制,運(yùn)行三次來得到最終的預(yù)測結(jié)果。

所以算法的輸出最后能夠檢測出圖像中的所有的車子,所有的行人,這就是YOLO對象檢測算法。
這實(shí)際上是最有效的圖像檢測算法之一,包含了整個計(jì)算機(jī)視覺對象檢測領(lǐng)域文獻(xiàn)中很多精妙的思路。
可選課:RPN 網(wǎng)絡(luò)
如果閱讀對象檢測的文獻(xiàn),可能看到一組概念,所謂的候選區(qū)域,這在計(jì)算機(jī)視覺領(lǐng)域是非常有影響力的概念。
可選是因?yàn)橛玫牟欢?,但是這個RPN 網(wǎng)絡(luò)是非常有影響力的。
當(dāng)你使用滑動搜索框或者卷積網(wǎng)絡(luò)算法時,算法有一個缺點(diǎn)就是:
它在沒有任何對象的區(qū)域浪費(fèi)時間。
所以R-CNN算法被提出,意思是帶區(qū)域的卷積網(wǎng)絡(luò),或者說帶區(qū)域的CNN,這個算法嘗試選出一些區(qū)域,在這些區(qū)域上運(yùn)行卷積網(wǎng)絡(luò)分類器是沒有意義的。所以不再針對每個滑動窗口跑檢測算法,而是只選擇一些窗口,在這些少數(shù)窗口上運(yùn)行卷積網(wǎng)絡(luò)分類器。
選出候選區(qū)域的方法是:
運(yùn)行圖像分割算法,分割出結(jié)果后,為了找出可能存在對象的區(qū)域,在分割的色塊上跑分類器,所以這個細(xì)節(jié)就是所謂的分割算法。
你先找出所謂的2000個色塊,然后在這2000個色塊上放置邊界框,然后運(yùn)行分類器,這樣需要處理的位置可能要少得多,可以減少卷積網(wǎng)絡(luò)分類器的運(yùn)行時間,比在圖像的所有位置跑一遍分類器更快。

以上就是R-CNN和區(qū)域CNN的特色概念。
現(xiàn)在看來R-CNN算法的運(yùn)行速度還是很慢的,所以有一系列的研究工作去改進(jìn)這個算法。
基本的R-CNN算法是使用某種算法求出候選區(qū)域,然后對每個候選區(qū)跑一下分類器,每個區(qū)域會輸出一個標(biāo)簽,并輸出一個邊界框,這樣你就可以確定存在對象的區(qū)域得到一個精確的邊界框。
澄清一下:
R-CNN算法不會直接信任輸入的邊界框,它也會輸出一個邊界框,bx,by,bh和bw,這樣得到的邊界框比較精確,比單純使用圖像分割算法給出的色塊邊界要好,你可以得到相當(dāng)精確的邊界框。
R-CNN算法的缺點(diǎn)是:太慢了
Fast-CNN:用卷積實(shí)現(xiàn)滑動窗口
最初的算法是逐一對區(qū)域分類,快速CNN則是用滑動窗口的一個卷積實(shí)現(xiàn),這會顯著提升CNN的速度。
事實(shí)證明:快速CNN算法的一個問題是:得到候選區(qū)域的聚類步驟仍然十分緩慢。
另一個研究組提出了更快的CNN算法,使用的是卷積神經(jīng)網(wǎng)絡(luò),而不是傳統(tǒng)的分割算法來獲得候選區(qū)域色塊。

不過我認(rèn)為大多數(shù)更快的R-CNN算法的實(shí)現(xiàn)還是比YOLO算法慢很多。
候選區(qū)域的概念在計(jì)算機(jī)視覺領(lǐng)域影響力相當(dāng)大,所以需要了解,候選區(qū)域算法是一個有趣的想法,但是這個方法需要兩步,首先要得到候選區(qū)域,然后再分類,相比之下,能夠一步做完,類似于YOLO或者你只看一次的算法,在我看來,是長遠(yuǎn)而言更有希望的方向。