經典論文閱讀筆記——Feature篇(下)
7.《Robust Real-time Face Detection》(IJCV 2004)
這篇文章重點並不在特徵上而是Adaboost的應用,但基於它的名氣也放在這裡吧,在深度學習沒火起來之前應該算是最最常用的人臉檢測演算法了。
核心思路如下:
- 求取影象積分圖(快速計算);
- 採用Adaboost演算法選擇特徵:每一次迭代選擇一個最優Haar特徵(弱分類器),多次迭代的Haar特徵進行組合(強分類器);
- 通過預設的檢測率、誤識率等引數進行多次2步驟,將強分類器級聯;
- 滑窗方法檢測,多尺度通過對影象大小進行尺度變換得到。
值得注意的地方:
- Haar特徵非常適用於Adaboost這型別的組合演算法,因為一張圖的Haar特徵非常非常多
- 將多種特徵進行組合的演算法,如Boosting, Bootstrap這類都屬於框架演算法,裡面具體的特徵可以任意使用
- Adaboost演算法目的是獲得強分類器,而將強分類器進行級聯,可以在保證檢測率的基礎上降低誤識率(單個分類器很難做到如此精確)
- 積分圖思想很是常用,影象中需要重複多次計算的都能用積分圖加速(個人感覺和動態規劃裡的Memoization思想類似)
非常經典的一篇人臉檢測論文,但是感覺並不是非常好懂,尤其是中間很大篇幅第一次看感覺都是雲裡霧裡的,邏輯關係不大好弄清楚。不過網上解析的部落格什麼的很多,對理解很有幫助的。
8.《Histograms of oriented gradients for human detection》(CVPR 2005)
大名鼎鼎的HOG(為什麼都是大名鼎鼎。。),思想和SIFT特徵那一塊有相像之處,簡單易懂並且可以視覺化,最初用在行人檢測上。
核心思路如下:
- 對影象進行Gamma校正(可做可不做,論文裡也說效果提升不是非常明顯);
- 計算各個畫素梯度;
- 將影象劃分為cell,計算cell內的梯度加權直方圖;
- 將cell組合成block,把各cell內特徵相連並歸一化(block中的cell有重疊);
- 將block內特徵連線即為當前影象(滑窗)的HOG特徵。
值得注意的地方:
- 與SIFT相似,在計算梯度加權直方圖時,同樣要進行插值操作以增加準確性
- 除了矩形block外,原文還提出一種圓形block,感覺和GLOH有點像
- 在HOG特徵上使用機器學習工具非常易於理解,如SVM等,原文也給出了SVM權重視覺化圖
這篇論文並沒有寫太多的實現細節,而是對步驟的各個方面都做了充分的實驗,以圖或表的形式展現出來,非常有說服力,確實是一篇經典論文。如果想看更多的細節可以看看原作者的博士論文及PPT啥的,網上也有很多解析,比較易於理解。
9.《Retrieval and classification of shape-based objects using Fourier, generic Fourier, and wavelet-Fourier descriptors technique: A comparative study》(Elsevier 2007)
說實話這根本不算是一篇經典的論文,但因為是通過這篇文章理解的傅立葉描述子相關的特徵,也把它放上來吧。傅立葉描述子直接通過邊緣進行特徵描述,非常簡單。核心思路如下:
- 提取影象邊緣;
- 通過一個一維函式對邊緣進行描述(可以僅僅將邊緣座標視為複數進行描述,也可以利用邊緣各點到影象中心距離進行描述);
- 對一維描述函式進行傅立葉變化,即得到傅立葉描述子。
值得注意的地方:
- 傅立葉描述子特徵思路非常簡單,先對特徵進行空域上的描述,然後變換至頻域
- 文章說中心距離的描述方法要優於直接進行復數描述,這點仍待商榷
- 以上說的是基於邊緣的傅立葉描述子,也有基於區域的(通用傅立葉描述子,GFD)
- 描述子的歸一化應該注意一下
傅立葉描述子一聽就是基於變換域的方法,在此基礎上還發展出了小波描述子(WT)等等,也算是簡單常用的邊緣形狀描述方法。
10.《SURF: Speeded Up Robust Features》(Elsevier 2008)
SURF特徵,類SIFT特徵中最出名的一種,思路同樣是先找興趣點然後對其賦予向量,實驗來看速度的確要比SIFT快,但是感覺效果還是不如SIFT好。
核心思路如下:
- 利用Hessian矩陣行列式作為興趣點檢測方法,採用近似計算,並利用積分圖加速;
- 與SIFT不同,SURF特徵保持影象尺寸不變,改變高斯模糊模板大小達到多尺度目的;
- 在利用非極大值抑制初步確定特徵點後,也採用擬合尺度空間函式與類Harris角點檢測方法精確定位特徵點;
- 通過統計特徵點領域(60°扇形區域)內的Haar小波特徵加權向量,取最長向量方向為確定特徵點主方向;
- 將座標軸旋轉至主方向,類似於SIFT,將特徵點矩形領域分塊,並統計各個塊內的4種小波特徵分量,構成該點的SURF特徵;
- 匹配過程與SIFT類似。
值得注意的地方:
- Hessian矩陣的跡就是Laplace運算元,而行列式值也能用於檢測特徵點
- 近似計算Hessian矩陣行列式並採用積分圖同樣是為了加速,於SIFT採用DoG近似LoG的動機一樣
- 尺度空間的生成與SIFT整好反過來,仔細想想其實非常有趣,比如說在SURF裡哪一個可以看做是Octave
- 多少感覺SURF確定主方向的方法有些詭異,還是SIFT的更加清楚,實驗結果也顯示更穩定一些
類SIFT特徵中比較出名的有PCA-SIFT, SURF, GLOH等,它們的思想和各個步驟其實都非常一致,只不過採用的方法不盡相同。不過就實驗結果來看,這幾種特徵的效果確實都沒有原來的SIFT好。
11.《A fully affine invariant image comparison method》(IEEE 2009)
ASIFT,用的也不是非常廣泛,就把它當作這個系列的最後一個特徵吧。SIFT原文中說並不是非常需要仿射不變性,這篇文章就說仿射不變性很重要,還是有的好。。
核心思路如下:
- 先對仿射變換進行了建模,提出了模型的各個引數;
- 針對引數的不同取值,採取對原圖取樣的方法對其進行模擬,得到多幅影象;
- 對多幅影象進行SIFT特徵的提取,可以得到特徵的仿射不變性。
值得注意的地方:
- 思路很簡單,不是沒有仿射不變性麼,那我就把仿射模擬出來,再在其基礎上提取特徵,就具有不變性了
- 文章對仿射模型的說明比較清晰,對此不熟悉的可以看一下
- 顯然對多幅影象進行SIFT特徵提取需要花費更多的時間,文章中說ASIFT的複雜度基本是SIFT的兩倍,因為沒有做過實驗,暫不清楚究竟到什麼程度
論文寫得非常清晰,尤其介紹模型那一塊我感覺很好,思路也很簡單。但是總感覺實際中並不需要完全的仿射不變性,而且對很多幅影象都提取SIFT特徵的時間一定不會太短。。
特徵部分總結
從論文發表的時間上也可以看出,近些年很少有專門研究特徵的,研究的重點已經遠遠不在特徵本身上了,有也是對之前特徵的一些改進和提升。並且隨著特徵的發展,感覺越來越有大一統的趨勢,SIFT、HOG這型別特徵還是最最常用的,其核心思想也比較接近,都是方向梯度的直方圖統計。也許隨著神經科學的發展,會對特徵的構造產生更多指導性的方向吧。但就目前來看,還構造啥特徵啊,讓計算機自己學去吧,學到啥就是啥,好用就行了~
最後連結一個感覺寫的很不錯的短文,對20年間的特徵描述子做個簡單回顧:《從特徵描述符到深度學習》,http://cs2.swfc.edu.cn/~zyl/?p=2184&utm_source=tuicool&utm_medium=referral
相關推薦
經典論文閱讀筆記——Feature篇(下)
7.《Robust Real-time Face Detection》(IJCV 2004) 這篇文章重點並不在特徵上而是Adaboost的應用,但基於它的名氣也放在這裡吧,在深度學習沒火起來之前應該算是最最常用的人臉檢測演算法了。 核心思路如下: 求取影象積分圖(快速計算
經典論文閱讀筆記——Feature篇(上)
心血來潮在CSDN開通了部落格,那就時不時寫點東西吧。。 先寫點Feature Extraction方面經典論文的閱讀筆記,按論文發表的時間順序 至於具體的原理就不過多記錄了,寫起來真的很麻煩,很多網上一搜就有,主要寫點心得體會吧 1.《Robust image corn
經典論文重讀---目標檢測篇(二):Fast RCNN
核心思想 RCNN的缺點 R-CNN is slow because it performs a ConvNet forward pass for each object proposal, without sharing computation. SPPnet的缺
經典論文重讀---目標檢測篇(一):RCNN
核心思想 Since we combine region proposals with CNNs, we call our method R-CNN: Regions with CNN features. 即將生成proposal的方法與cnn提取特徵進行結合
Django中級篇(下)
dump signal nec 檢測 == csr providing https messages 中間件 django 中的中間件(middleware),在django中,中間件其實就是一個類,在請求到來和結束後,django會根據自己的規則在合適的時機執行中間件中相
shell第四篇(下)
中文 key 文本 什麽 例子 理念 通用 close 其它 摘自王垠的:Unix的缺陷 我想通過這篇文章解釋一下我對 Unix 哲學本質的理解。我雖然指出 Unix 的一個設計問題,但目的並不是打擊人們對 Unix 的興趣。雖然 Unix 在基礎概念上有一個挺嚴重的問
nsq源碼閱讀筆記之nsqd(一)——nsqd的配置解析和初始化
con views pos 直接 rgba 函數調用 程序 spa 重命名 配置解析nsqd的主函數位於apps/nsqd.go中的main函數首先main函數調用nsqFlagset和Parse進行命令行參數集初始化, 然後判斷version參數是否存在,若存在,則打印版
nsq源碼閱讀筆記之nsqd(三)——diskQueue
hit emp files tro interact 一次 導致 store text diskQueue是backendQueue接口的一個實現。backendQueue的作用是在實現在內存go channel緩沖區滿的情況下對消息的處理的對象。 除了diskQueue外
Exchange 2016部署實施案例篇-03.Exchange部署篇(下)
Exchange 2016部署 Exchange 2016先決條件 Exchange全新部署OWA無法打開 Exchange證書 無人值守 昨天我們一起準備完成了Exchange Server 2016的先決條件,今天我們一起來看下如何部署Exchange Server 2016.
Git學習0基礎篇(下)
擴展 創建 不同 sheet id_rsa con 簡單 托管 讀取數據 server上的 Git - 協議 Git能夠使用四種基本的協議傳輸資料:本地協議(Loc
CLR VIA C# 閱讀筆記和感悟(三)
前言:如今.NetCore已經進入了2.1版本,但這本書的學習還是很重要,我們繼續學習和總結,以便於在.NetCore新技術的學習上能有個對比,幫助我們學習新知識。 執行緒池:執行緒的建立和銷燬都是要消耗資源的,所以微軟為了優化執行緒的使用,提出了執行緒池,執行緒池中的執行緒是可重用的,線上程初始
CLR VIA C# 閱讀筆記和感悟(二)
GC垃圾回收:垃圾回收機制其實是對記憶體的碎片化管理,首先會暫停所有執行緒的執行,防止碎片化管理時,物件的狀態被修改,然後遍歷託管堆中的所有物件,刪除沒有變數引用的物件,並且移動堆中的所有物件的記憶體地址,刪除物件之間的空隙,變成一塊連續的記憶體,提高物件的引用效率,節省更多的記憶體空間,但這會導致
CLR VIA C# 的閱讀筆記和感悟(一)
寫在前面的話: 工作一年了,從最初的小白,通過慢慢地做專案,百度查資料,慢慢地也適應了程式設計師的工作,從最初做專案的焦頭爛額,到現在已經可以較為輕鬆得從事開發工作,當然還是停留在簡單開發的層次,就是根
機器學習第一篇(下)
實戰演練 ——MovieLens 第一步:獲取資料集 第二步:解壓檔案後,將u.item以及u.data新增到專案中,加入方法loadMovieLens def loadMovieLens(path='data/movielens'): movies={} for
運維經典面試題之網路篇(一)
1、寫出12.23.34.0/29的掩碼 11111111.11111111.11111111.11111000 255.255.255.248 2、簡述衝突域與廣播域的區別 衝突域:基於osi的第一層物理層。 一個站點向另一個站
資料結構與演算法之連結串列篇(下)
Q:如何輕鬆寫出正確的連結串列程式碼? 總結起來,就是投入時間+技巧; 一、投入時間: 只要願意投入時間,大多數人都是可以學會的,比如說,如果你真能花上一個週末或者一整天時間,就去寫連結
Android O Settings原始碼流程分析(搜尋欄篇(下))
Android O Settings 靜態介面篇 介面渲染篇 資料載入篇之一級選單 資料載入篇之二級選單 資料載入篇之獲取及修改預設設定屬性值 搜尋欄篇 Settings 搜尋欄 上篇——介面 中篇——實現原理 下篇—
分散式Java應用之集合框架篇(下)
前言: 在分散式Java應用之集合框架篇(上)一文中,從整體上對Java分散式應用中的集合框架進行了介紹,以及對於其中的List家族給出了原始碼分析;本文將繼續介紹集合框架中的Set家族和Map家族,其實Set家族和Map家族之間是有著很深的淵源,在本文的後續內
《Redis設計與實現》閱讀筆記11-Sentinel(哨兵)
15 哨兵 哨兵系統由一個或多個哨兵例項組成,可以監視任意多個主伺服器及其對應的所有從伺服器,並在監視的主伺服器下線的時候從其對應的從伺服器中選出一個作為新的主伺服器,然後讓剩餘的從伺服器去複製新的主伺服器,並在舊的主伺服器上線以後讓其成為新的主伺服器的從伺服器
微服務之SpringCloud架構第六篇(下)——配置中心(Apollo)
Apollo客戶端依賴於AppId,Apollo Meta Server等環境資訊來工作,所以請確保下面的配置正確: 1、 AppId AppId是應用的身份資訊,是配置中心的一個專案id,一般和應用名稱保持一致,是從服務端獲取配置的一個重要資訊。 有以下3種方式設定,