這一周我們學(xué)習(xí)的主要內(nèi)容是對象檢測,它是計(jì)算機(jī)視覺領(lǐng)域中一個(gè)新興的應(yīng)用方向,相比前兩年盒使,它的性能越來越好。在構(gòu)建對象檢測之前,我們先了解一下對象定位凡泣,首先我們看看它的定義枉疼。
圖片分類任務(wù)我們已經(jīng)熟悉了,就是算法遍歷圖片鞋拟,判斷其中的對象是不是汽車骂维,這就是圖片分類。
這節(jié)課我們要學(xué)習(xí)構(gòu)建神經(jīng)網(wǎng)絡(luò)的另一個(gè)問題贺纲,即定位分類問題航闺。這意味著,我們不僅要用算法判斷圖片中是不是一輛汽車猴誊,還要在圖片中標(biāo)記出它的位置潦刃,用邊框或紅色方框把汽車圈起來,這就是定位分類問題懈叹。
其中“定位”的意思是判斷汽車在圖片中的具體位置乖杠。
這周后面幾天,我們再講講當(dāng)圖片中有多個(gè)對象時(shí)澄成,應(yīng)該如何檢測它們胧洒,并確定出位置。比如墨状,你正在做一個(gè)自動駕駛程序卫漫,程序不但要檢測其它車輛,還要檢測其它對象肾砂,如行人列赎、摩托車等等,稍后我們再詳細(xì)講镐确。
本周我們要研究的分類定位問題包吝,通常只有一個(gè)較大的對象位于圖片中間位置,我們要對它進(jìn)行識別和定位源葫。而在對象檢測問題中诗越,圖片可以含有多個(gè)對象,甚至單張圖片中會有多個(gè)不同分類的對象臼氨。因此,圖片分類的思路可以幫助學(xué)習(xí)分類定位芭届,而對象定位的思路又有助于學(xué)習(xí)對象檢測储矩,我們先從分類和定位開始講起感耙。
圖片分類問題你已經(jīng)并不陌生了,例如持隧,輸入一張圖片到多層卷積神經(jīng)網(wǎng)絡(luò)即硼。這就是卷積神經(jīng)網(wǎng)絡(luò),它會輸出一個(gè)特征向量屡拨,并反饋給softmax單元來預(yù)測圖片類型只酥。
如果你正在構(gòu)建汽車自動駕駛系統(tǒng),那么對象可能包括以下幾類:行人呀狼、汽車裂允、摩托車和背景,這意味著圖片中不含有前三種對象哥艇,也就是說圖片中沒有行人绝编、汽車和摩托車,輸出結(jié)果會是背景對象貌踏,這四個(gè)分類就是softmax函數(shù)可能輸出的結(jié)果十饥。
這就是標(biāo)準(zhǔn)的分類過程,如果你還想定位圖片中汽車的位置祖乳,該怎么做呢逗堵?我們可以讓神經(jīng)網(wǎng)絡(luò)多輸出幾個(gè)單元,輸出一個(gè)邊界框眷昆。具體說就是讓神經(jīng)網(wǎng)絡(luò)再多輸出4個(gè)數(shù)字蜒秤,標(biāo)記為b_x,b_y,b_h和b_w,這四個(gè)數(shù)字是被檢測對象的邊界框的參數(shù)化表示隙赁。
我們先來約定本周課程將使用的符號表示垦藏,圖片左上角的坐標(biāo)為(0,0),右下角標(biāo)記為(1,1)伞访。
要確定邊界框的具體位置掂骏,需要指定紅色方框的中心點(diǎn),這個(gè)點(diǎn)表示為(b_x,b_y)厚掷,邊界框的高度為b_h弟灼,寬度為b_w。因此訓(xùn)練集不僅包含神經(jīng)網(wǎng)絡(luò)要預(yù)測的對象分類標(biāo)簽冒黑,還要包含表示邊界框的這四個(gè)數(shù)字田绑,接著采用監(jiān)督學(xué)習(xí)算法,輸出一個(gè)分類標(biāo)簽抡爹,還有四個(gè)參數(shù)值掩驱,從而給出檢測對象的邊框位置。
此例中,b_x的理想值是0.5欧穴,因?yàn)樗硎酒囄挥趫D片水平方向的中間位置民逼;b_y大約是0.7,表示汽車位于距離圖片底部3/10的位置涮帘;b_h約為0.3拼苍,因?yàn)榧t色方框的高度是圖片高度的0.3倍;b_w約為0.4调缨,紅色方框的寬度是圖片寬度的0.4倍疮鲫。
下面我再具體講講 如何為監(jiān)督學(xué)習(xí)任務(wù)定義目標(biāo)標(biāo)簽 y?
請注意弦叶,這有四個(gè)分類俊犯,神經(jīng)網(wǎng)絡(luò)輸出的是這四個(gè)數(shù)字和一個(gè)分類標(biāo)簽,或分類標(biāo)簽出現(xiàn)的概率湾蔓。目標(biāo)標(biāo)簽y的定義如下:
它是一個(gè)向量瘫析,第一個(gè)組件p_c表示是否含有對象,如果對象屬于前三類(行人默责、汽車贬循、摩托車),則p_c=1桃序,如果是背景杖虾,則圖片中沒有要檢測的對象,則p_c=0媒熊。
我們可以這樣理解p_c奇适,它表示被檢測對象屬于某一分類的概率,背景分類除外芦鳍。
如果檢測到對象嚷往,就輸出被檢測對象的邊界框參數(shù)b_x、b_y柠衅、b_h和b_w皮仁。最后,如果存在某個(gè)對象菲宴,那么p_c=1贷祈,同時(shí)輸出c_1、c_2和c_3喝峦,表示該對象屬于1-3類中的哪一類势誊,是行人,汽車還是摩托車谣蠢。鑒于我們所要處理的問題粟耻,我們假設(shè)圖片中只含有一個(gè)對象查近,所以針對這個(gè)分類定位問題,圖片最多只會出現(xiàn)其中一個(gè)對象挤忙。
我們再看幾個(gè)樣本嗦嗡,假如這是一張訓(xùn)練集圖片,標(biāo)記為x饭玲,即上圖的汽車圖片。而在y當(dāng)中叁执,第一個(gè)元素p_c=1茄厘,因?yàn)閳D中有一輛車,b_x谈宛、b_y次哈、b_h和b_w會指明邊界框的位置,所以標(biāo)簽訓(xùn)練集需要標(biāo)簽的邊界框吆录。圖片中是一輛車窑滞,所以結(jié)果屬于分類2,因?yàn)槎ㄎ荒繕?biāo)不是行人或摩托車恢筝,而是汽車哀卫,所以c_1=0,c_2=1撬槽,c_3=0此改,c_1、c_2和c_3中最多只有一個(gè)等于1侄柔。
這是圖片中只有一個(gè)檢測對象的情況共啃,如果圖片中沒有檢測對象呢?如果訓(xùn)練樣本是這樣一張圖片呢暂题?
這種情況下移剪,p_c=0,y的其它參數(shù)將變得毫無意義薪者,這里我全部寫成問號纵苛,表示“毫無意義”的參數(shù),因?yàn)閳D片中不存在檢測對象啸胧,所以不用考慮網(wǎng)絡(luò)輸出中邊界框的大小赶站,也不用考慮圖片中的對象是屬于c_1、c_2和c_3中的哪一類纺念。
針對給定的被標(biāo)記的訓(xùn)練樣本贝椿,不論圖片中是否含有定位對象,構(gòu)建輸入圖片x和分類標(biāo)簽y的具體過程都是如此陷谱。這些數(shù)據(jù)最終定義了訓(xùn)練集烙博。
最后瑟蜈,我們介紹一下神經(jīng)網(wǎng)絡(luò)的損失函數(shù),其參數(shù)為類別y和網(wǎng)絡(luò)輸出^y渣窜,如果采用平方誤差策略铺根,則L(^y,y)=(^(y_1 )-y_1 )^2+(^(y_2 )-y_2 )^2+?(^(y_8 )-y_8 )^2,
損失值等于每個(gè)元素相應(yīng)差值的平方和乔宿。
如果圖片中存在定位對象位迂,那么y_1=1,所以y_1=p_c详瑞,同樣地掂林,如果圖片中存在定位對象,p_c=1坝橡,損失值就是不同元素的平方和泻帮。
另一種情況是,y_1=0计寇,也就是p_c=0锣杂,損失值是((y^_1 )-y_1 )^2,因?yàn)閷τ谶@種情況番宁,我們不用考慮其它元素元莫,只需要關(guān)注神經(jīng)網(wǎng)絡(luò)輸出p_c的準(zhǔn)確度。
回顧一下蝶押,
當(dāng)y_1=1時(shí)柒竞,也就是這種情況(編號1),平方誤差策略可以減少這8個(gè)元素預(yù)測值和實(shí)際輸出結(jié)果之間差值的平方播聪。
如果y_1=0朽基,y 矩陣中的后7個(gè)元素都不用考慮(編號2),只需要考慮神經(jīng)網(wǎng)絡(luò)評估y_1(即p_c)的準(zhǔn)確度离陶。
為了讓大家了解對象定位的細(xì)節(jié)稼虎,這里我用平方誤差簡化了描述過程。
實(shí)際應(yīng)用中招刨,你可以不對c_1霎俩、c_2、c_3和softmax激活函數(shù)應(yīng)用對數(shù)損失函數(shù)沉眶,并輸出其中一個(gè)元素值打却,通常做法是對邊界框坐標(biāo)應(yīng)用平方差或類似方法,對p_c應(yīng)用邏輯回歸函數(shù)谎倔,甚至采用平方預(yù)測誤差也是可以的柳击。
以上就是利用神經(jīng)網(wǎng)絡(luò)解決對象分類和定位問題的詳細(xì)過程,結(jié)果證明片习,利用神經(jīng)網(wǎng)絡(luò)輸出批量實(shí)數(shù)來識別圖片中的對象是個(gè)非常有用的算法捌肴。
下節(jié)課蹬叭,我想和大家分享另一種思路,就是把神經(jīng)網(wǎng)絡(luò)輸出的實(shí)數(shù)集作為一個(gè)回歸任務(wù)状知,這個(gè)思想也被應(yīng)用于計(jì)算機(jī)視覺的其它領(lǐng)域秽五,也是非常有效的,所以下節(jié)筆記見饥悴。