作者——Alyson Brown
你有沒有好奇過為什么刷臉就可以給手機解鎖?或者與朋友自拍時,系統(tǒng)自動給你適配濾鏡?你是否知道這些很酷的功能是通過一個奇妙的神經(jīng)網(wǎng)絡(luò)實現(xiàn)的,它不僅可以識別出照片中的人臉,還可以識別出一些具體特征(比如,耳朵,嘴巴等等)的位置。從某種意義上說,你的手機可以'看到'你,它甚至可以知道你的樣子!
幫助計算機'看到'的技術(shù)被稱為'computer vision'。近年來,由于計算能力的爆炸式增長,使得深度學(xué)習(xí)模型更好、更可行,計算機視覺應(yīng)用正變得越來越普遍。亞馬遜,谷歌,特斯拉,F(xiàn)acebook和微軟等許多公司都在大力投資這項技術(shù)及其應(yīng)用。
計算機視覺任務(wù)
我們專注于兩個主要的計算機視覺任務(wù) - 圖像分類和對象檢測。
1. 圖像分類專注于將圖像分組為預(yù)定義的類別。為了實現(xiàn)這一點,我們需要擁有我們感興趣類的多個圖像,并訓(xùn)練計算機將像素數(shù)轉(zhuǎn)換為符號。
2. 對象檢測利用圖像分類器來確定圖像中存在的內(nèi)容和位置。通過使用卷積神經(jīng)網(wǎng)絡(luò)(CNN)使這些任務(wù)變得更容易,這使得在一次圖像的傳遞中檢測多個類成為可能。
計算機視覺很酷!
考慮到未來許多有趣的數(shù)據(jù)科學(xué)應(yīng)用程序?qū)⑸婕疤幚韴D像,我們新興數(shù)據(jù)科學(xué)家團隊和我決定嘗試在Kaggle上舉辦的Google AI Open Image挑戰(zhàn)(https://www.kaggle.com/c/google-ai-open-images-object-detection-track)。我們認為這是一個絕佳的機會,讓我們來接觸神經(jīng)網(wǎng)絡(luò)和卷積,并可能會給我們的教授和同學(xué)留下深刻的印象。這一挑戰(zhàn)為我們提供了170萬個圖像,其中包含500個對象類的1200個邊界框注釋(它們相對于圖像的X和Y坐標)。你可以在這里找到數(shù)據(jù)(https://www.figure-eight.com/dataset/open-images-annotated-with-bounding-boxes/)。
我們強烈建議任何想要閱讀有關(guān)CNN的人閱讀吳恩達關(guān)于卷積神經(jīng)網(wǎng)絡(luò)的Coursera課程(https://www.coursera.org/learn/convolutional-neural-networks/home/welcome)。
讓我們實踐!
探索性數(shù)據(jù)分析——與所有數(shù)據(jù)分析一樣,我們開始探索我們擁有的圖像以及我們需要檢測的對象類型。
訓(xùn)練數(shù)據(jù)集中的類頻率
快速瀏覽一下這些訓(xùn)練圖像,會發(fā)現(xiàn)某些物體在出現(xiàn)的次數(shù)方面比其他物體更多。上圖顯示了前43個類的分布情況。很明顯,存在著巨大的差異。我們需要解決這些問題。為了節(jié)省時間和金錢(GPU成本很高),我們選擇了前面提到的43個對象類和帶有這些對象的300K圖像的子集。我們在訓(xùn)練數(shù)據(jù)中為每個對象類提供了大約400個圖像。
選擇目標檢測算法
我們考慮了各種對象檢測算法,包括VGG、Inception和YOLO,但最終選擇了YOLO算法,因為它的速度、計算能力和豐富的在線文章可以指導(dǎo)我們完成整個過程。面對計算和時間限制,我們做出了兩個關(guān)鍵決定:
1. 使用經(jīng)過訓(xùn)練識別某些物體的YOLO v2模型。
2. 利用遷移學(xué)習(xí)訓(xùn)練最后一個卷積層,以識別以前不可見的物體,如吉他、房子、男人/女人、鳥等。
YOLO的輸入
YOLO算法需要一些特定的輸入:
1. 輸入圖像大小——YOLO網(wǎng)絡(luò)設(shè)計用于處理特定的輸入圖像大小。我們發(fā)送了大小為608 * 608的圖像。
2. 類的數(shù)量——43。這是定義YOLO輸出的維度所必需的。
3. Anchor box——要使用的錨框的數(shù)量和尺寸。
4. Confidence和IoU thresholds——用于定義選擇哪些錨框以及如何在錨框之間進行選擇的閾值。
5. 帶有邊界框信息的圖像名稱——對于每個圖像,我們需要以特定格式為YOLO提供其中的內(nèi)容,如下所示
YOLO的示例輸入
以下是YOLO輸入的代碼段:
YOLO v2架構(gòu)
該體系架構(gòu)如下所示——它有23個卷積層,每個卷層都有自己的批量標準化、Leaky RELU激活和最大池化。
代表實際的YOLO v2架構(gòu)
這些層試圖從圖像中提取多個重要特征,以便可以檢測各種類。出于對象檢測的目的,YOLO算法將輸入圖像劃分為19 * 19網(wǎng)格,每個網(wǎng)格具有5個不同的錨框。然后,它嘗試檢測每個網(wǎng)格單元中的類,并將對象分配給每個網(wǎng)格單元的5個錨框之一。錨框的形狀不同,旨在為每個網(wǎng)格單元捕獲不同形狀的對象。
YOLO算法為每個定義的錨框輸出一個矩陣(如下所示)
鑒于我們必須訓(xùn)練43個類的算法,我們得到的輸出尺寸為:
這些矩陣為我們提供了觀察每個錨框的對象的概率,以及該對象的類的概率。要過濾掉沒有任何類或與其他框相同的對象的錨框,我們使用兩個閾值,IoU閾值來過濾掉捕獲相同對象的錨框和置信度閾值,以過濾掉不包含錨框的任何一個類。
下面是YOLO v2架構(gòu)最后幾層的說明:
遷移學(xué)習(xí)
遷移學(xué)習(xí)的概念是獲得一個神經(jīng)網(wǎng)絡(luò),該神經(jīng)網(wǎng)絡(luò)已經(jīng)經(jīng)過訓(xùn)練來對圖像進行分類并將其用于我們的特定目的。這節(jié)省了我們的計算時間,因為我們不需要訓(xùn)練大量的權(quán)重——例如,我們使用的YOLO v2模型有大約5000萬個權(quán)重——訓(xùn)練可能需要4-5天的時間。
為了成功實現(xiàn)遷移學(xué)習(xí),我們不得不對我們的模型進行一些更新:
· 輸入圖像大小——我們下載的模型使用大小為416 * 416的輸入圖像。由于我們訓(xùn)練的一些物體非常小,我們不想那么大地壓縮輸入圖像。出于這個原因,我們使用了大小為608 * 608的輸入圖像。
· 網(wǎng)格大小——我們更改了網(wǎng)格大小的尺寸,以便將圖像劃分為19 * 19網(wǎng)格單元而不是13 * 13,這是我們下載的模型的默認值。
· 輸出層——由于我們在不同數(shù)量的類43上進行訓(xùn)練,而不是在原始模型的類80上進行訓(xùn)練,因此輸出層被更改為輸出矩陣維度,如前所述。
我們重新初始化了YOLO最后一個卷積層的權(quán)重,以便在我們的數(shù)據(jù)集上訓(xùn)練它,最終幫助我們識別出獨特的類。以下是相同的代碼片段:
重新初始化YOLO的最后一個卷積層
成本函數(shù)
在任何對象檢測問題中,我們希望在圖像中具有高置信度的正確位置識別正確的對象。成本函數(shù)有三個主要組成部分(https://arxiv.org/pdf/1506.02640.pdf):
1. 分類損失:如果檢測到對象,則為類條件概率的平方誤差。因此,只有當網(wǎng)格單元中存在對象時,損失函數(shù)才會懲罰分類錯誤。
2. 定位損失:如果真值框負責(zé)檢測對象,則是預(yù)測邊界框位置和大小與地面實況框的平方誤差。為了懲罰邊界框坐標預(yù)測的損失,我們使用正則化參數(shù)(?coord)。此外,為了確保較大框中的小偏差小于較小框中的小偏差,算法使用邊界框?qū)挾群透叨鹊钠椒礁?/p>
3. 置信度損失:它是邊界框置信度得分的平方誤差。大多數(shù)錨盒不負責(zé)檢測物體,因此方程式分為兩部分,一部分用于檢測物體的錨盒,另一部分用于其它錨盒。將正則化項λnoobj(默認值:0.5)應(yīng)用于后一部分以權(quán)衡未檢測到對象的框。
請隨時參考原始的YOlO(https://arxiv.org/pdf/1506.02640.pdf),了解成本函數(shù)的詳細信息。
YOLO的優(yōu)點在于它使用易于使用優(yōu)化函數(shù)進行優(yōu)化的誤差,例如隨機梯度下降(SGD),帶動量的SGD或Adam等。下面的代碼片段顯示了我們用于優(yōu)化成本函數(shù)的參數(shù)。
YOLO訓(xùn)練算法(Adam optimizer)
輸出精度——平均精確度(mAP分數(shù)):
在對象檢測中評估模型有許多度量標準,對于我們的項目,我們決定使用mAP分數(shù),它是不同召回值在所有IoU閾值上最大精度的平均值。為了理解mAP,我們將快速回顧精度,召回和IoU(交叉結(jié)合)。
精確和召回
精確度衡量正確預(yù)測的百分比。召回是所有可能結(jié)果中真陽性的比例。這兩個值是反向相關(guān)的,也取決于你為模型設(shè)置的模型得分閾值(在我們的例子中,它是置信度得分)。數(shù)學(xué)定義如下:
交叉口聯(lián)合(IoU)
IoU測量兩個區(qū)域之間有多少重疊,也就是聯(lián)合區(qū)域上的重疊面積。這可以衡量你的預(yù)測(來自你的物體探測器)與地面實況(真實物體邊界)的對比情況。總而言之,mAP分數(shù)是所有IoU閾值的平均AP。
結(jié)果
結(jié)論
對象檢測不同于其他計算機視覺任務(wù)。你可以使用預(yù)先訓(xùn)練的模型并根據(jù)需要進行編輯以滿足你的需求。你將需要GCP或其他允許更高計算能力的平臺。
經(jīng)驗教訓(xùn)
最初,我們發(fā)現(xiàn)該模型無法預(yù)測許多類,因為其中很多類只有少量的訓(xùn)練圖像,這導(dǎo)致了數(shù)據(jù)集訓(xùn)練不平衡。因此,我們決定只使用最受歡迎的43個類,這不是一個完美的方法,但每個類至少有500個圖像。然而,我們預(yù)測的置信度仍然很低。為了解決這個問題,我們選擇了包含目標類的圖像。
對象檢測是一個非常具有挑戰(zhàn)性的主題,但不要害怕,嘗試盡可能多地從各種開源來學(xué)習(xí),如Coursera,YouTube教學(xué)視頻,GitHub和Medium。所有這些免費的智慧可以幫助你在這個神奇的領(lǐng)域取得成功!
聯(lián)系客服