caffe常用命令

caffe命令行的常用命令:

1、训练:

GLOG_logtostderr=0 GLOG_log_dir=/home/yly/ERFNet/weights/snapshots_encoder_finetune/ /home/yly/ENet/caffe-enet/build/tools/caffe train -solver /home/yly/ERFNet/prototxts/erfnet_encoder_solver.prototxt
  • 其中命令GLOG_logtostderr=0用于存储日志, GLOG_log_dir指定自己想要存储的文件夹路径(必须存在)。解析日志的方法在下文Section6中讲解;如果不想打印出训练日志,可以省略。
  • 接下来是自己安装的caffe路径下的/build/tools/caffe路径,根据指定的路径不同,可以调用不同版本的caffe(BVLC原版)或其他人的改进版,示例代码中使用的是ENet改进的caffe版本(增加了读取图像的DenseImageData层,可以为读入的label设置label_divide_factor,用于encoder部分的训练)。
  • -solver后面指定的是自己的solver文件。solver文件里写的是训练的超参数、调用的prototxt的网络配置文件、存储训练权重caffemodel的路径。读取的数据路径是写在prototxt的网络配置文件中的。

2、finetune模型微调

GLOG_logtostderr=0 GLOG_log_dir=/home/yly/ERFNet/weights/snapshots_decoder_finetune/ /home/yly/ENet/caffe-enet/build/tools/caffe train -solver /home/yly/ERFNet/prototxts/erfnet_decoder_solver_finetune.prototxt -weights /home/yly/ERFNet/weights/snapshots_decoder/erfnet_iter_3000.caffemodel 

前面的命令和训练的一致,在后面添加-weights,指定需要finetune的初始化权重。

3、继续被打断的训练 

GLOG_logtostderr=0 GLOG_log_dir=/home/yly/ERFNet/weights/snapshots_decoder_finetune/ /home/yly/ENet/caffe-enet/build/tools/caffe train -solver /home/yly/ERFNet/prototxts/erfnet_decoder_solver_finetune.prototxt -snapshot /home/yly/ERFNet/weights/snapshots_decoder/erfnet_iter_3000.solverstate

由于训练时间长,中间可能由于各种原因需要中断训练,系统会保存solverstate文件,以便继续之前的训练。利用-snapshot载入之前训练的状态。

4、测量准确度

/home/yly/ENet/caffe-enet/build/tools/caffe test -model /home/yly/ERFNet/prototxts/erfnet_decoder_train_val.prototxt -weights /home/yly/ERFNet/weights/snapshots_decoder/erfnet_iter_70000.caffemodel -iterations 500 -gpu 0 2>&1| tee /home/yly/ERFNet/weights/snapshots_decoder/test_accuracy.log

-model指定的是神经网络配置文件,注意:这里的文件必须是在data输入层含有测试文件路径的prototxt,而不是只输入数据维度的deploy.prototxt。后面-weights载入已经训练好的权重文件,-iterations指定迭代次数(test数据集中有多少文件就指定为多少)。后面的命令是输出日志的另一种方式: 2>&1| tee /home/yly/ERFNet/weights/snapshots_decoder/test_accuracy.log

5、测试模型的各层和总体推理时间和backword时间

/home/yly/ENet/caffe-enet/build/tools/caffe time -model /home/yly/ERFNet/prototxts/erfnet_decoder_train_val.prototxt -weights /home/yly/ERFNet/weights/snapshots_decoder/erfnet_iter_70000.caffemodel -iterations 10 -gpu 0 2>&1| tee /home/yly/ERFNet/weights/snapshots_decoder/test_time.log
另外可指定 -phase TRAIN (同时测量forward和backward的时间) 或者 -phase TEST (只测量forward time)

6、训练日志可视化分析

在训练中利用命令GLOG_logtostderr=0在GLOG_log_dir指定的路径下生成了日志文件。日志文件中打印的是屏幕上的所有信息,我们往往只关注loss或accuracy随着迭代数的增加是如何变化的。可以使用原生caffe的 /tools/extra文件夹下parse_log.sh, extract_seconds.py, plot_training_log.py, plot_training_log.py.example的文件对日志文件进行解析,提取感兴趣的信息。

  • 首先将上述文件复制到存储日志文件的文件夹下,cd到相应的文件夹赋予文件执行权限
chmod u+x ./parse_log.sh ./extract_seconds.py ./plot_training_log.py ./plot_training_log.py.example
  • 解析出train和test日志:
./parse_log.sh caffe.yly.yly.log.INFO.20180812-151029.3307

其中 caffe.yly.yly.log.INFO.20180812-151029.3307是利用section1中的命令生成的日志文件。生成的*.log.train文件和*.log.test文件里是时间、迭代次数、lr、loss的列表。

  • 绘制图片

将训练生成的日志文件加上.log后缀,然后执行:

./plot_training_log.py.example 6  trainloss_iters.png caffe.yly.yly.log.INFO.20180812-151029.3307.log

其中不同数字表示输出不同的图表:

    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

7、caffe多GPU并行训练

只需要在训练的命令行后面指定GPU编号即可:

-gpu 0,1

若使用全部GPU:

-gpu all

8、实时监测显卡使用情况

每秒刷新一次:

watch -n 1 nvidia-smi

参考资料:http://caffe.berkeleyvision.org/tutorial/interfaces.html

你可能感兴趣的:(深度学习)