ubuntu facenet环境搭建

禁止内核自动更新

1.uname -a #查看内核信息
2.sudo dpkg --get-selections | grep linux-image #查看所有已安装及未安装内核的信息
3.sudo apt remove linux-image-4.15.0-39-generic #删除当前内核 ,也可以不删除
4.sudo apt-mark hold linux-image-4.15.0-38-generic #禁止内核更新,需要时间检验

安装python3.6

sudo add-apt-repository ppa:jonathonf/python-3.6
sudo apt-get update
sudo apt-get install python3.6
sudo apt-get install python3.6-dev ()必须安装,否则facenet依赖库安装失败
调整python3.6优先级
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 2
更改默认值,python默认为Python2,现在修改为Python3
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100
udo update-alternatives --install /usr/bin/python python /usr/bin/python3 150
注意:优先级不能乱调整,会导致一些功能用不了。比如终端打不开,语言界面打不开等。我们使用facenet的时候切换成3.6的虚拟环境,安装也在虚拟环境进行
终端打不开解决方法:
cd /usr/lib/python3/dist-packages/gi/
sudo cp _gi.cpython-35m-x86_64-linux-gnu.so _gi.cpython-36m-x86_64-linux-gnu.so
sudo cp _gi_cairo.cpython-35m-x86_64-linux-gnu.so _gi_cairo.cpython-36m-x86_64-linux-gnu.so
但是语言界面打不开的解决方法我还没找到,时间关系不找了,搭建虚拟环境就不用一直切换了

安装pip

由于我们ubuntu中设置了默认的是python3.5,所以需要安装python3-pip
sudo apt-get install python3-pip
升级pip:
sudo pip3 install --upgrade pip

安装virtualenv虚拟环境

我们如果使用python3.6,直接用1中的命令转换会导致系统出现问题(如打不开终端),所以我们需要搭建一个虚拟的python3.6的环境,我们使用virtualenv工具,命令如下:
sudo apt-get install virtualenv
virtualenv --system-site-packages -p python3.6 ./venv_python3.6/
激活:
source venv_python3.6/bin/activate
退出:
Deactivate
拷贝:
虚拟环境可以使用tar命令进行打包拷贝,非常方便,但是需要修改activate文件的环境变量:1 VIRTUAL_ENV="/home/venv",改成虚拟环境的目录
2 bin下的执行脚本,pip等,第一行的#!路径也要改一下。否则会提示找不到python

删除:
直接rm
注意:如果tensorflow使用python3.5而系统的版本也正好是就不需要启用虚拟环境了。但是要使用sudo安装

安装facenet

facenet最好在虚拟环境下进行,否则要使用sudo命令,安装tensorflow以及依赖库的时候需要增加/usr/lib/python目录的一些配置,如果指定了虚拟环境,就把依赖文件安装在了虚拟的python环境,以免影响系统
1).下载:git clone https://github.com/davidsandberg/facenet.git
cd facenet
安装facenet依赖库:
pip install -r requirements.txt (我们需要修改依赖库的版本,具体支持的版本信息如下)
版本:
(tensorflow 1.13.1
Numpy 1.16.2
Scipy 1.2.1)
注意:
(1)必须安装python3.x-dev,否则依赖库运行报错
(2)前面的依赖库安装了tensorflow,版本1.7,为了方便,我这里用的是python3.6的虚拟环境安装的tensorflow
单独安装tensorflow的指令:
安装(最新版):
pip install tensorflow
安装指定版本:
pip install tensorflow==1.7
pip install --upgrade https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.7.0-py3-none-any.whl
升级
install --upgrade tensorflow
卸载:
pip uninstall tensorflow
注意:facenet推荐安装的tensorflow是1.7版本,但是cpu的训练时间太长了,我必须使用gpu版,而我用的gpu是RTX2080,不能安装cuda9.0+cudnn7.2的组合,只能使用cuda10.0+cudnn7.4.1.5,所以使用了tensowflow1.13.1的版本,经过测试可以使用

训练自己的模型

亚洲人人脸库:_CASIA-FaceV5
完成了cpu版本的tensorflow==1.7安装,便可以进行模型训练了,训练指令如下:

训练指令

现在还不清楚两种训练算法的差别train_tripletlos.py和train_softmax.py
python src/train_tripletloss.py --data_dir ~/facenet/data/lfw_data/lfw_160/ --logs_base_dir ./logs/ --models_base_dir ./models_cslead/ --image_size 160 --model_def models.inception_resnet_v1 --optimizer RMSPROP --learning_rate 0.01 --weight_decay 1e-4 --gpu_memory_fraction 1.0 --max_nrof_epochs 500 --embedding_size 512

python src/train_tripletloss.py --data_dir ~/facenet/data/lfw_data/lfw_160/ --logs_base_dir ./logs/ --models_base_dir ./models_cslead/ --image_size 160 --model_def models.inception_resnet_v2 --optimizer RMSPROP --learning_rate 0.01 --weight_decay 1e-4 --gpu_memory_fraction 1.0 --max_nrof_epochs 500 --embedding_size 512 --batch_size 60

其他指令(还没经过验证的指令):
python src/train_tripletloss.py --logs_base_dir ~/logs/facenet/ --models_base_dir ~/models/facenet/ --data_dir ~/datasets/casia/casia_maxpy_mtcnnalign_182_160 --image_size 160 --model_def models.inception_resnet_v1 --lfw_dir ~/datasets/lfw/lfw_mtcnnalign_160 --optimizer RMSPROP --learning_rate 0.01 --weight_decay 1e-4 --max_nrof_epochs 500
另一个网络指令(可以继续训练模型):
python train_tripletloss.py --logs_base_dir ~/logs/facenet/ --models_base_dir ~/models/facenet/ --data_dir ~/data/vggface2/train_160 --image_size 160 --model_def models.inception_resnet_v1 --lfw_dir ~/data/lfw --lfw_pairs ~/data/pairs.txt --optimizer RMSPROP --learning_rate 0.01 --weight_decay 1e-4 --max_nrof_epochs 500 --people_per_batch 6 --pretrained_model /home/Github36/facenet/src/20180402-114759/model-20180402-114759.ckpt-275

参数说明

–embedding_size 512 将人脸图像映射成512维度的特征向量,以该向量为特征,采用knn或者svm等及其学习方法实现人脸识别
–batch_size, 默认90,意思是从数据集中随机抽取90个样本进行学习,把90个样本同时输入内存(如果使用gpu,会占用gpu现存)这个参数不能乱写,默认90,使用inception_resnet_v1网络训练,显卡内存够用,但使用v2网络时,8g显卡一次性读取90个样本会导致内存溢出,需要减少,最好是20的倍数,因为我调整成50也会报错。
–epoch_size,默认1000,意思是把上面的90个样本轮询学习1000次
–max_nrof_epochs,默认500,意思是,随机90个样本轮1000次,这样的操作反复进行500次,
关于epoch_size batch_size iterations,下面的文档有详细的解释:
https://blog.csdn.net/maweifei/article/details/80722097

–epoch_size 如果参数–lfw_dir设置为指向LFW数据集的基本目录,则每1000个批次在LFW上评估一次模型。有关如何评估LFW上现有模型的信息,请参阅LFW上的Validate-on-LFW页面。如果在训练期间不需要对LFW进行评估,则可以将lfw_dir参数留空。但是,请注意,此处使用的LFW数据集应该与训练数据集的对齐方式一致。

训练视图

启动视图
tensorboard --logdir=logs/20190531-113339/
启动之后在浏览器中查看

安装gpu版的tensorflow

使用cpu版tensorflow训练模型,速度极其缓慢,每个batch训练一个epoch_size1000需要8s,使用RTX2080提升后,每个batch跑完一个epoch_size1000只需要0.2s,速度提升了40倍。

卸载tensorflow

pip uninstall tensorflow

卸载ubuntu显卡驱动

如果安错了或者版本不对,使用下面命令卸载驱动
sudo /usr/bin/nvidia-uninstall
sudo apt-get purge nvidia*
sudo apt-get autoremove nvidia-cuda-toolkit

禁用nouveau

创建blacklist-nouveau.conf
sudo vim /etc/modprobe.d/blacklist-nouveau.conf
内容写上
blacklist nouveau
options nouveau modeset=0
更新
sudo update-initramfs -u

结束X-window服务

sudo service lightdm stop
按Ctrl+Alt+F4进入tty4控制台,或者使用ssh进入控制台

安装ubuntu显卡驱动

方法一:
官网下载ubuntu对应的显卡驱动.run文件
sudo sh ./NVIDIA*.run
目前我使用的rtx2080驱动,官网对应的ubuntu显卡驱动,使用此方法安装后会自带cuda10.2,而且还不能被替换,所以我们就不能用此方法安装了
方法二:
此方法来自tensorflow官网,官网中有cuda9.0和cuda10.0的安装方法,并且10.0还带有显卡驱动的安装链接,但是也许是我的显卡太新了,cuda9.0可以安装发成功,但是找不到对应的显卡驱动,导致tensorflow1.7-gpu不能使用,所以我安装了cuda10.0和cudnn7.4并使用最新的tensorflow1.13.1,cuda10.0官方安装链接:
https://tensorflow.google.cn/install/gpu
其中关键的一步:sudo apt-get install --no-install-recommends nvidia-driver-410,
cuda10.0中先通过这一步安装了显卡驱动410,但是在安装cuda10.0的时候,显卡驱动又变成了418.67,安装完后需要重启电脑,显卡驱动便更新成功。
我在安装cuda9.0的时候,尝试了很多方法,都以失败告终,我猜测是RTX2080显卡太新了,不能支持cuda9.0对应的显卡驱动,不过还有最后一个方法没有尝试,就是按照cuda10.0的方法先安装显卡的410的驱动,再安装cuda9.0的驱动,按道理说cuda9.0驱动会自带显卡驱动,然后像10.0一样更新它,重启之后替换生效。先执行sudo apt-get install --no-install-recommends nvidia-driver-410,再安装cuda9.0,有机会可以尝试一下。

安装tensorflow-gpu==1.13.1

pip install tensorflow-gpu
或者
pip install tensorflow-gpu==1.13.1

注意

(1)安装完成后需要添加cuda的环境变量
vim .bashrc
export PATH=$PATH:/usr/local/cuda/bin
(2)facenet推荐的tensorflow版本是1.7,但是由于1.7不能支持cuda10.0,所以我使用最新的tensorflow1.13.0,开始我担心不能兼容,但是实验证明可以使用,只是有一些接口在1.13.0中不推荐使用,即将停止维护。也就是说facenet支持tensorflow==1.13这个版本。

评估模型

python src/validate_on_lfw.py data/lfw_data/lfw_160/ ./models_cslead/20190528-141841/
但是有个问题。这个模型是通过tensorflow-gpu==1.13.1这个版本训练的,但是当使用这个版本的评估模型时,cudnn会报错CUDNN_STATUS_INTERNAL_ERROR,一开始我以为是cudnn安装的有问题,但是我使用cudnn官方的sample可以正常运行,找了一些资料,应该是RTX2080显卡太新了导致的,下面这个帖子有解决方法,但是会修改facenet的相关.py文件,我就不用了。
https://github.com/tensorflow/tensorflow/issues/24496
我的解决方法,卸载gpu版本的tensorflow,安装1.13.1cpu版本进行模型评估。也就是说,训练使用gpu版本,评估使用cpu版本。
为了方便,可以建立两个虚拟环境,一个安装tensorflow-gpu版,一个安装cpu版本,gpu用来训练,cpu版用来评估。

判断tensorflow是cpu还是gpu

python -c “import tensorflow as tf; tf.enable_eager_execution();print(tf.reduce_sum(tf.random_normal([1000, 1000])))”

评估指标accuracy和validation区别

accuracy =(判断正确的 同一个人+ 判断正确的 不同的人) / 所有数据
validation rate = 判断正确的同一个人的数量 / 所有的同一个人 的数量
这个帖子很好,说的很详细:
https://blog.csdn.net/anthea_luo/article/details/80258856

猜你喜欢

转载自blog.csdn.net/kakasxin/article/details/91038601
今日推荐