Linux部分:
配置 cuda 环境变量 export LD_LIBRARY_PATH=/usr/local/cuda/lib64:./build/lib:$LD_LIBRARY_PATH
查看当前环境变量:
echo $PATH
设置:
方法一:export PATH=PATH:/XXX 但是登出后就失效
方法二:修改~/.bashrc或~/.bash_profile或系统级别的/etc/profile
1. 在其中添加例如export PATH=/opt/ActivePython-2.7/bin:$PATH (cuda:export LD_LIBRARY_PATH=/usr/local/cuda/lib64:./build/lib:$LD_LIBRARY_PATH)
2. source .bashrc (Source命令也称为“点命令”,也就是一个点符号(.)。source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录)
1\ 重新编译 make clean 然后make , language——identify_real_data 重新重新编译即可
重新编译完 不需要配置cuda 环境变量,直接能够利用caffe
------------------------------------------------------------------------------------------
文件拷贝:
cp -Rf /home/user1/* /root/temp/
将 /home/user1目录下的所有东西拷到/root/temp/下而不拷贝user1目录本身。
即格式为:cp -Rf 原路径/ 目的路径/
选择性满足条件拷贝请参考:http://www.jb51.NET/LINUXjishu/65722.html
-----------------------------------------------------------------------------------------
2、 vnc 使用
关掉一个vnc vncserver -kill :4 kill :4之间有个空格
启动vnc vncserver :4
启动的时候同时调整vnc的 分辨率 vncserver -geometry 1280x1024
调整分辨率 需要先把原来的vnc kill 调,然后重新启动时候 调整
注意,远程桌面只能看到终端的话,可能是在配置文件里把界面关了。如果不注意把终端关掉的话,可以kill
掉这个窗口,然后重新打开一个vnc 即可。
远程桌面只能看到终端,设置桌面方式。修改完毕后须重新启动 VNCServer
VNCServer 的X 桌面默认为 twm, 这时连接进去只能看到终端界面,而看不到远程桌面界面。可修改 /root/.vnc/xstartup 文件,将其改为 GNOME 或 KDE 桌面:
GNOME:
[root @ test vnc-4_1_2-x86_linux] # vi /root/.vnc/xstartup
#!/bin/sh
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot –solid grey
vncconfig –iconic &
xterm –geometry 80x24+10+10 –ls –title “$VNCDESKTOP Desktop” &
gnome-session &
设置完之后,重新登录vnc出现,如下三行。
Accept clipboard from viewers
Send clipboard to viewers
Send primary selection to viewers的页面,所以还是必须要去掉这两行前面的#才能正常进入桌面
----------------------------------------------------------------------------------------
3 把 cuda 加入环境变量
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:./build/lib:$LD_LIBRARY_PATH
http://blog.csdn.Net/vbskj/article/details/17463735 参考博客,cuda 配置
----------------------------------------------------------------------------------------
4、 显卡使用情况
请用nvidia-smi命令查看GPU的使用情况。
尽量用闲置的GPU。
-----------------------------------------------------------------------------------------
5\ 查看cpu使用情况
输入 top
可以查看当前哪些用户,再用,分别占用cpu 多少, 是哪些命令占用比较多
今天启动一个高负载的进程。我用top命令监控系统。发现cpu的占用比例常常显示120%以上。
我的机器是24cpu的。
经过在网上搜索,发现top命令显示的是占用的cpu总数。
即8cpu时top下cpu利用率最大可以到达800%。
如果你的进程利用了多个cpu,那么top命令显示的是多个cpu占用率的总和。
所以top命令下查看到的cpu利用率是可能超过100%的。
------------------------------------------------------------------------------------------
6\ cat /proc/meminfo
内存使用率 查看 /proc/meminfo查看内存详细信息,也可以通过free 命令查看
--------------------------------------------------------------------------------------------------
6\ cat /proc/net/dev
网络利用率 通过查看文件/proc/net/dev 可以了解,centos系统的网络使用情况跟windows的网络情况类似
--------------------------------------------------------------------------------------------------
8/ Linux限制某些进程cpu占用率
使用apt-get更方便的安装
$ sudo apt-get update
$ sudo apt-get install cpulimit
或手动安装如下
# cd /tmp
# wget 'http://downloads.sourceforge.net/cpulimit/cpulimit-1.1.tar.gz'
# tar cpulimit-1.1.tar.gz
# cd cpulimit-1.1
# make
# cp cpulimit /usr/local/sbin/
# rm -rf cpulimit*
如何使用cpulimit?
限制firefox使用30% cpu利用率
# cpulimit -e firefox -l 30
限制进程号1313的程序使用30% cpu利用率
# cpulimit -p 1313 -l 30
根据进程名找出pid的方法
# ps aux | less
# ps aux | grep firefox
# pgrep -u vivek PHP-cgi
# pgrep lighttpd
可以使用绝对路径限制进程的cpu利用率
# cpulimit -P /opt/firefox/firebox -l 30
单核cpu和多核cpu
单核cpu的使用率范围为0%-100%,四核cpu的使用率范围为0%-400%.
相关工具
nice:以指定的优先级运行程序
renice: 调整以运行进程的优先级
适当调整其nice值: renice +10 `ps aux | awk '{ if ($3 > 0.8 && id -u $1 > 500) print $2}'
------------------------------------------------------------------------------------------------
查看谁访问服务器设置。
w 或者 who 查看登录的用户;
-------------------------------------------------------------------------
tee
在执行Linux命令时,我们既想把输出保存到文件中,又想在屏幕上看到输出内容,就可以使用tee命令
要注意的是:在使用管道线时,前一个命令的标准错误输出不会被tee读取。
另:把标准错误也被tee读取
ls 2>&1 | tee ls.txt 该文件夹内会自动保存ls 出来的内容到 ls.txt 中,
./build/tools/caffe train --solver=./workgooglenet-32-64/config/model-googlenet-solver.prototxt 2>&1 | tee workgooglenet-32-64/info.txt
caffe 中的使用实例。
----------------------------------------------------------------------------------------------------------
grep 'old' ls.txt ,查找ls.txt中是否有old 字符串
---------------------------------------------------------------------------------
putty 关掉后, 程序继续跑。
新建一个窗口 该干嘛干嘛
screen -S copy
cp -r xx xx
然后ctrl + a + d 脱离 上面的会在后台运行
几个小时后
screen -r
或者
screen -r copy
--------安装常用的命令-----------------------------------------------------------
apt-cache search # ——(package 搜索包) --------------------- 搜索所有的软件包,可以方便找到最新版本
apt-cache show #——(package 获取包的相关信息,如说明、大小、版本等)
sudo apt-get install # ——(package 安装包)----------------------------------- 根据查到的版本,可以
sudo apt-get install # —–(package - - reinstall 重新安装包)
sudo apt-get -f install # —–(强制安装?#”-f = –fix-missing”当是修复安装吧…)
sudo apt-get remove #—–(package 删除包)
---------------------------------------------------------------
从本服务器上访问另一个服务器 ssh zhangmeng@10.167.174.123 然后输入密码即可。
拷贝远程服务器192.168.1.112的目录/tmp/test到当前目录下。
[root@CentOS_Test_Server tmp]# scp -r root@192.168.1.112:/tmp/test ./
caffe部分
-------------加入环境变量,如果用户没加入到自己的环境变量,可以在这里设置--------------------
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:./build/lib:$LD_LIBRARY_PATH
1、----------------训练模型---------------------------------------------------------
# train a model
./build/tools/caffe train --solver=./work/config/solver.prototxt 2>&1 | tee work/info.txt
使用所有gpu
#!/usr/bin/env sh./build/tools/caffe train --solver=work/LeNet/lenet_solver.prototxt -gpu all 2>&1 | tee work/info.txt
2、----------------利用已有的模型,继续训练模型---------------------------------------------------------
# retrain a model
./build/tools/caffe train --solver=./work/config/solver.prototxt 2>&1 | tee work/info.txt
./build/tools/caffe train --solver=models/bvlc_reference_caffenet/solver.prototxt --snapshot=models/bvlc_reference_caffenet/caffenet_train_iter_10000.solverstate
3、----------------利用已有的模型,在自己的数据上继续训练模型---------------------------------------------
# retrain a model
caffe % ./build/tools/caffe train -solver models/finetune_flickr_style/solver.prototxt -weights models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel -gpu 0
参考官网:http://caffe.berkeleyvision.org/gathered/examples/finetune_flickr_style.html
http://nbviewer.ipython.org/github/BVLC/caffe/blob/master/examples/03-fine-tuning.ipynb 写Python脚本,分别测试两个网络,画出损失函数,得到对比结果
4、-----------------测试模型------------------------------------------------------------------------------------
# test a model
#./build/tools/caffe test --gpu 1 --iterations 5 --model ./work/config/model.prototxt --weights ./work/model/m__iter_3000.caffemodel
5、-----------------输入图像,利用训练好的模型,预测结果。---------------------------------------------
# test a model
#./build/tools/caffe test --gpu 1 --iterations 5 --model ./work/config/model.prototxt --weights ./work/model/m__iter_3000.caffemodel
/build/examples/cpp_classification/classification.bin \
models/bvlc_reference_caffenet/deploy.prototxt \
models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel \
data/ilsvrc12/imagenet_mean.binaryproto \
data/ilsvrc12/synset_words.txt \
examples/images/cat.jpg
The output should look like this:
---------- Prediction for examples/images/cat.jpg ---------- 0.3134 - "n02123045 tabby, tabby cat" 0.2380 - "n02123159 tiger cat" 0.1235 - "n02124075 Egyptian cat" 0.1003 - "n02119022 red fox, Vulpes vulpes" 0.0715 - "n02127052 lynx, catamount"
data/ilsvrc12/imagenet_mean.binaryproto 不需要这个的时候,改写examples/cpp_classification/classification.cpp 程序,把里面的该项去掉。重新编译即可。
6、-----------------获取 benchmark time------------------------------------------------------------
# get time benchmark
#./build/tools/caffe time --gpu=0 --model=work/config/model.prototxt 2>&1 | tee work/info.txt
7、-----------------提取特征------------------------------------------------------------
./build/tools/extract_features.bin models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel examples/_temp/imagenet_val.prototxt fc7 examples/_temp/features 10 lmdb
参考官网:http://caffe.berkeleyvision.org/gathered/examples/feature_extraction.html
8、------------------------由配置文件画网络结构图----------------
# sudo python python/draw_net.py examples/mnist/lenet_train_test.prototxt lenet.png --rankdir=BT
draw_net.py执行的时候带三个参数
第一个参数:网络模型的prototxt文件
第二个参数:保存的图片路径及名字
第二个参数:--rankdir=x , x 有四种选项,分别是LR, RL, TB, BT 。用来表示网络的方向,分别是从左到右,从右到左,从上到小,从下到上。默认为LR。
example2:
./python/draw_net.py \
./examples/siamese/mnist_siamese.prototxt \
./examples/siamese/mnist_siamese.png --rankdir=BT
sudo python python/draw_net.py workGooglenet/config/googlenet_model.prototxt googlenet_model.png --rankdir=BT
sudo python python/draw_net.py workgooglenet-32-64/config/googlenet_model.prototxt workgooglenet-32-64.png --rankdir=BT
python python/draw_net.py models/bvlc_googlenet/train_val.prototxt googlenet1.png --rankdir=BT
9、----------------------画损失函数和准确率图------------------------------------------------------
cd caffe-master/python 运行 Python plot-loss.py ,
这里是根据配置文件,重新训练一次,然后把迭代过程的值保留下来,最后画出来;
plot-loss.py 中,
solver = caffe.SGDSolver('examples/cifar10/cifar10_quick_solver.prototxt')
如果不需要绘制曲线,只需要训练出一个caffemodel, 直接调用solver.solve()就可以了。如果要绘制曲线,就需要把迭代过程中的值保存下来,因此不能直接调用solver.solve(), 需要迭代。在迭代过程中,每迭代200次测试一次
niter =4000 迭代的次数
test_interval = 200 每迭代200次测试一次
查看网络结构:
(1)利用caffe自带的Python,可以将*.prototxt保存为一张图片,
sudo python python/draw_net.py *.prototxt *.png --rankdir=BT(或者,TB,LR,RL)
(2)利用Netscope,可以生成网络结构,并带有详细信息,
http://ethereon.github.io/netscope/quickstart.html
http://ethereon.github.io/netscope/#/editor
随机初始化训练:
./build/tools/caffe train --solver=models/bvlc_reference_caffenet/solver.prototxt --gpu=-0,1
微调:
./build/tools/caffe train --solver=models/bvlc_reference_caffenet/solver.prototxt --weights=models/bvlc_reference_caffenet/caffenet_train_iter_10000.caffemodel--gpu=-0,1
从中断处继续训练:
./build/tools/caffe train --solver=models/bvlc_reference_caffenet/solver.prototxt --snapshot=models/bvlc_reference_caffenet/caffenet_train_iter_10000.solverstate
统计在验证集(validation set)上的得分:
./build/tools/caffe test --model= models/bvlc_reference_caffenet/caffenet_train_iter_10000.prototxt--weights= models/bvlc_reference_caffenet/caffenet_train_iter_10000.caffemodel--gpu=0 --iterations=10000
统计训练时间:
# 在 CPU 上, 10000iterations 训练 caffenet的时间
./build/tools/caffe time --model= models/bvlc_reference_caffenet/caffenet_train_test.prototxt--iterations=10000
# 在 GPU 上,默认的 50 iterations 训练 caffenet的时间
./build/tools/caffe time --model= models/bvlc_reference_caffenet/caffenet_train_test.prototxt--gpu=0
# 在第一块 GPU 上, 10000 iterations 训练已给定权值的网络结构的时间
./build/tools/caffe time --model= models/bvlc_reference_caffenet/caffenet_train_test.prototxt--weights= models/bvlc_reference_caffenet/caffenet_train_iter_10000.caffemodel--gpu=0 --iterations=10000
查询GPU显卡参数信息:
# 查询第一块 GPU
./build/tools/caffe device_query --gpu=0
输出训练log日志到txt:
(1)GLOG_logtostderr=0 GLOG_log_dir=./Log/ ./build/tools /caffe train --solver=./deepid_solver.prototxt
(2) ./build/tools/caffe train --solver=./deepid_solver.prototxt >&log.txt&
解析日志:
会在当前文件夹下生成一个.train文件和一个.test文件
./TOOLS/extra/parse_log.sh *.log
生成曲线图:
./tools/extra/plot_training_log.py.example 0 *.png *.log
Notes:
1. Supporting multiple logs.
2. Log file name must end with the lower-cased ".log".
Supported chart types:
0: Test accuracy vs. Iters
1: Test accuracy vs. Seconds
2: Test loss vs. Iters
3: Test loss vs. Seconds
4: Train learning rate vs. Iters
5: Train learning rate vs.Seconds
6: Train loss vs. Iters
7: Train loss vs. Seconds
计算训练数据均值:
# sudo build/tools/compute_image_mean examples/mnist/mnist_train_lmdbexamples/mnist/mean.binaryproto
生成训练数据的LMDB文件:
convert_imageset [FLAGS] ROOTFOLDER/ LISTFILE DB_NAME
FLAGS:
--gray: 是否以灰度图的方式打开图片。程序调用OpenCV库中的imread()函数来打开图片,默认为false
--shuffle: 是否随机打乱图片顺序。默认为false
--backend:需要转换成的db文件格式,可选为leveldb或lmdb,默认为lmdb
--resize_width/resize_height: 改变图片的大小。在运行中,要求所有图片的尺寸一致,因此需要改变图片大小。程序调用opencv库的resize()函数来对图片放大缩小,默认为0,不改变
--check_size: 检查所有的数据是否有相同的尺寸。默认为false,不检查
--encoded: 是否将原图片编码放入最终的数据中,默认为false
--encode_type: 与前一个参数对应,将图片编码为哪一个格式:‘png','jpg'......
ROOTFOLDER:
图片的绝对路径
LISTFILE:
图片txt文件,格式为.txt,内容为,图片 标签
DB_NAME:
保存的文件名
build/tools/convert_imageset --shuffle --resize_height=256 --resize_width=256 /home/xxx/caffe/examples/images/ ./train.txt ./img_train_lmdb
matlab写caffe程序注意事项:
由于matlab的长宽和c++中opencv的长宽正好相反,同时matlab中是rgb通道,opencv中是bgr通道,因此,程序需要做这么2个变换。这里给出2种处理方式,
(1)直接调用caffe接口,
im_data =caffe.io.load_image('./examples/images/cat.jpg');
(2)用matlab函数自己实现,
im_data = imread('./examples/images/cat.jpg');% read image
im_data = im_data(:, :, [3, 2, 1]); % 从 RGB 转换为 BGR
im_data = permute(im_data, [2, 1, 3]); % 改变 width 与 height 位置
im_data = single(im_data); % 转换为单精度
caffe模型转tensorflow工具:
https://github.com/ethereon/caffe-tensorflow
手动标注图像,生成VOC支持的XML文件工具: