新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 教程詳解:用卷積神經網絡檢測臉部關鍵點(一)

        教程詳解:用卷積神經網絡檢測臉部關鍵點(一)

        作者: 時間:2018-08-03 來源:網絡 收藏

        這是一個手把手教你學習深度學校的教程。一步一步,我們將要嘗試去解決Kaggle challenge中的臉部關鍵點的檢測問題。

        本文引用地址:http://www.104case.com/article/201808/385311.htm

        這份教程介紹了Lasagne,一個比較新的基于Python和Theano的神經庫。我們將用Lasagne去模擬一系列的神經結構,討論一下數據增強(data augmentaTIon)、流失(dropout)、結合動量(momentum)和預先訓練(pre-training)。這里有很多方法可以將我們的結果改善不少。

        我假設諸位已經知道了一些關于神經的只是。所以我們就不介紹神經網絡的背景知識了。這里也提供一些好的介紹神經網絡的書籍和視頻,如Neural Networks and Deep Learning online book。Alec Radford的演講Deep Learning with Python’s Theano library也是一個快速介紹的好例子。以及ConvNetJS Browser Demos

        預先準備

        如果你只需要看懂的話,則不需要自己寫一個代碼然后去執行。這里提供一些安裝的教程給那些配置好CUDA的并且想要運行試驗的那些人。

        我假設你們已經安裝了CUDA toolkit, Python 2.7.x, numpy, pandas, matplotlib, 和scikit-learn。安裝剩下的依賴包,比如Lasagne和Theano都可以運行下面的指令

        pip install -r https://raw.githubusercontent.com/dnouri/kfkd-tutorial/master/requiremen...

        注意,為了簡潔起見,我沒有在命令中創建虛擬環境,但是你需要的。

        譯者:我是在windows10上面配置這個環境的,安裝anaconda(再用此環境安裝依賴包)、VS2013(不推薦2015)、CUDA工具即可。

        如果一切都順利的話,你將會在你的虛擬環境下的src/lasagne/examples/目錄中找到mnist.py并運行MNIST例子。這是一個對于神經網絡的“Hello world”程序。數據中有十個分類,分別是0~9的數字,輸入時28TImes;28的手寫數字圖片。

        cd src/lasagne/examples/

        python mnist.py

        此命令將在三十秒左右后開始打印輸出。 這需要一段時間的原因是,Lasagne使用Theano做重型起重; Theano反過來是一個“優化元編程代碼生成面向數組的優化Python數學編譯器”,它將生成需要在訓練發生前編譯的C代碼。 幸運的是,我們組需要在第一次運行時支付這個開銷的價格。

        譯者:如果沒有配置,用的是的話,應該是不用這么久的編譯時間,但是執行時間有一些長。如果用GPU,在第一次跑一些程序的時候,會有提示正在編譯的內容。

        當訓練開始的時候,你會看到

        Epoch 1 of 500

        training loss: 1.352731

        validaTIon loss: 0.466565

        validaTIon accuracy: 87.70 %

        Epoch 2 of 500

        training loss: 0.591704

        validation loss: 0.326680

        validation accuracy: 90.64 %

        Epoch 3 of 500

        training loss: 0.464022

        validation loss: 0.275699

        validation accuracy: 91.98 %

        如果你讓訓練運行足夠長,你會注意到,在大約75代之后,它將達到大約98%的測試精度。

        如果你用的是GPU,你想要讓Theano去使用它,你要在用戶的主文件夾下面創建一個.theanorc文件。你需要根據自己安裝環境以及自己操作系統的配置使用不同的配置信息:

        [global]

        floatX = float32

        device = gpu0

        [lib]

        cnmem = 1

        譯者:這是我的配置文件。

        [cuba]

        root = C:Program FilesNVIDIA GPU Computing ToolkitCUDAv8.0

        [global]

        openmp = False

        device = gpu

        floatX = float32

        allow_input_downcast = True

        [nvcc]

        fastmath = True

        flags = -IC:Anaconda2libs

        compiler_bindir = C:Program Files (x86)Microsoft Visual Studio 12.0VCbin

        base_compiledir = path_to_a_directory_without_such_characters

        [blas]

        ldflags =

        [gcc]

        cxxflags = -IC:Anaconda2MinGW

        數據

        面部關鍵點檢測的訓練數據集包括7049(96x96)個灰度圖像。 對于每個圖像,我們應該學習找到15個關鍵點的正確位置(x和y坐標),例如

        left_eye_center

        right_eye_outer_corner

        mouth_center_bottom_lip

        一個臉部標記出三個關鍵點的例子。

        數據集的一個有趣的變化是,對于一些關鍵點,我們只有大約2,000個標簽,而其他關鍵點有7,000多個標簽可用于訓練。

        讓我們編寫一些Python代碼,從所提供的CSV文件加載數據。 我們將編寫一個可以加載訓練和測試數據的函數。 這兩個數據集的區別在于測試數據不包含目標值; 這是預測這些問題的目標。 這里是我們的load()函數:

        # file kfkd.py

        import os

        import numpy as np

        from pandas.io.parsers import read_csv

        from sklearn.utils import shuffle

        FTRAIN = '~/data/kaggle-facial-keypoint-detection/training.csv'

        FTEST = '~/data/kaggle-facial-keypoint-detection/test.csv'

        def load(test=False, cols=None):

        Loads data from FTEST if *test* is True, otherwise from FTRAIN.

        Pass a list of *cols* if you're only interested in a subset of the

        target columns.

        fname = FTEST if test else FTRAIN

        df = read_csv(os.path.expanduser(fname)) # load pandas dataframe

        # The Image column has pixel values separated by space; convert

        # the values to numpy arrays:

        df['Image'] = df['Image'].apply(lambda im: np.fromstring(im, sep=' '))

        if cols: # get a subset of columns

        df = df[list(cols) + ['Image']]

        print(df.count()) # prints the number of values for each column

        df = df.dropna() # drop all rows that have missing values in them


        上一頁 1 2 3 下一頁

        關鍵詞: 卷積神經 網絡 GPU CPU

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 克拉玛依市| 瑞金市| 鲜城| 樟树市| 台湾省| 武义县| 梁平县| 杨浦区| 青河县| 象山县| 上杭县| 青海省| 陈巴尔虎旗| 澄迈县| 斗六市| 嵊州市| 泰顺县| 南康市| 铜陵市| 枣庄市| 光泽县| 桦南县| 双辽市| 乌苏市| 天等县| 固始县| 勃利县| 翁牛特旗| 漾濞| 祁阳县| 遵化市| 遂溪县| 广宗县| 大竹县| 拜泉县| 河南省| 来宾市| 阿图什市| 依兰县| 五莲县| 威远县|