吳恩達深度學習筆記(91)-帶你瞭解計算機視覺現狀

計算機視覺現狀(The state of computer vision)

深度學習已經成功地應用於計算機視覺、自然語言處理、語音識別、在線廣告、物流還有其他許多問題。

在計算機視覺的現狀下,深度學習應用於計算機視覺應用有一些獨特之處。

在這個筆記中,我將和你們分享一些我對深度學習在計算機視覺方面應用的認識,希望能幫助你們更好地理解計算機視覺作品(此處指計算機視覺或者數據競賽中的模型)以及其中的想法,以及如何自己構建這些計算機視覺系統。

吳恩達深度學習筆記(91)-帶你瞭解計算機視覺現狀

你可以認為大部分機器學習問題是介於少量數據和大量數據範圍之間的

舉個例子,我認為今天我們有相當數量的語音識別數據,至少相對於這個問題的複雜性而言。雖然現在圖像識別或圖像分類方面有相當大的數據集,因為圖像識別是一個複雜的問題,通過分析像素並識別出它是什麼,感覺即使在線數據集非常大,如超過一百萬張圖片,我們仍然希望我們能有更多的數據。還有一些問題,比如物體檢測,我們擁有的數據更少。提醒一下,圖像識別其實是如何看圖片的問題,並且告訴你這張圖是不是貓,而對象檢測則是看一幅圖,你畫一個框,告訴你圖片裡的物體,比如汽車等等。因為獲取邊框的成本比標記對象的成本更高,所以我們進行對象檢測的數據往往比圖像識別數據要少,對象檢測是我們後續要討論的內容。

吳恩達深度學習筆記(91)-帶你瞭解計算機視覺現狀

所以,觀察一下機器學習數據範圍圖譜,你會發現當你有很多數據時,人們傾向於使用更簡單的算法和更少的手工工程,因為我們不需要為這個問題精心設計特徵。當你有大量的數據時,只要有一個大型的神經網絡,甚至一個更簡單的架構,可以是一個神經網絡,就可以去學習它想學習的東西。

相反當你沒有那麼多的數據時,那時你會看到人們從事更多的是手工工程,低調點說就是你有很多小技巧可用(在機器學習或者深度學習中,一般更崇尚更少的人工處理,而手工工程更多依賴人工處理,注意領會Andrew NG的意思)。但我認為當你沒有太多數據時,手工工程實際上是獲得良好表現的最佳方式。

吳恩達深度學習筆記(91)-帶你瞭解計算機視覺現狀

所以當我看機器學習應用時,我們認為通常我們的學習算法有兩種知識來源,一個來源是被標記的數據,就像(x,y)應用在監督學習第二個知識來源是手工工程,有很多方法去建立一個手工工程系統,它可以是源於精心設計的特徵,手工精心設計的網絡體系結構或者是系統的其他組件。所以當你沒有太多標籤數據時,你只需要更多地考慮手工工程。

所以我認為計算機視覺是在試圖學習一個非常複雜的功能,我們經常感覺我們沒有足夠的數據,即使獲得了更多數據,我們還是經常覺得還是沒有足夠的數據來滿足需求。這就是為什麼計算機視覺,從過去甚至到現在都更多地依賴於手工工程。我認為這也是計算機視覺領域發展相當複雜網絡架構地原因,因為在缺乏更多數據的情況下,獲得良好表現的方式還是花更多時間進行架構設計,或者說在網絡架構設計上浪費(貶義褒用,即需要花費更多時間的意思)更多時間。

吳恩達深度學習筆記(91)-帶你瞭解計算機視覺現狀

如果你認為我是在貶低手工工程,那並不是我的意思,當你沒有足夠的數據時,手工工程是一項非常困難,非常需要技巧的任務,它需要很好的洞察力,那些對手工工程有深刻見解的人將會得到更好的表現。

當你沒有足夠的數據時,手工工程對一個項目來說貢獻就很大。當你有很多數據的時候我就不會花時間去做手工工程,我會花時間去建立學習系統。但我認為從歷史而言,計算機視覺領域還只是使用了非常小的數據集,因此從歷史上來看計算機視覺還是依賴於大量的手工工程

甚至在過去的幾年裡,計算機視覺任務的數據量急劇增加,我認為這導致了手工工程量大幅減少,但是在計算機視覺上仍然有很多的網絡架構使用手工工程,這就是為什麼你會在計算機視覺中看到非常複雜的超參數選擇,比你在其他領域中要複雜的多。

實際上,因為你通常有比圖像識別數據集更小的對象檢測數據集,當我們談論對象檢測時,其實這是後面的任務,你會看到算法變得更加複雜,而且有更多特殊的組件。

幸運的是,當你有少量的數據時,有一件事對你很有幫助,那就是遷移學習

我想說的是,在之前的講解中,Tigger、Misty或者二者都不是的檢測問題中,我們有這麼少的數據,遷移學習會有很大幫助。這是另一套技術,當你有相對較少的數據時就可以用很多相似的數據。

如果你看一下計算機視覺方面的作品,看看那裡的創意,你會發現人們真的是躊躇滿志,他們在基準測試中和競賽中表現出色。對計算機視覺研究者來說,如果你在基準上做得很好了,那就更容易發表論文了,所以有許多人致力於這些基準上,把它做得很好。積極的一面是,它有助於整個社區找出最有效得算法。但是你在論文上也看到,人們所做的事情讓你在數據基準上表現出色,但你不會真正部署在一個實際得應用程序用在生產或一個系統上。

(注:Benchmark 基準測試,Benchmark是一個評價方式,在整個計算機領域有著長期的應用。維基百科上解釋:“As computer architecture advanced, it became more difficult to compare the performance of various computer systems simply by looking at their specifications.Therefore, tests were developed that allowed comparison of different architectures.”Benchmark在計算機領域應用最成功的就是性能測試,主要測試負載的執行時間、傳輸速度、吞吐量、資源佔用率等。)

下面是一些有助於在基準測試中表現出色的小技巧,這些都是我自己從來沒使用過的東西,如果我把一個系統投入生產,那就是為客戶服務。

吳恩達深度學習筆記(91)-帶你瞭解計算機視覺現狀

其中一個是集成,這就意味著在你想好了你想要的神經網絡之後,可以獨立訓練幾個神經網絡,並平均它們的輸出。比如說隨機初始化三個、五個或者七個神經網絡,然後訓練所有這些網絡,然後平均它們的輸出。

另外對他們的輸出^y進行平均計算是很重要的,不要平均他們的權重,這是行不通的。看看你的7個神經網絡,它們有7個不同的預測,然後平均他們,這可能會讓你在基準上提高1%,2%或者更好。這會讓你做得更好,也許有時會達到1%或2%,這真的能幫助你贏得比賽。

但因為集成意味著要對每張圖片進行測試,你可能需要在從3到15個不同的網絡中運行一個圖像,這是很典型的,因為這3到15個網絡可能會讓你的運行時間變慢,甚至更多時間,所以技巧之一的集成是人們在基準測試中表現出色和贏得比賽的利器,但我認為這幾乎不用於生產服務於客戶的,我想除非你有一個巨大的計算預算而且不介意在每個用戶圖像數據上花費大量的計算。

你在論文中可以看到在測試時,對進準測試有幫助的另一個技巧就是Multi-crop at test time,我的意思是你已經看到了如何進行數據擴充,Multi-crop是一種將數據擴充應用到你的測試圖像中的一種形式。

吳恩達深度學習筆記(91)-帶你瞭解計算機視覺現狀

舉個例子,讓我們看看貓的圖片,然後把它複製四遍,包括它的兩個鏡像版本。有一種叫作10-crop的技術(crop理解為裁剪的意思),它基本上說,假設你取這個中心區域,裁剪,然後通過你的分類器去運行它,然後取左上角區域,運行你的分類器,右上角用綠色表示,左下方用黃色表示,右下方用橙色表示,通過你的分類器來運行它,然後對鏡像圖像做同樣的事情對吧?所以取中心的crop,然後取四個角落的crop。

吳恩達深度學習筆記(91)-帶你瞭解計算機視覺現狀

編號1和編號3就是中心crop,編號2和編號4就是四個角落的crop。

如果把這些加起來,就會有10種不同的圖像的crop,因此命名為10-crop。

所以你要做的就是,通過你的分類器來運行這十張圖片,然後對結果進行平均。如果你有足夠的計算預算,你可以這麼做,也許他們需要10個crops,你可以使用更多,這可能會讓你在生產系統中獲得更好的性能。如果是生產的話,我的意思還是實際部署用戶的系統。但這是另一種技術,它在基準測試上的應用,要比實際生產系統中好得多。

吳恩達深度學習筆記(91)-帶你瞭解計算機視覺現狀

集成的一個大問題是你需要保持所有這些不同的神經網絡,這就佔用了更多的計算機內存。對於multi-crop,我想你只保留一個網絡,所以它不會佔用太多的內存,但它仍然會讓你的運行時間變慢。

這些是你看到的小技巧,研究論文也可以參考這些,但我個人並不傾向於在構建生產系統時使用這些方法,儘管它們在基準測試和競賽上做得很好。

由於計算機視覺問題建立在小數據集之上,其他人已經完成了大量的網絡架構的手工工程。一個神經網絡在某個計算機視覺問題上很有效,但令人驚訝的是它通常也會解決其他計算機視覺問題。

所以,要想建立一個實用的系統,你最好先從其他人的神經網絡架構入手。如果可能的話,你可以使用開源的一些應用,因為開放的源碼實現可能已經找到了所有繁瑣的細節,比如學習率衰減方式或者超參數。

最後,其他人可能已經在幾路GPU上花了幾個星期的時間來訓練一個模型,訓練超過一百萬張圖片,所以通過使用其他人的預先訓練得模型,然後在數據集上進行微調,你可以在應用程序上運行得更快。當然如果你有電腦資源並且有意願,我不會阻止你從頭開始訓練你自己的網絡。事實上,如果你想發明你自己的計算機視覺算法,這可能是你必須要做的。

相關推薦

推薦中...