人臉檢測(cè)識(shí)別一直是圖像算法領(lǐng)域一個(gè)主流話題。
前年SeetaFace開(kāi)源了人臉識(shí)別引擎,一度成為熱門話題。
雖然后來(lái)SeetaFace又放出來(lái) 2.0版本,但是,我說(shuō)但是。。。
沒(méi)有訓(xùn)練代碼,想要自己訓(xùn)練一下模型那可就犯難了。
雖然可以閱讀源碼,從前向傳播的角度,反過(guò)來(lái)實(shí)現(xiàn)訓(xùn)練代碼,
但是誰(shuí)有那個(gè)閑功夫和時(shí)間,去折騰這個(gè)呢?
有的時(shí)候還是要站在巨人的肩膀上,你才能看得更遠(yuǎn)。
而SeetaFace不算巨人,只是當(dāng)年風(fēng)口上的豬罷了。
前年,為了做一個(gè)人臉項(xiàng)目,也是看遍了網(wǎng)上各種項(xiàng)目。
林林總總,各有優(yōu)劣。
不多做評(píng)價(jià),很多東西還是要具體實(shí)操,實(shí)戰(zhàn)才能見(jiàn)真知。
有一段時(shí)間,用SeetaFace的人臉檢測(cè)來(lái)做一些小的演示demo,
也花了一點(diǎn)小時(shí)間去優(yōu)化它的算法。
不過(guò)很明顯我只是把他當(dāng)成玩具看待。
畢竟不能自己訓(xùn)練模型,這是很大的詬病。
直到后來(lái)深度學(xué)習(xí)大放異彩,印象最深刻莫過(guò)于MTCNN。
Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Neural Networks
大合照下,人臉圈出來(lái)很準(zhǔn)確,壯觀了去,這是第一印象。
上圖,大家感受一下。
CNN的有三個(gè)網(wǎng)絡(luò)結(jié)構(gòu)。
Stage1: Proposal Net
Stage2: Refine Net
Stage3: Output Net
具體算法思路就不展開(kāi)了。
我對(duì)MTCNN感興趣的點(diǎn)在于,
MTCNN的思路可以拓展到各種物體檢測(cè)和識(shí)別方向。
也許唯一缺少的就是打標(biāo)好的數(shù)據(jù),
而標(biāo)注五個(gè)點(diǎn),足夠用于適配大多數(shù)物體了。
符合小而美的理念,這個(gè)是我比較推崇的。
所以MTCNN是一個(gè)很值得品味的算法。
github上也有不少M(fèi)TCNN的實(shí)現(xiàn)和資源。
基于mxnet基于caffe基于ncnn等等。。。
很明顯,mxnet和 caffe不符合小而美的理念。
果斷拋棄了。
ncnn有點(diǎn)肥大,不合我心。
所以,我動(dòng)了殺氣。。
移除NCNN與mtcnn無(wú)關(guān)的層,
梳理ncnn的一些邏輯代碼。
簡(jiǎn)單做了一些適配和優(yōu)化。
砍掉一些邊邊角角。
不依賴opencv等第三方庫(kù)。
編寫示例代碼完成后,還有不少工作要做,
不過(guò)第一步感覺(jué)已經(jīng)符合我的小小預(yù)期。
完整示例代碼:
#include "mtcnn.h"#include "browse.h"#define USE_SHELL_OPEN#ifndef nullptr#define nullptr 0#endif#if defined(_MSC_VER)#define _CRT_SECURE_NO_WARNINGS#include