硬件需求和软件的安装和fast rcnn类似,直接开始训练voc2007。
1 下载数据集,并解压
cd py_faster_rcnn/data wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar
tar xvf VOCtrainval_06-Nov-2007.tar tar xvf VOCtest_06-Nov-2007.tar tar xvf VOCdevkit_08-Jun-2007.tar
//建立软连接ln -s $VOCdevkit VOCdevkit2007 //下载Imagenet预训练的模型,cd $FRCN_ROOT ./data/scripts/fetch_imagenet_models.sh //开始训练,数据集使用pascal_voc//例如:cd $FRCN_ROOT ./experiments/scripts/faster_rcnn_end2end.sh [GPU_ID] [NET] [--set ...]
./experiments/scripts/faster_rcnn_end2end.sh 0 VGG_CNN_M_1024 pascal_voc \
--set EXP_DIR foobar RNG_SEED 42 TRAIN.SCALES "[400, 500, 600, 700]"
#./experiments/scripts/faster_rcnn_end2end.sh #文件内容,主要是三个方面: #1、选取数据集格式 #2、调用训练脚本 #3、调用测试脚本、 #!/bin/bash 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// /_} #选取数据集格式,并没有包含数据集地址,只是采用定义好的数据集文件夹框架 #数据集用voc或者coco case $DATASET in pascal_voc) TRAIN_IMDB="voc_2007_trainval" TEST_IMDB="voc_2007_test" PT_DIR="pascal_voc" ITERS=70000 #迭代次数 ;; coco) # This is a very long and slow training schedule # You can probably use fewer iterations and reduce the # time to the LR drop (set in the solver to 350,000 iterations). TRAIN_IMDB="coco_2014_train" TEST_IMDB="coco_2014_minival" PT_DIR="coco" ITERS=490000 ;; *) echo "No dataset given" exit ;; esac LOG="experiments/logs/faster_rcnn_end2end_${NET}_${EXTRA_ARGS_SLUG}.txt.`date +'%Y-%m-%d_%H-%M-%S'`" exec &> >(tee -a "$LOG") echo Logging output to "$LOG" #调用训练脚本 time ./tools/train_net.py --gpu ${GPU_ID} \ --solver models/${PT_DIR}/${NET}/faster_rcnn_end2end/solver.prototxt \ #其中PT_DIR = pascal_voc, Net = ZF --weights data/imagenet_models/${NET}.v2.caffemodel \ #预训练模型 --imdb ${TRAIN_IMDB} \ --iters ${ITERS} \ --cfg experiments/cfgs/faster_rcnn_end2end.yml \ ${EXTRA_ARGS} set +x NET_FINAL=`grep -B 1 "done solving" ${LOG} | grep "Wrote snapshot" | awk '{print $4}'` set -x #训练完成,调用测试脚本 time ./tools/test_net.py --gpu ${GPU_ID} \ --def models/${PT_DIR}/${NET}/faster_rcnn_end2end/test.prototxt \ --net ${NET_FINAL} \ --imdb ${TEST_IMDB} \ --cfg experiments/cfgs/faster_rcnn_end2end.yml \ ${EXTRA_ARGS} #训练脚本分析 train_net: "models/pascal_voc/ZF/faster_rcnn_end2end/train.prototxt" #http://ethereon.github.io/netscope/#/editor 网页的网络可视化工具 #其中存在两组训练参数,一个是 RPN 一个是RCNN训练参数 base_lr: 0.001 lr_policy: "step" gamma: 0.1 stepsize: 50000 display: 20 average_loss: 100 momentum: 0.9 weight_decay: 0.0005 #base_lr: 0.001 #lr_policy: "exp" #gamma: 0.999539589 # (0.00001/0.001)^(1/10000) #display: 1 #average_loss: 100 #momentum: 0.9 #weight_decay: 0.0005 # We disable standard caffe solver snapshotting and implement our own snapshot # function snapshot: 0 # We still use the snapshot prefix, though snapshot_prefix: "zf_faster_rcnn" iter_size: 2