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的产生

折腾faster-rcnn(三)--训练篇

深度学习和目标检测系列教程 10-300:通过torch训练第一个Faster-RCNN模型

使用faster-rcnn.pytorch训练自己数据集

为啥faster-rcnn端到端训练只做近似?