新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 教程详解:用卷积神经网络检测脸部关键点(一)

教程详解:用卷积神经网络检测脸部关键点(一)

作者:时间:2018-08-03来源:网络收藏

这是一个手把手教你学习深度学校的教程。一步一步,我们将要尝试去解决Kaggle challenge中的脸部关键点的检测问题。

本文引用地址:http://www.eepw.com.cn/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

评论


相关推荐

技术专区

关闭