自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一文看懂人臉識(shí)別算法技術(shù)發(fā)展脈絡(luò)

人工智能 人臉識(shí)別
我們從人臉識(shí)別技術(shù)的技術(shù)細(xì)節(jié)講起,帶你初步了解人臉識(shí)別技術(shù)的發(fā)展過(guò)程。通過(guò)平臺(tái)實(shí)例的操作,帶你看看如何利用公有云的計(jì)算資源,快速訓(xùn)練一個(gè)可用的人臉識(shí)別模型。

前言

大家應(yīng)該都看過(guò)布拉德.伯德執(zhí)導(dǎo)、湯姆.克魯斯主演的《碟中諜4吧》?茫茫人海的火車(chē)站,只要一眨眼的功夫已經(jīng)被計(jì)算機(jī)識(shí)別出來(lái),隨即被特工盯梢;迎面相逢的美女是致命殺手,手機(jī)發(fā)出嘀嘀的報(bào)警聲,上面已經(jīng)顯示美女的姓名和信息。這就是本文想要介紹的人臉識(shí)別算法,以及如果使用公有云AI平臺(tái)訓(xùn)練模型。

作為目前人工智能領(lǐng)域中成熟較早、落地較廣的技術(shù)之一,人臉識(shí)別的目的是要判斷圖片和視頻中人臉的身份。從平常手機(jī)的刷臉解鎖、刷臉支付,再到安防領(lǐng)域內(nèi)的人臉識(shí)別布控,等等,人臉識(shí)別技術(shù)都有著廣泛的應(yīng)用。人臉是每個(gè)人與生俱來(lái)的特征,該特征具有唯一性并且不易被復(fù)制,從而為身份鑒別提供了必要的前提。

人臉識(shí)別的研究始于20世紀(jì)60年代,隨著計(jì)算機(jī)技術(shù)和光學(xué)成像技術(shù)的發(fā)展不斷提高,以及近幾年神經(jīng)網(wǎng)絡(luò)技術(shù)的再次興起,尤其是卷積神經(jīng)網(wǎng)絡(luò)在圖像識(shí)別和檢測(cè)中取得的巨大成功,使得人臉識(shí)別系統(tǒng)的效果得到了極大的提升。本文,我們從人臉識(shí)別技術(shù)的技術(shù)細(xì)節(jié)講起,帶你初步了解人臉識(shí)別技術(shù)的發(fā)展過(guò)程,文章的后半篇,我們將會(huì)使用ModelArts平臺(tái)的自定義鏡像,帶你看看如何利用公有云的計(jì)算資源,快速訓(xùn)練一個(gè)可用的人臉識(shí)別模型。

正文

不管是基于傳統(tǒng)圖像處理和機(jī)器學(xué)習(xí)技術(shù),還是利用深度學(xué)習(xí)技術(shù),其中的流程都是一樣的。如圖1所示,人臉識(shí)別系統(tǒng)都包括人臉檢測(cè)、對(duì)齊、編碼以及匹配四個(gè)基本環(huán)節(jié)組成。所以該部分首先通過(guò)對(duì)基于傳統(tǒng)圖像處理和機(jī)器學(xué)習(xí)算法的人臉識(shí)別系統(tǒng)進(jìn)行概述,就可以看出整個(gè)深度學(xué)習(xí)算法在人臉識(shí)別領(lǐng)域內(nèi)發(fā)展的脈絡(luò)。

人臉檢測(cè)流程

傳統(tǒng)機(jī)器學(xué)習(xí)算法

前面已經(jīng)說(shuō)過(guò),人臉識(shí)別的目的就是要判斷圖像中的人臉身份是什么,所以就首先需要先把圖像中的人臉檢測(cè)出來(lái),其實(shí)這一步歸根結(jié)底就是一個(gè)目標(biāo)檢測(cè)的問(wèn)題。傳統(tǒng)的圖像目標(biāo)檢測(cè)算法主要有三部分組成,建議框生成、特征工程以及分類,包括著名的RCNN系列算法的優(yōu)化思路也是基于這三部分進(jìn)行的。

首先是建議框生成,該步驟最簡(jiǎn)單的想法就是在圖片中crop出來(lái)一堆待檢測(cè)框,然后檢測(cè)該框內(nèi)是否存在目標(biāo),如果存在,則該框在原圖中的位置即為目標(biāo)檢測(cè)出的位置,因此在該步驟中對(duì)目標(biāo)的覆蓋率越大,則建議框生成策略越好。常見(jiàn)的建議框生成策略有sliding window、Selective Search、Randomized Prim等等,生成大量的候選框,如下圖所示。

得到大量的候選框后,傳統(tǒng)的人臉檢測(cè)算法接下來(lái)最主要的部分就是特征工程。特征工程其實(shí)就是利用算法工程師的專家經(jīng)驗(yàn)對(duì)不同場(chǎng)景的人臉提取各種特征,例如邊緣特征、形狀形態(tài)學(xué)特征、紋理特征等等,具體的算法是技術(shù)有LBP、Gabor、Haar、SIFT等等特征提取算法,將一張以二維矩陣表示的人臉圖片轉(zhuǎn)換成各種特征向量的表示。

得到特征向量之后,就可以通過(guò)傳統(tǒng)的機(jī)器學(xué)習(xí)分類器對(duì)特征進(jìn)行分類,得到是否是人臉的判斷,例如通過(guò)adaboost、cascade、SVM、隨機(jī)森林等等。通過(guò)傳統(tǒng)分類器分類之后就可以得到人臉的區(qū)域、特征向量以及分類置信度等等。通過(guò)這些信息,我們就可以完成人臉對(duì)齊、特征表示以及人臉匹配識(shí)別的工作。

以傳統(tǒng)方法中,經(jīng)典的HAAR+AdaBoost的方法為例,在特征提取階段,首先會(huì)利用haar特征在圖片中提取出很多簡(jiǎn)單的特征。Haar特征如下圖所示。為了滿足不同大小人臉的檢測(cè),通常會(huì)利用高斯金字塔對(duì)不同分辨率的圖像進(jìn)行Haar特征的提取。

Haar特征的計(jì)算方法是將白色區(qū)域內(nèi)的像素和減去黑色區(qū)域,因此在人臉和非人臉的區(qū)域內(nèi),得到的值是不一樣的。一般在具體實(shí)現(xiàn)過(guò)程中,可以通過(guò)積分圖的方法快速實(shí)現(xiàn)。一般在歸一化到20*20的訓(xùn)練圖片中,可供使用的Haar特征數(shù)在一萬(wàn)個(gè)左右,因此在這種特征規(guī)模的情況下,可以利用機(jī)器學(xué)習(xí)的算法進(jìn)行分類和識(shí)別。

得到Haar特征后,可以利用Adaboost進(jìn)行分類,Adaboost算法是一種將多個(gè)比較弱的分類方法合在一起,組合出新的強(qiáng)分類方法。根據(jù)該級(jí)聯(lián)分類器,和訓(xùn)練好的各個(gè)特征選擇閾值,就可以完成對(duì)人臉的檢測(cè)。

從上述方法可以看出,傳統(tǒng)的機(jī)器學(xué)習(xí)算法是基于特征的算法,因此需要大量的算法工程師的專家經(jīng)驗(yàn)進(jìn)行特征工程和調(diào)參等工作,算法效果也不是很好。而且人工設(shè)計(jì)在無(wú)約束環(huán)境中對(duì)不同變化情況都魯棒很困難的。過(guò)去的圖像算法是工程師更多的是通過(guò)傳統(tǒng)的圖像處理方法,根據(jù)現(xiàn)實(shí)場(chǎng)景和專家經(jīng)驗(yàn)提取大量的特征,然后對(duì)提取的特征再進(jìn)行統(tǒng)計(jì)學(xué)習(xí)的處理,這樣整體算法的性能就非常依賴于現(xiàn)實(shí)場(chǎng)景和專家經(jīng)驗(yàn),對(duì)于人臉這種類別巨大,每類樣本不均衡情況嚴(yán)重的無(wú)約束場(chǎng)景效果并不是很好。因此,近幾年隨著深度學(xué)習(xí)在圖像處理中取得的巨大成功,人臉識(shí)別技術(shù)也都以深度學(xué)習(xí)為主,并且已經(jīng)達(dá)到了非常好的效果。

深度學(xué)習(xí)在人臉識(shí)別領(lǐng)域的應(yīng)用

在深度學(xué)習(xí)的人臉識(shí)別系統(tǒng)中,該問(wèn)題被分成了一個(gè)目標(biāo)檢測(cè)問(wèn)題和一個(gè)分類問(wèn)題,而目標(biāo)檢測(cè)問(wèn)題在深度學(xué)習(xí)中本質(zhì)還是一個(gè)分類問(wèn)題和回歸問(wèn)題,因此隨著卷積神經(jīng)網(wǎng)絡(luò)在圖片分類上的成功應(yīng)用,人臉識(shí)別系統(tǒng)的效果得到了快速且巨大的提升,并以此誕生了大量的視覺(jué)算法公司,并將人臉識(shí)別應(yīng)用在了社會(huì)生活的各個(gè)方面。

其實(shí)利用神經(jīng)網(wǎng)絡(luò)來(lái)做人臉識(shí)別并不是什么新思想,1997年就有研究者為人臉檢測(cè)、眼部定位和人臉識(shí)別提出了一種名為基于概率決策的神經(jīng)網(wǎng)絡(luò)的方法。這種人臉識(shí)別 PDBNN 被分成了每一個(gè)訓(xùn)練主體一個(gè)全連接子網(wǎng)絡(luò),以降低隱藏單元的數(shù)量和避免過(guò)擬合。研究者使用密度和邊特征分別訓(xùn)練了兩個(gè) PBDNN,然后將它們的輸出組合起來(lái)得到最終分類決定。但是受限于當(dāng)時(shí)算力和數(shù)據(jù)的嚴(yán)重不足,算法相對(duì)簡(jiǎn)單,因此該算法并沒(méi)有得到很好的效果。隨著僅今年反向傳播理論和算力框架等的日趨成熟,人臉識(shí)別算法的效果才開(kāi)始得到巨大的提升。

在深度學(xué)習(xí)中,一個(gè)完整的人臉識(shí)別系統(tǒng)也包括圖1所示的四個(gè)步驟,其中第一步驟叫做人臉檢測(cè)算法,本質(zhì)也是一個(gè)目標(biāo)檢測(cè)算法。第二個(gè)步驟叫做人臉對(duì)齊,目前又基于關(guān)鍵點(diǎn)的幾何對(duì)齊和基于深度學(xué)習(xí)的人臉對(duì)齊。第三個(gè)步驟特征表示,在深度學(xué)習(xí)中是通過(guò)分類網(wǎng)絡(luò)的思想,提取分類網(wǎng)絡(luò)中的一些feature層作為人臉的特征表示,然后用相同的方式對(duì)標(biāo)準(zhǔn)人臉像進(jìn)行處理,最后通過(guò)比對(duì)查詢的方式完成整體的人臉識(shí)別系統(tǒng)。下面主要對(duì)人臉檢測(cè)和人臉識(shí)別算法的發(fā)展進(jìn)行簡(jiǎn)單綜述。

人臉檢測(cè)

深度學(xué)習(xí)在圖像分類中的巨大成功后很快被用于人臉檢測(cè)的問(wèn)題,起初解決該問(wèn)題的思路大多是基于CNN網(wǎng)絡(luò)的尺度不變性,對(duì)圖片進(jìn)行不同尺度的縮放,然后進(jìn)行推理并直接對(duì)類別和位置信息進(jìn)行預(yù)測(cè)。另外,由于對(duì)feature map中的每一個(gè)點(diǎn)直接進(jìn)行位置回歸,得到的人臉框精度比較低,因此有人提出了基于多階段分類器由粗到細(xì)的檢測(cè)策略檢測(cè)人臉,例如主要方法有Cascade CNN、 DenseBox和MTCNN等等。

MTCNN是一個(gè)多任務(wù)的方法,第一次將人臉區(qū)域檢測(cè)和人臉關(guān)鍵點(diǎn)檢測(cè)放在了一起,與Cascade CNN一樣也是基于cascade的框架,但是整體思路更加的巧妙合理,MTCNN總體來(lái)說(shuō)分為三個(gè)部分:PNet、RNet和ONet,網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示。

首先PNet網(wǎng)絡(luò)對(duì)輸入圖片resize到不同尺寸,作為輸入,直接經(jīng)過(guò)兩層卷積后,回歸人臉?lè)诸惡腿四槞z測(cè)框,這部分稱之為粗檢測(cè)。將粗檢測(cè)得到的人臉從原圖中crop出來(lái)后,在輸入的R-Net,再進(jìn)行一次人臉檢測(cè)。最后將得到的人臉最終輸入O-Net,得到的O-Net輸出結(jié)果為最終的人臉檢測(cè)結(jié)果。MTCNN整體流程相對(duì)比較簡(jiǎn)單,能夠快速的進(jìn)行部署和實(shí)現(xiàn),但是MTCNN的缺點(diǎn)也很多。包括多階段任務(wù)訓(xùn)練費(fèi)時(shí),大量中間結(jié)果的保存需要占用大量的存儲(chǔ)空間。另外,由于改網(wǎng)絡(luò)直接對(duì)feature點(diǎn)進(jìn)行bounding box的回歸,對(duì)于小目標(biāo)人臉檢測(cè)的效果也不是很好。還有,該網(wǎng)絡(luò)在推理的過(guò)程中為了滿足不同大小人臉檢測(cè)需要,要將人臉圖片resize到不同尺寸內(nèi),嚴(yán)重影響了推理的速度。

隨著目標(biāo)檢測(cè)領(lǐng)域的發(fā)展,越來(lái)越多的實(shí)驗(yàn)證據(jù)證明目標(biāo)檢測(cè)中更多的瓶頸在于底層網(wǎng)絡(luò)語(yǔ)義低但定位精度相對(duì)較高和高層網(wǎng)絡(luò)語(yǔ)義高但定位精度低的矛盾,目標(biāo)檢測(cè)網(wǎng)絡(luò)也開(kāi)始流行anchor-based的策略和跨層融合的策略,例如著名的Faster-rcnn、SSD和yolo系列等。因此,人臉檢測(cè)算法也越來(lái)越多的利用anchor和多路輸出來(lái)滿足不同大小人臉檢出的效果,其中最著名的算法就是SSH網(wǎng)絡(luò)結(jié)構(gòu)。

從上圖中可以看出,SSH網(wǎng)絡(luò)已經(jīng)有對(duì)不同網(wǎng)絡(luò)層輸出進(jìn)行處理的方法,只需要一遍推理就能完成不同大小人臉的檢測(cè)過(guò)程,因此稱之為Single Stage。SSH的網(wǎng)絡(luò)也比較簡(jiǎn)單,就是對(duì)VGG不同卷積層驚醒了分支計(jì)算并輸出。另外還對(duì)高層feature進(jìn)行了上采樣,與底層feature做Eltwise Sum來(lái)完成底層與高層的特征融合。另外SSH網(wǎng)絡(luò)還設(shè)計(jì)了detection module和context module,其中context module作為detection module的一部分,采用了inception的結(jié)構(gòu),獲取更多上下文信息以及更大的感受野。

SSH中的detection module模塊

SSH中detection module里的context module模塊

SSH利用1×1卷積對(duì)輸出最終的回歸和分類的分支結(jié)果,并沒(méi)有利用全連接層,因此可以保證不同尺寸圖片的輸入都能得到輸出的結(jié)果,也是響應(yīng)了當(dāng)時(shí)全卷積設(shè)計(jì)方式的潮流。遺憾的是該網(wǎng)絡(luò)并沒(méi)有輸出landmark點(diǎn),另外其實(shí)上下文結(jié)構(gòu)也沒(méi)有用到比較流行的特征金字塔結(jié)構(gòu),VGG16的backbone也相對(duì)較淺,隨著人臉優(yōu)化技術(shù)的不斷進(jìn)行,各種各樣的trick也都日趨成熟。因此,最后向大家介紹一下目前人臉檢測(cè)算法中應(yīng)用比較廣的Retinaface網(wǎng)絡(luò)。

Retinaface由google提出,本質(zhì)是基于RetinaNet的網(wǎng)絡(luò)結(jié)構(gòu),采用特征金字塔技術(shù),實(shí)現(xiàn)了多尺度信息的融合,對(duì)檢測(cè)小物體有重要的作用。網(wǎng)絡(luò)結(jié)構(gòu)如下所示。

從上圖可以看出,Retinaface的backbone網(wǎng)絡(luò)為常見(jiàn)的卷積神經(jīng)網(wǎng)絡(luò),然后加入特征金子塔結(jié)構(gòu)和Context Module模塊,進(jìn)一步融合上下文的信息,并完成包括分類、檢測(cè)、landmark點(diǎn)回歸以及圖像自增強(qiáng)的多種任務(wù)。

因?yàn)槿四槞z測(cè)的本質(zhì)是目標(biāo)檢測(cè)任務(wù),目標(biāo)檢測(cè)未來(lái)的方向也適用于人臉的優(yōu)化方向。目前在目標(biāo)檢測(cè)中小目標(biāo)、遮擋目標(biāo)的檢測(cè)依舊很困難,另外大部份檢測(cè)網(wǎng)絡(luò)更多的開(kāi)始部署在端側(cè),因此基于端側(cè)的網(wǎng)絡(luò)模型壓縮和重構(gòu)加速等等更加考驗(yàn)算法工程師對(duì)與深度學(xué)習(xí)檢測(cè)算法的理解和應(yīng)用。

人臉識(shí)別

人臉識(shí)別問(wèn)題本質(zhì)是一個(gè)分類問(wèn)題,即每一個(gè)人作為一類進(jìn)行分類檢測(cè),但實(shí)際應(yīng)用過(guò)程中會(huì)出現(xiàn)很多問(wèn)題。第一,人臉類別很多,如果要識(shí)別一個(gè)城鎮(zhèn)的所有人,那么分類類別就將近十萬(wàn)以上的類別,另外每一個(gè)人之間可獲得的標(biāo)注樣本很少,會(huì)出現(xiàn)很多長(zhǎng)尾數(shù)據(jù)。根據(jù)上述問(wèn)題,要對(duì)傳統(tǒng)的CNN分類網(wǎng)絡(luò)進(jìn)行修改。

我們知道深度卷積網(wǎng)絡(luò)雖然作為一種黑盒模型,但是能夠通過(guò)數(shù)據(jù)訓(xùn)練的方式去表征圖片或者物體的特征。因此人臉識(shí)別算法可以通過(guò)卷積網(wǎng)絡(luò)提取出大量的人臉特征向量,然后根據(jù)相似度判斷與底庫(kù)比較完成人臉的識(shí)別過(guò)程,因此算法網(wǎng)絡(luò)能不能對(duì)不同的人臉生成不同的特征,對(duì)同一人臉生成相似的特征,將是這類embedding任務(wù)的重點(diǎn),也就是怎么樣能夠最大化類間距離以及最小化類內(nèi)距離。

在人臉識(shí)別中,主干網(wǎng)絡(luò)可以利用各種卷積神經(jīng)網(wǎng)絡(luò)完成特征提取的工作,例如resnet,inception等等經(jīng)典的卷積神經(jīng)網(wǎng)絡(luò)作為backbone,關(guān)鍵在于最后一層loss function的設(shè)計(jì)和實(shí)現(xiàn)。現(xiàn)在從兩個(gè)思路分析一下基于深度學(xué)習(xí)的人臉識(shí)別算法中各種損失函數(shù)。

思路1:metric learning,包括contrastive loss, triplet loss以及sampling method

思路2:margin based classification,包括softmax with center loss, sphereface, normface, AM-sofrmax(cosface) 和arcface。

1. Metric Larning

(1)Contrastive loss

深度學(xué)習(xí)中最先應(yīng)用metric learning思想之一的便是DeepID2了。其中DeepID2最主要的改進(jìn)是同一個(gè)網(wǎng)絡(luò)同時(shí)訓(xùn)練verification和classification(有兩個(gè)監(jiān)督信號(hào))。其中在verification loss的特征層中引入了contrastive loss。

Contrastive loss不僅考慮了相同類別的距離最小化,也同時(shí)考慮了不同類別的距離最大化,通過(guò)充分運(yùn)用訓(xùn)練樣本的label信息提升人臉識(shí)別的準(zhǔn)確性。因此,該loss函數(shù)本質(zhì)上使得同一個(gè)人的照片在特征空間距離足夠近,不同人在特征空間里相距足夠遠(yuǎn)直到超過(guò)某個(gè)閾值。(聽(tīng)起來(lái)和triplet
loss有點(diǎn)像)。

Contrastive loss引入了兩個(gè)信號(hào),并通過(guò)兩個(gè)信號(hào)對(duì)網(wǎng)絡(luò)進(jìn)行訓(xùn)練。其中識(shí)別信號(hào)的表達(dá)式如下:

驗(yàn)證信號(hào)的表達(dá)式如下:

基于這樣的信號(hào),DeepID2在訓(xùn)練的時(shí)候就不是以一張圖片為單位了,而是以Image Pair為單位,每次輸入兩張圖片,為同一人則為1,如果不是同一人則為-1.

(2)Triplet loss from FaceNet

這篇15年來(lái)自Google的FaceNet同樣是人臉識(shí)別領(lǐng)域分水嶺性質(zhì)的工作。它提出了一個(gè)絕大部分人臉問(wèn)題的統(tǒng)一解決框架,即:識(shí)別、驗(yàn)證、搜索等問(wèn)題都可以放到特征空間里做,需要專注解決的僅僅是如何將人臉更好的映射到特征空間。

Google在DeepID2的基礎(chǔ)上,拋棄了分類層即Classification Loss,將Contrastive Loss改進(jìn)為T(mén)riplet loss,只為了一個(gè)目的:學(xué)習(xí)到更好的feature。

直接貼出Triplet loss的損失函數(shù),其輸入的不再是Image Pair,而是三張圖片(Triplet),分別為Anchor Face, Negative Face和Positive Face。Anchor與Positive Face為同一人,與Negative Face為不同的人。那么Triplet loss的損失函數(shù)即可表示為:

該式子的直觀解釋為:在特征空間里Anchor與Positive的距離要小于Anchor與Negative的距離并超過(guò)一個(gè)Margin Alpha。他與Contrastive loss的直觀區(qū)別由下圖所示。

(3)Metric learning的問(wèn)題

上述的兩個(gè)loss function效果很不錯(cuò),而且也符合人的客觀認(rèn)知,在實(shí)際項(xiàng)目中也有大量的應(yīng)用,但該方法仍有一些不足之處。

  • 模型訓(xùn)練依賴大量的數(shù)據(jù),擬合過(guò)程很慢。由于contrastive loss和triplet loss都是基于pair或者triplet的,需要準(zhǔn)備大量的正負(fù)樣本,,訓(xùn)練很長(zhǎng)時(shí)間都不可能完全遍歷所有可能的樣本間組合。網(wǎng)上有博客說(shuō)10000人、500000張左右的亞洲數(shù)據(jù)集上花一個(gè)月才能完成擬合。
  • Sample方式影響模型的訓(xùn)練。比如對(duì)于triplet loss來(lái)說(shuō),在訓(xùn)練過(guò)程中要隨機(jī)的采樣anchor face, negative face以及positive face,好的樣本采樣能夠加快訓(xùn)練速度和模型收斂,但是在隨機(jī)抽取的過(guò)程中很難做到非常好。
  • 缺少對(duì)hard triplets的挖掘,這也是大多數(shù)模型訓(xùn)練的問(wèn)題。比如說(shuō)在人臉識(shí)別領(lǐng)域中,hard negatives表示相似但不同的人,而hard positive表示同一個(gè)人但完全不同的姿態(tài)、表情等等。而對(duì)hard example進(jìn)行學(xué)習(xí)和特殊處理對(duì)于提高識(shí)別模型的精度至關(guān)重要。

2. 對(duì)于Metric Learning不足進(jìn)行修正的各種trick

(1)Finetune

參考論文:Deep Face Recognition

在論文《Deep Face Recognition》中,為了加快triplet loss的訓(xùn)練,坐著先用softmax訓(xùn)練人臉識(shí)別模型,然后移除頂層的classification layer,然后用triplet loss對(duì)模型進(jìn)行特征層finetune,在加速訓(xùn)練的同時(shí)也取得了很不錯(cuò)的效果。該方法也是現(xiàn)在訓(xùn)練triplet loss時(shí)最常用的方法。

(2)對(duì)Triplet loss的修改

參考論文:In Defense of the Triplet Loss for Person Re-Identification

該作者說(shuō)出了Triplet loss的缺點(diǎn)。對(duì)于Triplet loss訓(xùn)練所需要的一個(gè)三元組,anchor(a)、positive(p)、negative(n)來(lái)說(shuō),需要從訓(xùn)練集中隨機(jī)挑選。由于loss function的驅(qū)動(dòng),很有可能挑選出來(lái)的是很簡(jiǎn)單的樣本組合,即很像的正樣本以及很不像的負(fù)樣本,而讓網(wǎng)絡(luò)一直在簡(jiǎn)單樣本上進(jìn)行學(xué)習(xí),會(huì)限制網(wǎng)絡(luò)的范化能力。因此坐著修改了triplet loss并添加了新的trick,大量實(shí)驗(yàn)證明,這種改進(jìn)版的方法效果非常好。

在Google提供的facenet triplet loss訓(xùn)練時(shí),一旦選定B triplets集合,數(shù)據(jù)就會(huì)按照順序排好的3個(gè)一組,那么總共的組合就有3B種,但是這些3B個(gè)圖像實(shí)際上有多達(dá)種有效的triplets組合,僅僅使用3B種就很浪費(fèi)。

在該片論文中,作者提出了一個(gè)TriHard loss,其核心思想是在triplet loss的基礎(chǔ)上加入對(duì)hard example的處理:對(duì)于每一個(gè)訓(xùn)練的batch, 隨機(jī)挑選P個(gè)ID的行人,每個(gè)行人隨機(jī)挑選K張不同的圖片,即一個(gè)batch含有P×K張圖片。之后對(duì)于batch中的每一張圖片a,我們可以挑選一個(gè)最難的正樣本和一個(gè)最難的負(fù)樣本和a組成一個(gè)三元組。首先我們定義和a為相同ID的圖片集為A,剩下不同ID的圖片圖片集為B,則TriHard損失表示為:

其中是人為設(shè)定的閾值參數(shù)。TriHard loss會(huì)計(jì)算a和batch中的每一張圖片在特征空間的歐氏距離,然后選出與a距離最遠(yuǎn)(最不像)的正樣本p和距離最近(最像)的負(fù)樣本n來(lái)計(jì)算三元組損失。其中d表示歐式距離。損失函數(shù)的另一種寫(xiě)法如下:

另外,作者在輪中也提出了幾個(gè)實(shí)驗(yàn)得到的觀點(diǎn):

  • 平方后的歐式距離不如開(kāi)方后的真實(shí)歐氏距離(后續(xù)會(huì)簡(jiǎn)單提一下原因)
  • 提出了Soft-Margin損失函數(shù)替代原始的Triplet loss表達(dá)式,soft-margin能夠使得損失函數(shù)更加平滑,避免函數(shù)收斂在bad local處,能夠一定程度上加速算法收斂。
  • 引進(jìn)了Batch Hard Sampling

該方法考慮了hard example后效果比傳統(tǒng)的triplet loss好。

(3)對(duì)loss以及sample方法的修改

參考論文:Deep Metric Learning via Lifted Structured Feature Embedding

該論文首先提出了現(xiàn)有的三元組方法無(wú)法充分利用minibatch SGD training的training batches的優(yōu)勢(shì),創(chuàng)造性的將the vector of pairwise distances轉(zhuǎn)換成the matrix of pairwise
distance,然后設(shè)計(jì)了一個(gè)新的結(jié)構(gòu)化損失函數(shù),取得了非常好的效果。如下圖所示,是contrastice embedding,triplet embedding以及l(fā)ifted structured embedding三種方式的采樣示意圖。

直觀上看,lifted structured embedding涉及的分類模式更多,作者為了避免大量數(shù)據(jù)造成的訓(xùn)練困難,作者在此基礎(chǔ)上給出了一個(gè)結(jié)構(gòu)化的損失函數(shù)。如下圖所示。

其中P是正樣本集合,N是負(fù)樣本集合??梢钥吹綄?duì)比上述的損失函數(shù),該損失函數(shù)開(kāi)始考慮一個(gè)樣本集合的問(wèn)題。但是,并不是所有樣本對(duì)之間的negative edges都攜帶了有用的信息,也就是說(shuō)隨機(jī)采樣的樣本對(duì)之間的negative edges攜帶了非常有限的信息,因此我們需要設(shè)計(jì)一種非隨機(jī)的采樣方法。

通過(guò)上述的結(jié)構(gòu)化損失函數(shù)我們可以看到,在最終計(jì)算損失函數(shù)時(shí),考慮了最像和最不像的hard pairs(也就是損失函數(shù)中max的用處),也就相當(dāng)于在訓(xùn)練過(guò)程中添加了difficult
neighbors的信息了訓(xùn)練mini-batch,通過(guò)這種方式訓(xùn)練數(shù)據(jù)能夠大概率的搜尋到hard negatives和hard positives的樣本,而隨著訓(xùn)練的不斷進(jìn)行,對(duì)hard樣本的訓(xùn)練也將實(shí)現(xiàn)最大化類間距離和最小化類內(nèi)距離的目的。

如上圖所示,該文章在進(jìn)行metric learning的時(shí)候并沒(méi)有隨機(jī)的選擇sample pairs,而是綜合了多類樣本之間較難區(qū)分者進(jìn)行訓(xùn)練。此外,文中還提到了以為的尋求max的過(guò)程或者尋求single hardest negative的過(guò)程會(huì)導(dǎo)致網(wǎng)絡(luò)收斂到一個(gè)bad local optimum,我猜想可能是因?yàn)閙ax的截?cái)嘈?yīng),使得梯度比較陡峭或者梯度間斷點(diǎn)過(guò)多。作者進(jìn)一步改進(jìn)了loss
function,采用了smooth upper bound,即下式所示。

(4)對(duì)sample方式和對(duì)triplet loss的進(jìn)一步修改

參考論文:Sampling Matters in Deep Embedding Learning

  • 對(duì)采樣方式的修改

文章指出hard negative樣本由于anchor的距離較小,這是如果有噪聲,那么這種采樣方式就很容易受到噪聲的影響,從而造成訓(xùn)練時(shí)的模型坍塌。FaceNet曾經(jīng)提出一種semi-hard negative mining的方法,它提出的方法是讓采樣的樣本不是太hard。但是根據(jù)作者的分析認(rèn)為,sample應(yīng)該在樣本中進(jìn)行均勻的采樣,因此最佳的采樣狀態(tài)應(yīng)該是在分散均勻的負(fù)樣本中,既有hard,又有semi-hard,又有easy的樣本,因此作者提出了一種新的采樣方法Distance weighted sampling。

在現(xiàn)實(shí)狀態(tài)下,我們隊(duì)所有的樣本進(jìn)行兩兩采樣,計(jì)算其距離,最終得到點(diǎn)對(duì)距離的分布有著如下的關(guān)系:

那么根據(jù)給定的距離,通過(guò)上述函數(shù)的反函數(shù)就可以得到其采樣概率,根據(jù)該概率決定每個(gè)距離需要采樣的比例。給定一個(gè)anchor,采樣負(fù)例的概率為下式:

由于訓(xùn)練樣本與訓(xùn)練梯度強(qiáng)相關(guān),因此作者也繪制出了采樣距離、采樣方法與數(shù)據(jù)梯度方差的關(guān)系,如下圖所示。從圖中可以看出,hard negative mining方法采樣的樣本都處于高方差的區(qū)域,如果數(shù)據(jù)集中有噪聲的話,采樣很容易受到噪聲的影響,從而導(dǎo)致模型坍塌。隨機(jī)采樣的樣本容易集中在低方差的區(qū)域,從而使得loss很小,但此時(shí)模型實(shí)際上并沒(méi)有訓(xùn)練好。Semi-hard negative mining采樣的范圍很小,這很可能導(dǎo)致模型在很早的時(shí)候就收斂,loss下降很慢,但實(shí)際上此時(shí)模型也還沒(méi)訓(xùn)練好;而本文提出的方法,能夠?qū)崿F(xiàn)在整個(gè)數(shù)據(jù)集上均勻采樣。

  • 對(duì)loss function的修改

作者在觀察constractive loss和triplet loss的時(shí)候發(fā)現(xiàn)一個(gè)問(wèn)題,就是負(fù)樣本在非常hard的時(shí)候loss函數(shù)非常的平滑,那么也就意味著梯度會(huì)很小,梯度小對(duì)于訓(xùn)練來(lái)說(shuō)就意味著非常hard的樣本不能充分訓(xùn)練,網(wǎng)絡(luò)得不到hard樣本的有效信息,因此hard樣本的效果就會(huì)變差。所以如果在hard樣本周?chē)鷏oss不是那么平滑,也就是深度學(xué)習(xí)中經(jīng)常用的導(dǎo)數(shù)為1(像relu一樣),那么hard模式會(huì)不會(huì)就解決了梯度消失的問(wèn)題。另外loss function還要實(shí)現(xiàn)triplet loss對(duì)正負(fù)樣本的兼顧,以及具備margin設(shè)計(jì)的功能,也就是自適應(yīng)不同的數(shù)據(jù)分布。損失函數(shù)如下:

我們稱anchor樣本與正例樣本之間的距離為正例對(duì)距離;稱anchor樣本與負(fù)例樣本之間的距離為負(fù)例對(duì)距離。公式中的參數(shù)beta定義了正例對(duì)距離與負(fù)例對(duì)距離之間的界限,如果正例對(duì)距離Dij大于beta,則損失加大;或者負(fù)例對(duì)距離Dij小于beta,損失加大。A控制樣本的分離間隔;當(dāng)樣本為正例對(duì)時(shí),yij為1,樣本為負(fù)例對(duì)時(shí),yij為-1。下圖為損失函數(shù)曲線。

從上圖可以看出為什么在非常hard的時(shí)候會(huì)出現(xiàn)梯度消失的情況,因?yàn)殡x0點(diǎn)近的時(shí)候藍(lán)色的線越來(lái)越平滑,梯度也就越來(lái)越小了。另外作者對(duì)的設(shè)置也進(jìn)行了調(diào)優(yōu),加入了樣本偏置、類別偏置以及超參,對(duì)損失函數(shù)進(jìn)一步優(yōu)化,能夠根據(jù)訓(xùn)練過(guò)程自動(dòng)修改的值。

3. Margin Based Classification

Margin based classification不像在feature層直接計(jì)算損失的metric learning那樣對(duì)feature加直觀的強(qiáng)限制,是依然把人臉識(shí)別當(dāng) classification 任務(wù)進(jìn)行訓(xùn)練,通過(guò)對(duì) softmax
公式的改造,間接實(shí)現(xiàn)了對(duì) feature 層施加 margin 的限制,使網(wǎng)絡(luò)最后得到的 feature 更 discriminative。

(1)Center loss

參考論文:A Discriminative Feature Learning Approach for Deep Face Recognition

ECCV 2016的這篇文章主要是提出了一個(gè)新的Loss:Center Loss,用以輔助Softmax Loss進(jìn)行人臉的訓(xùn)練,為了讓同一個(gè)類別壓縮在一起,最終獲取更加discriminative的features。center loss意思即為:為每一個(gè)類別提供一個(gè)類別中心,最小化min-batch中每個(gè)樣本與對(duì)應(yīng)類別中心的距離,這樣就可以達(dá)到縮小類內(nèi)距離的目的。下圖為最小化樣本和類別中心距離的損失函數(shù)。

為每個(gè)batch中每個(gè)樣本對(duì)應(yīng)的類別中心,和特征的維度一樣,用歐式距離作為高維流形體距離表達(dá)。因此,在softmax的基礎(chǔ)上,center loss的損失函數(shù)為:

個(gè)人理解Center loss就如同在損失函數(shù)中加入了聚類的功能,隨著訓(xùn)練的進(jìn)行,樣本自覺(jué)地聚類在每一個(gè)batch的中心,進(jìn)一步實(shí)現(xiàn)類間差異最大化。但是我覺(jué)得,對(duì)于高維特征,歐氏距離并不能反映聚類的距離,因此這樣簡(jiǎn)單的聚類并不能在高維上取得更好的效果。

(2)L-Softmax

原始的Softmax的目的是使得,將向量相乘的方式變換為向量的模與角度的關(guān)系,即,在這個(gè)基礎(chǔ)上,L-Softmax希望可以通過(guò)增加一個(gè)正整數(shù)變量m,可以看到:

使得產(chǎn)生的決策邊界可以更加嚴(yán)格地約束上述不等式,讓類內(nèi)的間距更加的緊湊,讓類間的間距更加有區(qū)分性。所以基于上式和softmax的公式,可以得到L-softmax的公式為:

由于cos是減函數(shù),所以乘以m會(huì)使得內(nèi)積變小,最終隨著訓(xùn)練,類本身之間的距離會(huì)增大。通過(guò)控制m的大小,可以看到類內(nèi)和類間距離的變化,二維圖顯示如下:

作者為了保障在反向傳播和推理過(guò)程中能夠滿足類別向量之間的角度都能夠滿足margin的過(guò)程,并保證單調(diào)遞減,因此構(gòu)建了一種新的函數(shù)形式:

有人反饋L-Softmax調(diào)參難度較大,對(duì)m的調(diào)參需要反復(fù)進(jìn)行,才能達(dá)到更好的效果。

(3)Normface

參考論文:NormFace: L2 Hypersphere Embedding for Face Verification

這篇論文是一篇很有意思的文章,文章對(duì)于權(quán)重與特征歸一化做了很多有意思的探討。文章提出,sphereface雖然好,但是它不優(yōu)美。在測(cè)試階段,sphereface通過(guò)特征間的余弦值來(lái)衡量相似性,即以角度為相似性度量。但在訓(xùn)練過(guò)程中也有一個(gè)問(wèn)題,權(quán)重沒(méi)有歸一化,loss

function在訓(xùn)練過(guò)程中減小的同時(shí),會(huì)使得權(quán)重的模越來(lái)越大,所以sphereface損失函數(shù)的優(yōu)化方向并不是很?chē)?yán)謹(jǐn),其實(shí)優(yōu)化的方向還有一部分去增大特征的長(zhǎng)度了。有博主做實(shí)驗(yàn)發(fā)現(xiàn),隨著m的增大,坐標(biāo)的尺度也在不斷增大,如下圖所示。

因此作者在優(yōu)化的過(guò)程中,對(duì)特征做了歸一化處理。相應(yīng)的損失函數(shù)也如下所示:

其中W和f都為歸一化的特征,兩個(gè)點(diǎn)積就是角度余弦值。參數(shù)s的引入是因?yàn)閿?shù)學(xué)上的性質(zhì),保證了梯度大小的合理性,原文中有比較直觀的解釋,可以閱讀原論文,并不是重點(diǎn)。s既可以變成可學(xué)習(xí)的參數(shù),也可以變成超參,論文作者給了很多推薦值,可以在論文中找到。其實(shí),F(xiàn)aceNet中歸一化的歐氏距離,和余弦距離是統(tǒng)一的。

4. AM-softmax/CosFace

參考論文:Additive Margin Softmax for Face Verification

CosFace: Large Margin Cosine Loss for Deep Face Recognition

看上面的論文,會(huì)發(fā)現(xiàn)少了一個(gè)東西,那就是margin,或者說(shuō)是margin的意味少了一些,所以AM-softmax在歸一化的基礎(chǔ)上有引入了margin。損失函數(shù)如下:

直觀上來(lái)看,-m比更小,所以損失函數(shù)值比Normface里的更大,因此有了margin的感覺(jué)。m是一個(gè)超參數(shù),控制懲罰,當(dāng)m越大,懲罰越強(qiáng)。該方法好的一點(diǎn)是容易復(fù)現(xiàn),而且沒(méi)有很多調(diào)參的tricks,效果也很好。


(1)ArcFace

與 AM-softmax 相比,區(qū)別在于 Arcface 引入 margin 的方式不同,損失函數(shù):

乍一看是不是和 AM-softmax一樣?注意 m 是在余弦里面。文章指出基于上式優(yōu)化得到的特征間的 boundary 更為優(yōu)越,具有更強(qiáng)的幾何解釋。

然而這樣引入 margin 是否會(huì)有問(wèn)題?仔細(xì)想 cos(θ+m) 是否一定比 cos(θ) 小?

最后我們用文章中的圖來(lái)解釋這個(gè)問(wèn)題,并且也由此做一個(gè)本章 Margin-based Classification 部分的總結(jié)。

這幅圖出自于 Arcface,橫坐標(biāo)為 θ 為特征與類中心的角度,縱坐標(biāo)為損失函數(shù)分子指數(shù)部分的值(不考慮 s),其值越小損失函數(shù)越大。

看了這么多基于分類的人臉識(shí)別論文,相信你也有種感覺(jué),大家似乎都在損失函數(shù)上做文章,或者更具體一點(diǎn),大家都是在討論如何設(shè)計(jì)上圖的 Target logit-θ 曲線。

這個(gè)曲線意味著你要如何優(yōu)化偏離目標(biāo)的樣本,或者說(shuō),根據(jù)偏離目標(biāo)的程度,要給予多大的懲罰。兩點(diǎn)總結(jié):

1. 太強(qiáng)的約束不容易泛化。例如 Sphereface 的損失函數(shù)在 m=3 或 4 的時(shí)候能滿足類內(nèi)最大距離小于類間最小距離的要求。此時(shí)損失函數(shù)值很大,即 target logits 很小。但并不意味著能泛化到訓(xùn)練集以外的樣本。施加太強(qiáng)的約束反而會(huì)降低模型性能,且訓(xùn)練不易收斂。

2. 選擇優(yōu)化什么樣的樣本很重要。Arcface 文章中指出,給予 θ∈[60° , 90°] 的樣本過(guò)多懲罰可能會(huì)導(dǎo)致訓(xùn)練不收斂。優(yōu)化 θ ∈ [30° , 60°] 的樣本可能會(huì)提高模型準(zhǔn)確率,而過(guò)分優(yōu)化 θ∈[0° , 30°] 的樣本則不會(huì)帶來(lái)明顯提升。至于更大角度的樣本,偏離目標(biāo)太遠(yuǎn),強(qiáng)行優(yōu)化很有可能會(huì)降低模型性能。

這也回答了上一節(jié)留下的疑問(wèn),上圖曲線 Arcface 后面是上升的,這無(wú)關(guān)緊要甚至還有好處。因?yàn)閮?yōu)化大角度的 hard sample 可能沒(méi)有好處。這和 FaceNet 中對(duì)于樣本選擇的 semi-hard 策略是一個(gè)道理。

Margin based classification 延伸閱讀

1. A discriminative feature learning approach for deep face recognition [14]

提出了 center loss,加權(quán)整合進(jìn)原始的 softmax loss。通過(guò)維護(hù)一個(gè)歐式空間類中心,縮小類內(nèi)距離,增強(qiáng)特征的 discriminative power。

2. Large-margin softmax loss for convolutional neural networks [10]

Sphereface 作者的前一篇文章,未歸一化權(quán)重,在 softmax loss 中引入了 margin。里面也涉及到 Sphereface 的訓(xùn)練細(xì)節(jié)。

使用ModelArts訓(xùn)練人臉模型

人臉識(shí)別算法實(shí)現(xiàn)解釋

本文我們部署的人臉識(shí)別算法模型主要包括兩部分:

  1. 第一部分為人臉檢測(cè)算法模型,該模型將圖片中的人臉進(jìn)行識(shí)別,返回人臉的位置信息;
  2. 第二部分為人臉特征表示算法模型,也稱之為識(shí)別模型。這個(gè)部分將crop出的人臉圖像embedding到一個(gè)固定維度大小的向量,然后利用該向量與底庫(kù)進(jìn)行比對(duì),完成人臉識(shí)別的整體流程。

如下圖所示,整體算法實(shí)現(xiàn)的流程分為線下和線上兩個(gè)部分,在每次對(duì)不同的人進(jìn)行識(shí)別之前首先利用訓(xùn)練好的算法生成人臉標(biāo)準(zhǔn)底庫(kù),將底庫(kù)數(shù)據(jù)保存在modelarts上。然后在每次推理的過(guò)程中,圖片輸入會(huì)經(jīng)過(guò)人臉檢測(cè)模型和人臉識(shí)別模型得到人臉特征,然后基于該特征在底庫(kù)中搜索相似對(duì)最高的特征,完成人臉識(shí)別的過(guò)程。

在實(shí)現(xiàn)過(guò)程中,我們采用了基于Retinaface+resnet50+arcface的算法完成人臉圖像的特征提取,其中Retinaface作為檢測(cè)模型,resnet50+arcface作為特征提取模型。

在鏡像中,運(yùn)行訓(xùn)練的腳本有兩個(gè),分別對(duì)應(yīng)人臉檢測(cè)的訓(xùn)練和人臉識(shí)別的訓(xùn)練。

  • 人臉檢測(cè)的訓(xùn)練腳本為:
run_face_detection_train.sh

該腳本的啟動(dòng)命令為

sh run_face_detection_train.sh data_path model_output_path

其中model_output_path為模型輸出的路徑,data_path為人臉檢測(cè)訓(xùn)練集的輸入路徑,輸入的圖片路徑結(jié)構(gòu)如下:

detection_train_data/    train/      images/      label.txt    val/      images/      label.txt    test/      images/      label.txt
  • 人臉識(shí)別的訓(xùn)練腳本為:
run_face_recognition_train.sh

該腳本的啟動(dòng)命令為

sh run_face_recognition_train.sh data_path model_output_path

其中model_output_path為模型輸出的路徑,data_path為人臉檢測(cè)訓(xùn)練集的輸入路徑,輸入的圖片路徑結(jié)構(gòu)如下:

recognition_train_data/cele.idxcele.lstcele.recproperty
  • 底庫(kù)生成的腳本:
run_generate_data_base.sh

該腳本的啟動(dòng)命令為:

sh run_generate_data_base.sh data_path detect_model_path recognize_model_path db_output_path

其中data_path為底庫(kù)輸入路徑,detect_model_path為檢測(cè)模型輸入路徑,recognize_model_path為識(shí)別模型輸入路徑,db_output_path為底庫(kù)輸出路徑。

  • 底庫(kù)生成的腳本:
run_face_recognition.sh

該腳本的啟動(dòng)命令為:

sh run_generate_data_base.sh data_path db_path detect_model_path recognize_model_path

其中data_path為測(cè)試圖片輸入路徑,db_path為底庫(kù)路徑,detect_model_path為檢測(cè)模型的輸入路徑,recognize_model_path為識(shí)別模型的輸入路徑

訓(xùn)練過(guò)程

華為云ModelArts有訓(xùn)練作業(yè)的功能,可以用來(lái)作模型訓(xùn)練以及對(duì)模型訓(xùn)練的參數(shù)和版本進(jìn)行管理。這個(gè)功能對(duì)于多版本迭代開(kāi)發(fā)的開(kāi)發(fā)者有一定的幫助。訓(xùn)練作業(yè)中有預(yù)置的一些鏡像和算法,當(dāng)前對(duì)于常用的框架均有預(yù)置鏡像(包括Caffe, MXNet, Pytorch, TensorFlow )和華為自己的昇騰芯片的引擎鏡像(Ascend-Powered-Engine)。

本文我們會(huì)基于ModelArts的自定義鏡像特性,上傳自己在本機(jī)調(diào)試完畢的完整鏡像,利用華為云的GPU資源訓(xùn)練模型。

我們是想在華為云上的ModelArts基于網(wǎng)站上常見(jiàn)的明星的數(shù)據(jù)訓(xùn)練完成一個(gè)人臉識(shí)別模型。在這個(gè)過(guò)程中,由于人臉識(shí)別網(wǎng)絡(luò)是工程師自己設(shè)計(jì)的網(wǎng)絡(luò)結(jié)構(gòu),所以需要通過(guò)自定義鏡像進(jìn)行上傳。所以整個(gè)人臉訓(xùn)練的過(guò)程分為以下九步:

  1. 構(gòu)建本地Docker環(huán)境
  2. 從華為云下載基礎(chǔ)鏡像
  3. 根據(jù)自己需求構(gòu)建自定義鏡像環(huán)境
  4. 導(dǎo)入訓(xùn)練數(shù)據(jù)到自定義鏡像
  5. 導(dǎo)入人臉識(shí)別底庫(kù)到自定義鏡像
  6. 導(dǎo)入預(yù)訓(xùn)練模型到自定義鏡像
  7. 上傳自定義鏡像到SWR
  8. 使用華為云訓(xùn)練作業(yè)進(jìn)行訓(xùn)練
  9. 使用華為云進(jìn)行推理工作

構(gòu)建本地Docker環(huán)境

Docker環(huán)境可以在本地計(jì)算機(jī)進(jìn)行構(gòu)建,也可以在華為云上購(gòu)買(mǎi)一臺(tái)彈性云服務(wù)器進(jìn)行Docker環(huán)境構(gòu)建。全過(guò)程參考Docker官方的文檔進(jìn)行:

https://docs.docker.com/engine/install/binaries/#install-static-binaries

從華為云下載基礎(chǔ)鏡像

官網(wǎng)說(shuō)明網(wǎng)址:

https://support.huaweicloud.com/engineers-modelarts/modelarts_23_0085.html#modelarts_23_0085__section19397101102

我們訓(xùn)練需要使用到的是MXNet的環(huán)境,首先需要從華為云上下載相對(duì)應(yīng)的自定義鏡像的基礎(chǔ)鏡像。官網(wǎng)給出的下載命令如下:

在訓(xùn)練作業(yè)基礎(chǔ)鏡像的規(guī)范里,找到了這個(gè)命令的解釋。

https://support.huaweicloud.com/engineers-modelarts/modelarts_23_0217.html

根據(jù)我們的腳本要求,我使用的是cuda9的鏡像:

官方還給出了另一種方法,就是使用docker file的?;A(chǔ)鏡像的dockerfile也是在訓(xùn)練作業(yè)基礎(chǔ)鏡像的規(guī)范里找到的??梢詤⒖家幌碌膁ockerfile:

https://github.com/huaweicloud/ModelArts-Lab/tree/master/docs/custom_image/custom_base

根據(jù)自己需求構(gòu)建自定義鏡像環(huán)境

由于比較懶,所以還是沒(méi)有使用Dockerfile的方式自己構(gòu)建鏡像。我采用的是另一種方式!

因?yàn)槲覀兊男枨缶褪莄uda 9 還有一些相關(guān)的python依賴包,假設(shè)官方的鏡像提供的是cuda 9的,我們大可以在訓(xùn)練腳本中跟著這個(gè)教程加一個(gè)requirement.txt。簡(jiǎn)單高效快捷就能解決需求!?。∠旅媸墙坛虀~~

https://support.huaweicloud.com/modelarts_faq/modelarts_05_0063.html

上傳自定義鏡像到SWR

官網(wǎng)教程:

  • https://support.huaweicloud.com/engineers-modelarts/modelarts_23_0085.html#modelarts_23_0085__section19397101102
  • https://support.huaweicloud.com/usermanual-swr/swr_01_0011.html

上傳鏡像的頁(yè)面寫(xiě)著,文件解壓后不得超過(guò)2GB。但是官方提供的基礎(chǔ)鏡像就3.11GB,我們加上需要的預(yù)訓(xùn)練的模型后鏡像是5+GB,所以不能使用頁(yè)面進(jìn)行上傳的工作,必須使用客戶端。上傳鏡像首先要?jiǎng)?chuàng)建組織,

如果覺(jué)得產(chǎn)品文檔理解還是比較難,可以嘗試一下SWR頁(yè)面的pull/push鏡像體驗(yàn):

這里后面引導(dǎo)了客戶如何將本地鏡像推上云端,第一步是登陸倉(cāng)庫(kù):

第二步拉取鏡像,這個(gè)我們就用自己打的自定義鏡像代替,

第三步修改組織,使用根據(jù)產(chǎn)品文檔創(chuàng)建的組織名。在這一步需要將本地的一個(gè)鏡像重命名為云上識(shí)別的鏡像命。具體看下圖解釋:

第四步推送鏡像,

當(dāng)熟練掌握這四步技巧的時(shí)候,可以脫離這個(gè)教程,使用客戶端進(jìn)行上傳。使用客戶端登陸然后上傳??蛻舳说顷懣梢允褂蒙膳R時(shí)docker loging指令。這個(gè)頁(yè)面在”我的鏡像“-> ”客戶端上傳“->”生成臨時(shí)docker login指令“中:

在本地docker環(huán)境中,使用這個(gè)生成的臨時(shí)docker login指令登陸后,使用下面的命令進(jìn)行上傳鏡像:

使用華為云訓(xùn)練作業(yè)進(jìn)行訓(xùn)練

華為云ModelArts提供訓(xùn)練作業(yè)給用戶進(jìn)行模型訓(xùn)練。在訓(xùn)練作業(yè)中有預(yù)置鏡像和可以選擇自定義鏡像。預(yù)置的鏡像包含市面上大部分框架,沒(méi)有特殊要求的時(shí)候,使用這些框架的鏡像進(jìn)行訓(xùn)練也是很方便的。本次測(cè)試還是使用的自定義鏡像。

自定義鏡像中不僅需要在鏡像中進(jìn)行配置自己的環(huán)境,假如改變了訓(xùn)練作業(yè)啟動(dòng)的方式,還需要修改訓(xùn)練的啟動(dòng)腳本。從華為云ModelArts官網(wǎng)拉取下來(lái)的官方鏡像的/home/work/路徑下有一個(gè)啟動(dòng)腳本”run_train.sh”,自定義的啟動(dòng)腳本需要基于這個(gè)腳本進(jìn)行修改。主要是要注意
“dls_get_app”,這個(gè)是從OBS下載相關(guān)的命令。其他的部分根據(jù)自己的訓(xùn)練腳本進(jìn)行修改。

如果需要上傳訓(xùn)練結(jié)果或者模型到OBS,需要參考”dls_get_app”加”dls_upload_model”的命令。在我們這次訓(xùn)練中,上傳的腳本如下:

訓(xùn)練作業(yè)進(jìn)行調(diào)試的時(shí)候,當(dāng)前可以使用免費(fèi)提供的一小時(shí)V100。ModelArts的訓(xùn)練作業(yè)一個(gè)比較好的地方是方便了我們版本管理。版本中會(huì)記錄所有通過(guò)運(yùn)行參數(shù)傳入到訓(xùn)練腳本里的所有參數(shù),還可以使用版本對(duì)比進(jìn)行參數(shù)對(duì)比。還有個(gè)比較方便的地方是可以基于某一個(gè)版本進(jìn)行修改,減少了重新輸入所有參數(shù)這一步驟,比較方便調(diào)試。

在訓(xùn)練作業(yè)中訓(xùn)練完成后,還可以在ModelArts中進(jìn)行模型部署上線。

后記

目前針對(duì)人臉識(shí)別算法的優(yōu)化已經(jīng)到達(dá)一個(gè)瓶頸期,但是在技術(shù)層面針對(duì)人臉面部結(jié)構(gòu)的相似性、人臉的姿態(tài)、年齡變化、復(fù)雜環(huán)境的光照變化、人臉的飾物遮擋等還面臨這很多的問(wèn)題,因此基于多種算法技術(shù)的融合解決人臉識(shí)別中的各種問(wèn)題仍然在安防、互聯(lián)網(wǎng)中有著巨大的市場(chǎng)。另外,隨著人臉支付的逐漸完善,人臉識(shí)別系統(tǒng)也應(yīng)用于銀行、商場(chǎng)等等,因此人臉識(shí)別的安全問(wèn)題和防攻擊問(wèn)題也是一個(gè)亟待解決的問(wèn)題,例如活體檢測(cè)、3D面部識(shí)別等等。

最后,人臉識(shí)別作為目前深度學(xué)習(xí)中應(yīng)用比較成熟的項(xiàng)目,其發(fā)展還與深度學(xué)習(xí)本身技術(shù)發(fā)展息息相關(guān),目前在很多優(yōu)化上,深度學(xué)習(xí)最大的缺點(diǎn)是沒(méi)有相應(yīng)的數(shù)學(xué)理論支撐,優(yōu)化所提升的性能也很有限,因此對(duì)深度學(xué)習(xí)算法本身的研究也是未來(lái)的重點(diǎn)。

責(zé)任編輯:龐桂玉 來(lái)源: 今日頭條
相關(guān)推薦

2016-12-23 14:43:37

2021-10-18 14:55:17

人臉識(shí)別AI人工智能

2021-05-07 13:44:25

5G網(wǎng)絡(luò)技術(shù)

2018-01-11 15:43:41

人臉識(shí)別Google阿里

2020-11-18 09:54:31

人臉識(shí)別AI人工智能

2019-02-13 15:38:09

存儲(chǔ)虛擬化云計(jì)算

2020-03-31 14:40:24

HashMap源碼Java

2020-12-08 22:26:02

AI人工智能人臉識(shí)別

2016-08-18 00:21:12

網(wǎng)絡(luò)爬蟲(chóng)抓取網(wǎng)絡(luò)

2024-08-12 12:30:27

2020-07-07 09:57:24

人臉識(shí)別人工智能數(shù)據(jù)

2025-01-20 09:15:00

iOS 18.3蘋(píng)果iOS 18

2021-08-02 06:56:19

TypeScript編程語(yǔ)言編譯器

2024-11-26 18:05:02

2021-02-05 23:29:20

人工智能機(jī)器學(xué)習(xí)技術(shù)

2021-02-06 10:30:12

人工智能

2019-07-01 09:22:15

Linux操作系統(tǒng)硬件

2019-05-22 09:50:42

Python沙箱逃逸網(wǎng)絡(luò)攻擊

2018-05-31 20:49:50

Spark堆內(nèi)內(nèi)存優(yōu)化機(jī)制

2021-08-05 15:12:30

Anolis OS 國(guó)密生態(tài)國(guó)產(chǎn)化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)