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