天天看點

使用卷積神經網絡(CupCnn)訓練人臉檢測模型結果展示FaceDetector依賴交流

結果展示

最近嘗試做了下人臉檢測,先上兩張效果圖吧:

使用卷積神經網絡(CupCnn)訓練人臉檢測模型結果展示FaceDetector依賴交流
使用卷積神經網絡(CupCnn)訓練人臉檢測模型結果展示FaceDetector依賴交流

這已經是跳出來的效果比較好的圖檔了,表現的确是有點差。

我用了4000(19*19)多張人臉圖檔和8000(19*19)多張非人臉圖檔訓練出了這個卷積模型。這個資料量确實有點少,是以效果不太好也是可以了解的。主要還是分享做人臉檢測的經曆。但是,我還是相信隻要給我充分的資料,我也可以訓練出高品質的模型。

FaceDetector

源碼我已經上傳到Github了,感興趣的歡迎下載下傳,點贊的感謝萬分!!!!

位址:FaceDetector

和代碼一起上傳的,還有訓練使用的資料(face_detection.bin),它是一個二進制檔案,制作過程和讀取過程請參考前面一篇部落格:

自己制作機器學習訓練和測試使用的二進制資料集(C++)

當然,在FaceDetector項目中我用java重寫了讀取二進制檔案的部分代碼。

FaceDetector中使用的卷積神經網絡是我之前自己寫的CupCnn,請參考我之前的部落格:

java寫卷積神經網絡—CupCnn簡介

有了卷積神經網絡,有了資料,接下來做的事情和訓練mnist差不多了。

訓練完成後,建構圖像金字塔,然後掃描圖像金字塔,從中尋找人臉。

FaceDetector工程圖如下:

使用卷積神經網絡(CupCnn)訓練人臉檢測模型結果展示FaceDetector依賴交流

cupcnn包下是卷積神經網絡的實作。

face包下是人臉檢測的實作。

BinaryDatasetReader.java —-從二進制資料集中讀取圖檔和标簽

FaceInfo.java —– 記錄人臉的位置,是人臉的機率

FaceNetwork.java —- 搭建人臉檢測神經網絡

ImageGui.java —– 顯示圖檔

ScanImagePyramid —– 建構圖像金字塔并在金字塔上搜尋人臉

FaceDetectorTest —– main函數入口。

public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
        //if you want train nework,Uncomment the following code
        //trainFaceNetwork();

        //if you want test,Uncomment the following code
        testFaceDetector();
    }
           

如果想訓練,就調用trainFaceNetwork()方法,如果要測試,請調用testFaceDetector();

依賴

為了友善讀取圖檔,建構圖像金字塔,項目使用opencv庫。如果您對配置Opencv不熟悉,請參考下面的步驟:

下面内容引用自 OpenCV For Java環境搭建與功能示範一文

使用卷積神經網絡(CupCnn)訓練人臉檢測模型結果展示FaceDetector依賴交流

交流

如果在使用這個FaceDetector的過程中遇到問題,或者對機器學習感興趣,歡迎加入下面的QQ群讨論交流:

機器學習 QQ交流群:704153141

繼續閱讀