【说明】:欢迎加入: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