数据集迁移之路
将Github作者endernewtown的基于pascal_voc数据集和coco数据集的代码,迁移至NWPU_VHR数据集。
原代码仓库链接:https://github.com/endernewton/tf-faster-rcnn
修改后的代码仓库:https://github.com/Rhapso/tf-faster-rcnn
前言
初次接触一个较大的tensorflow工程,所以在读源码上下了一番功夫。本文适合初涉tensorflow的用户阅读。本工程的代码结构较大,所以要从宏观入手。我们的切入点是/experiments/scripts
目录下的两个个文件train_faster_rcnn.sh
、test_faster_rcnn.sh
。
NWPU_VHR数据集
NWPU_VHR数据集是一个较小的遥感照片数据集,其数据集目录下包含的文件夹有
- /annotations_cache: 根据
/ground_truth
中的信息生成的数据体,当程序内部默认当存在现成的数据体时,直接调用这个数据包。因此,调试程序时,若修改了对/ground_truth
文件夹内数据的读取规则,请清空/annotations_catchs
文件夹。 - /detections_images
- /ground_truth: 包含了每张图片的标注信息
- /image_set: 训练集照片和测试集照片的名称集合,其中训练集527张,测试集123张。
- /nagative_image_set: 包含150张没有目标的照片合集
- /positive_image_set: 包含650张含有目标的照片合集
- /results
- /readme.txt
我们尤其需要注意的是选框信息存储的格式。NWPU_VHR数据集对于一个选框的记录方式是(index1,index2),(index3,index4),class_num
,中间不包括空格。我们在提取的时候需要注意。源代码中还添加了难度(diff)参数,取值范围是如0、1、2的整数,难度参数在NWPU_VHR数据集中没有标注,因此在提取时将难度设置为0即可。
下文我们顺藤摸瓜,依次将所需调用的文件修改完成。
/experiments/scripts/train_faster_rcnn.sh
这个脚本文件是整个程序训练的入口文件,我们使用它的方法是运行命令./train_faster_rcnn.sh 0 nwpu_vhr res101
。这里0
表示GPU_ID,nwpu_vhr
是我们要使用的数据集,为了要使用这个数据集,我们要在文件case
语句中添加以下代码
nwpu_vhr)
TRAIN_IMDB="NWPU_VHR_train"
TEST_IMDB="NWPU_VHR_val"
STEPSIZE="[35000]"
ITERS=200000
ANCHORS="[1,2,4,8,16]"
RATIOS="[0.5,1,2]"
;;
可以实现使用该数据集的一下基本配置,特别说明,所设置的参数可以自由修改,可以达到不一样的训练效果。我们还要修改源代码的一个地方:
if [ ! -f ${NET_FINAL}.index ]; then
if [[ ! -z ${EXTRA_ARGS_SLUG} ]];