人脸检测流程
人臉檢測(cè)流程圖如上圖所示,對(duì)于每一步做相關(guān)分析.,人臉檢測(cè)算法準(zhǔn)備使用訓(xùn)練集CASIA-WebFace數(shù)據(jù)集及簡(jiǎn)單介紹,測(cè)試集使用MegaFace數(shù)據(jù)集。
Face detection
目前最火的開源人臉檢測(cè)算法是Retinaface,所以為了得到比較好的人臉框準(zhǔn)備使用Retinaface算法做人臉檢測(cè),Retinaface關(guān)于Pytorch的實(shí)現(xiàn)可以點(diǎn)擊這個(gè)[鏈接]
(https://github.com/supernotman/RetinaFace_Pytorch),
這個(gè)作者寫的非常好,而且易于實(shí)現(xiàn),RetinaFace訓(xùn)練測(cè)試使用的數(shù)據(jù)集是wider-face,該算法在widerface挑戰(zhàn)賽中取得了the state of the art,Pytorch復(fù)現(xiàn)版本的算法訓(xùn)練使用的數(shù)據(jù)集也是widerface。然而原始的widerface數(shù)據(jù)集的標(biāo)注信息是沒有l(wèi)andmark的為了讓測(cè)試結(jié)果更加精準(zhǔn),RetinaFace作者自己標(biāo)注了人臉五點(diǎn)landmark。
這里有個(gè)值得注意的問題,在Retinaface訓(xùn)練的過程中,作者采用的數(shù)據(jù)增強(qiáng)是這樣的[1] (英文原話見頁底),意思是為了讓細(xì)小的人臉模塊可以更好的采集到,我們采用的方法是對(duì)原圖進(jìn)行隨機(jī)正方形切塊(邊長為短邊的0.3 ~ 1,在推理過程中代碼是直接將原圖resize為一個(gè)640*640的圖片也就是說得到的landmark是對(duì)應(yīng)resize后圖片的landmark
Face Alignment
CASIA-WebFace數(shù)據(jù)集有10k多個(gè)人臉I(yè)D,總共有0.5M的人臉頭像,這些頭像都經(jīng)過切割了,但是應(yīng)該是為了后面更好的提取特征,所以對(duì)人臉對(duì)齊做進(jìn)一步切割。
1.生成casia_landmark.txt文檔
將retinaface 模塊應(yīng)用到所有的CASIA-WebFace上就可得到對(duì)應(yīng)的五點(diǎn)landmark文檔,casia_landmark.txt
2.仿射變換
由于人臉定位得到的人臉框框出的人臉不一定是正的,(因?yàn)榕臄z的時(shí)候可能拍到的圖片頭像就是歪的),需要通過landmark來糾正人臉讓對(duì)應(yīng)的人臉是正的,這里定義了一個(gè)標(biāo)準(zhǔn)的五點(diǎn)landmark坐標(biāo),通過映射原來的landmark到新的landmark會(huì)得到一個(gè)33矩陣,通過這個(gè)矩陣對(duì)原圖像做放射變換并切割,得到對(duì)應(yīng)的人臉圖像,具體代碼,在網(wǎng)上找了一個(gè)還不錯(cuò)的,點(diǎn)這個(gè)鏈接,這里需要強(qiáng)調(diào)一下的是有些程序把人臉resize成11296的有些把人臉resize成112112的,這是因?yàn)閷?duì)于不同的網(wǎng)絡(luò)輸入不一樣的問題,在arcface中人臉resize成112112我們以這個(gè)作為標(biāo)準(zhǔn),標(biāo)準(zhǔn)的五點(diǎn)人臉關(guān)鍵點(diǎn)是對(duì)稱的(眼睛對(duì)稱,嘴角對(duì)稱,鼻尖在最中心),96 ->112只需將對(duì)應(yīng)橫坐標(biāo)平移八個(gè)像素點(diǎn)就行了。
3.檢測(cè)與對(duì)齊結(jié)合
這里其實(shí)就是將訓(xùn)練好的retinaface網(wǎng)絡(luò)推理一遍CASIA-WebFace數(shù)據(jù)集(該數(shù)據(jù)集照片大小都是250250的),將其放大到640640得到對(duì)應(yīng)的landmark。然后采用仿射變換及裁剪,把頭像裁剪下來,標(biāo)準(zhǔn)的人臉檢測(cè)數(shù)據(jù)集就做好了
(1):初始做檢測(cè)的時(shí)候發(fā)現(xiàn)平均10張圖片就有2張漏檢,很快意識(shí)到了問題,對(duì)RetinaFace來說他的訓(xùn)練集照片人臉都是比較小的照片,但是現(xiàn)在的CASIA數(shù)據(jù)集人臉都比較大,如果還是用640640進(jìn)行放大就會(huì)出現(xiàn)檢測(cè)不到的情況,因此直接使用250250的圖片做檢測(cè)就好了。
(2):CASIA數(shù)據(jù)集雖然每張圖片基本上對(duì)應(yīng)的是一個(gè)人,但是也有圖片是兩個(gè)人的,兩個(gè)人臉一張是ID的人臉,另一張其實(shí)是背景人臉,但是由于RetinaFace效果非常好,所以兩張人臉都檢測(cè)出來了,在這里我只取了比較大的人臉做這個(gè)人的ID小的人臉直接pass了,當(dāng)然有可能會(huì)出錯(cuò),我對(duì)于有多張人臉或者沒有人臉的情況都做了一下記錄,最后人工排查一下就好了。
(3):由于CASIA數(shù)據(jù)集有很多是黑白照片,我們需要使用cv2.cvtCOLOR函數(shù)將單通道圖片換成多通道圖片,實(shí)驗(yàn)證明,單通道圖片變成多通道圖片依然可以人臉框及l(fā)andmark依然可以檢測(cè)的很準(zhǔn)確
(4):在檢測(cè)過程中發(fā)現(xiàn)使用RetinaFace也會(huì)出現(xiàn)漏檢的情況,我將圖片尺寸從250250 縮小到160160,這樣左右有1600張漏檢的圖片一下子少了1000張,RetinaFace對(duì)尺度比較小的圖片檢測(cè)效果好一點(diǎn)。剩下的那些圖片就不做數(shù)據(jù)處理了,
(5):有些數(shù)據(jù)集照片又多張人臉這種情況下RetinaFace會(huì)得到多個(gè)bbox和landmark 這是沒辦法的,在這里選取圖片中面積最大的頭像作為目標(biāo)ID的頭像做對(duì)齊裁剪,
4.CASIA-WebFace數(shù)據(jù)集清洗
最終通過RetinaFace對(duì)CASIA-WebFace數(shù)據(jù)集做人臉檢測(cè)得到493875張尺度為112*112的圖片,大概比原數(shù)據(jù)集少了0.001左右,這是無關(guān)緊要的我覺得,但是這些數(shù)據(jù)有很多數(shù)據(jù)是有問題的,對(duì)于這些圖片做人工排查。清除的數(shù)據(jù)主要是(1)一張圖片有兩個(gè)人臉,(2)人臉圖片不屬于那個(gè)人的ID, (3)特別模糊的圖片 (4)角色化妝太夸張的圖片
[1]Since there are around 20% tiny faces in the WIDER FACE training set, we follow [68, 49] and randomly crop square patches from the original images and resize these patches into 640 × 640 to generate larger training faces. More speci?cally, square patches are cropped from the original image with a random size between [0.3, 1] of the short edge of the original image. For the faces on the crop boundary, we keep the overlapped part of the face box if its centre is within the crop patch. Besides random crop, we also augment training data by random horizontal ?ip with the probability of 0.5 and photo-metric colour distortion [68].
總結(jié)
- 上一篇: riak数据库php7,Riak (En
- 下一篇: 人脸检测研究最新进展