您好,登錄后才能下訂單哦!
機(jī)器之心報(bào)道
參與:Racoon X
這個(gè)僅 7M 大小的人臉識(shí)別模型幾乎識(shí)別出了世界最大自拍照中的所有人像!
項(xiàng)目簡介
之前機(jī)器之心報(bào)道過一個(gè)跨平臺(tái)人臉識(shí)別項(xiàng)目,在 CPU 上就能輕松跑出 1000FPS。這次介紹的項(xiàng)目也是一個(gè)輕量級(jí)人臉識(shí)別項(xiàng)目。不同的是,該項(xiàng)目在保持較小參數(shù)量的前提下,識(shí)別精度要高很多,并且只需要 OpenCV 和 PyTorch 就能運(yùn)行。
DBFace 是一個(gè)輕量級(jí)的實(shí)時(shí)人臉識(shí)別方法,其有著更快的識(shí)別速度與更高的精度。下圖展示了多種人臉檢測方法在 WiderFace 數(shù)據(jù)集上的測試效果??梢钥吹讲粌H DBFace 模型的大小最小,其在 Easy、medium、Hard 三個(gè)測試任務(wù)中均取得了最高的識(shí)別精度。
項(xiàng)目地址:https://github.com/dlunion/DBFace
WiderFace 是一個(gè)關(guān)于人臉檢測的基準(zhǔn)跑分?jǐn)?shù)據(jù)集,其中包含 32,203 張圖片以及在各方面劇烈的 393,703 張人臉,數(shù)據(jù)集具有從簡單到困難等不同難度的任務(wù)。下圖是改數(shù)據(jù)集中一些樣本的展示,可以看到,要想準(zhǔn)確地識(shí)別出圖中所有人臉還是很有挑戰(zhàn)的。DBFace 在該數(shù)據(jù)集的不同任務(wù)上分別取得 0.925、0.920、0.847 的準(zhǔn)確率,實(shí)屬不易。
有關(guān) WiderFace 的詳細(xì)介紹請讀者移步其官網(wǎng):
http://shuoyang1213.me/WIDERFACE/
效果展示
下圖展示了不同人臉識(shí)別方法在 WiderFace 數(shù)據(jù)集上的 P-R 曲線。P-R 曲線可以較直觀地展示二分類器的 Precision 和 Recall。當(dāng)需要對(duì)不同算法進(jìn)行比較時(shí),若某個(gè)二分類器的 P-R 曲線被另一個(gè)二分類器的 P-R 曲線完全包住,即表明后者的性能優(yōu)于前者。從圖中可以看到,DBFace 包圍的面積在三個(gè)任務(wù)中均相對(duì)較大。
當(dāng)閾值設(shè)置為 0.2 時(shí),DBFace 對(duì)這張世界最大的自拍照識(shí)別效果如下圖所示:
可以看到,DBFace 的識(shí)別準(zhǔn)確率非常高,圖中很多人臉甚至放大后單憑肉眼也很難分辨,DBFace 卻仍然能夠識(shí)別出來,并且模型大小僅 7M,完全能夠在邊緣設(shè)備上實(shí)時(shí)運(yùn)行。于是,機(jī)器之心也上手測試了一番。
項(xiàng)目實(shí)測
項(xiàng)目作者提供的代碼示例中包含對(duì)靜態(tài)圖片的識(shí)別,同時(shí)也有一個(gè)調(diào)用電腦攝像頭的 GUI。值得注意的是,該項(xiàng)目并不需要太多依賴項(xiàng),只要有 PyTorch、Numpy 和 OpenCV 即可運(yùn)行。由于以上依賴環(huán)境都是非常常用的擴(kuò)展庫,網(wǎng)上有大量相應(yīng)安裝教程,這里就略過其安裝步驟。
在 main.py 中,image_demo() 與 camera_demo() 分別對(duì)應(yīng)靜態(tài)圖片識(shí)別與調(diào)用攝像頭進(jìn)行識(shí)別。靜態(tài)圖片識(shí)別代碼為:
def image_demo():
dbface = DBFace()
dbface.eval()
if HAS_CUDA:
dbface.cuda()
dbface.load("model/dbface.pth")
detect_image(dbface, "datas/selfie.jpg")
以上代碼將會(huì)讀取訓(xùn)練后的模型,對(duì)圖片 datas/selfie.jpg 進(jìn)行識(shí)別,并將結(jié)果保存到 detect_result/selfie.draw.jpg。
讓我們來看一下識(shí)別效果:
從上圖可以看到,即使在室內(nèi)燈光顏色、明暗差別較大的環(huán)境下,DBFace 也識(shí)別出了圖中幾乎所有的人,甚至是中間那個(gè)一邊畫彩虹,一邊指向閃耀燈球戴頭盔的人也難逃其「魔掌」。當(dāng)然,由于這里設(shè)置的檢測閾值較低,存在一些誤分類的現(xiàn)象。圖中一些人的手和右上角的燈球就被誤識(shí)別為了人臉。適當(dāng)調(diào)高閾值即可消除此現(xiàn)象。
調(diào)用電腦攝像頭檢測的代碼為:
def camera_demo():
dbface = DBFace()
dbface.eval()
if HAS_CUDA:
dbface.cuda()
dbface.load("model/dbface.pth")
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
ok, frame = cap.read()
while ok:
objs = detect(dbface, frame)
for obj in objs:
common.drawbbox(frame, obj)
cv2.imshow("demo DBFace", frame)
key = cv2.waitKey(1) & 0xFF
if key == ord('q'):
break
ok, frame = cap.read()
運(yùn)行以上代碼將會(huì)生成一個(gè) 640x480 的 GUI 界面,調(diào)用攝像頭實(shí)時(shí)進(jìn)行人臉檢測。
感興趣的小伙伴趕快將本項(xiàng)目 git clone 到本地測試一下吧!
https://www.toutiao.com/i6813939976317698567/
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。