faster-rcnn 之 shell脚本开始训练:./experiments/scripts/faster_rcnn_alt_opt.sh 0 ZF pascal_voc
Posted sloanqin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了faster-rcnn 之 shell脚本开始训练:./experiments/scripts/faster_rcnn_alt_opt.sh 0 ZF pascal_voc相关的知识,希望对你有一定的参考价值。
【说明】:欢迎加入:faster-rcnn 交流群 238138700,这是作者提供的一个运行训练的脚本,我们来看看这个脚本做了什么工作,如果要运行需要输入哪些参数;
【使用】:如果要训练一个网络,可以在shell中输入:./experiments/scripts/faster_rcnn_alt_opt.sh 0 ZF pascal_voc
这样就指定了gpu编号,网络名称,数据集名称三个参数,就可以了
#!/bin/bash
# Usage:
# ./experiments/scripts/faster_rcnn_alt_opt.sh GPU NET DATASET [options args to train,test_net.py]
# DATASET is only pascal_voc for now
#
# Example:
# ./experiments/scripts/faster_rcnn_alt_opt.sh 0 VGG_CNN_M_1024 pascal_voc \\
# --set EXP_DIR foobar RNG_SEED 42 TRAIN.SCALES "[400, 500, 600, 700]"
set -x
set -e
export PYTHONUNBUFFERED="True"
GPU_ID=$1
NET=$2
NET_lc=$NET,,
DATASET=$3
array=( $@ )
len=$#array[@]
EXTRA_ARGS=$array[@]:3:$len
EXTRA_ARGS_SLUG=$EXTRA_ARGS// /_
case $DATASET in
pascal_voc)
TRAIN_IMDB="voc_2007_trainval"
TEST_IMDB="voc_2007_test"
PT_DIR="pascal_voc"
ITERS=40000
;;
coco)
echo "Not implemented: use experiments/scripts/faster_rcnn_end2end.sh for coco"
exit
;;
*)
echo "No dataset given"
exit
;;
esac
LOG="experiments/logs/faster_rcnn_alt_opt_$NET_$EXTRA_ARGS_SLUG.txt.`date +'%Y-%m-%d_%H-%M-%S'`"
exec &> >(tee -a "$LOG")
echo Logging output to "$LOG"
time ./tools/train_faster_rcnn_alt_opt.py --gpu $GPU_ID \\
--net_name $NET \\
--weights data/imagenet_models/$NET.v2.caffemodel \\
--imdb $TRAIN_IMDB \\
--cfg experiments/cfgs/faster_rcnn_alt_opt.yml \\
$EXTRA_ARGS
set +x
NET_FINAL=`grep "Final model:" $LOG | awk 'print $3'`
set -x
time ./tools/test_net.py --gpu $GPU_ID \\
--def models/$PT_DIR/$NET/faster_rcnn_alt_opt/faster_rcnn_test.pt \\
--net $NET_FINAL \\
--imdb $TEST_IMDB \\
--cfg experiments/cfgs/faster_rcnn_alt_opt.yml \\
$EXTRA_ARGS
按行解析:
set -x
set -e
关于set可以参考链接点击打开链接,set -x :将后面执行的命令输出到屏幕,便于调试;set -e:如果命令返回值不是0则退出shell;
后面的这一段就是输入3个参数
GPU_ID=$1
NET=$2
NET_lc=$NET,,
DATASET=$3
这一段没去纠结细节,反正大意就是获取剩下的参数,放在EXTRA_ARGS变量中
array=( $@ )
len=$#array[@]
EXTRA_ARGS=$array[@]:3:$len
EXTRA_ARGS_SLUG=$EXTRA_ARGS// /_
然后就是根据出入的参数dataset,使用case语句选择执行,这里有3个分支,分别是pascal_voc,coco和其他
case $DATASET in
pascal_voc)
TRAIN_IMDB="voc_2007_trainval"
TEST_IMDB="voc_2007_test"
PT_DIR="pascal_voc"
ITERS=40000
;;
coco)
echo "Not implemented: use experiments/scripts/faster_rcnn_end2end.sh for coco"
exit
;;
*)
echo "No dataset given"
exit
;;
esac
再下面就是调用python脚本执行训练和测试了:
time ./tools/train_faster_rcnn_alt_opt.py --gpu $GPU_ID \\
--net_name $NET \\
--weights data/imagenet_models/$NET.v2.caffemodel \\
--imdb $TRAIN_IMDB \\
--cfg experiments/cfgs/faster_rcnn_alt_opt.yml \\
$EXTRA_ARGS
set +x
NET_FINAL=`grep "Final model:" $LOG | awk 'print $3'`
set -x
time ./tools/test_net.py --gpu $GPU_ID \\
--def models/$PT_DIR/$NET/faster_rcnn_alt_opt/faster_rcnn_test.pt \\
--net $NET_FINAL \\
--imdb $TEST_IMDB \\
--cfg experiments/cfgs/faster_rcnn_alt_opt.yml \\
$EXTRA_ARGS
从上面可以看出,作者搞这么麻烦,其实一句话调用train_faster_rcnn_alt_opt.py就得了,费这么大劲,无语
比如训练,直接使用python脚本的话,如下输入:
./tools/train_faster_rcnn_alt_opt.py --gpu 0 --net_name ZF --weights data/imagenet_models/ZF.v2.caffemodel --imdb voc_2007_trainval --cfg experiments/cfgs/faster_rcnn_alt_opt.yml
以上是关于faster-rcnn 之 shell脚本开始训练:./experiments/scripts/faster_rcnn_alt_opt.sh 0 ZF pascal_voc的主要内容,如果未能解决你的问题,请参考以下文章
faster-rcnn 之训练脚本解析:./tools/train_faster_rcnn_alt_opt.py
faster-rcnn 之训练数据是如何准备的:imdb和roidb的产生