Skip to content

HRain1016/Faster-RCNN-tf

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Faster R-CNN TensorFlow版

由Xinlei Chen([email protected])实现的Faster R-CNN检测框架的Tensorflow版本。 原作者基于Caffe实现的版本点击这里

注意:重新实现框架时进行了一些改动,有关详细信息,请参阅技术报告An Implementation of Faster RCNN with Study for Region Sampling。 如果想重现原论文的结果,请使用官方代码半官方代码。 有关Faster R-CNN架构的详细信息,请参阅原论文Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

检测表现

当前代码支持VGG16、Resnet V1和Mobilenet V1。唯一的数据增强技术是在原始Faster RCNN之后的训练期间左右翻转。

使用VGG16(conv5_3):

  • 在VOC 2007 训练验证集训练并在VOC 2007测试集测试,70.8。
  • 在VOC 2007+2012 训练验证集训练并在VOC 2007测试集测试,75.7。
  • 在COCO 2014 trainval35k上训练并在minival上测试(迭代次数:900k / 1190k),30.2。

使用Resnet101(最后一个conv4):

  • 在VOC 2007 训练验证集训练并在VOC 2007测试集测试,75.7。
  • 在VOC 2007+2012 训练验证集训练并在VOC 2007测试集测试,79.8。
  • 在COCO 2014 trainval35k上训练并在minival上测试(迭代次数:900k / 1190k),35.4。

更多结果:

  • 在COCO 2014 trainval35k上训练Mobilenet(1.0,224)并在minival上测试(900k / 1190k),21.8。
  • 在COCO 2014 trainval35k上训练Resnet50并在minival上测试(900k / 1190k),32.4。
  • 在COCO 2014 trainval35k上训练Resnet152并在minival上测试(900k / 1190k),36.1。

注意:

由于保留了小的候选区域(<16像素宽度/高度),检测器特别适合检测小型物体。

附加功能

  • 支持train-and-validation。在训练期间,将实时测试验证数据以监控训练过程并检查潜在的过拟合。理想情况下,训练和验证应该是分开的,每次加载模型以进行验证测试。但是我已经以联合的方式实现它以节省时间和GPU内存。

  • 支持恢复培训。尝试在快照时存储尽可能多的信息,目的是正确地从最新快照恢复训练。

  • 支持可视化。当前的实现将在训练期间总结ground truth boxes,统计损失、激活函数和变量,并将其转储到单独的文件夹以进行tensorboard可视化。计算图也会保存以供调试。

环境需求

cython,opencv-python,easydict 1.6,tensorflow1.5

安装

  1. 下载仓库
git clone https://github.com/endernewton/tf-faster-rcnn.git
  1. 更新-arch匹配GPU
cd tf-faster-rcnn/lib`
# Change the GPU architecture (-arch) if necessary
vim setup.py
GPU model Architecture
TitanX (Maxwell/Pascal) sm_52
GTX 960M sm_50
GTX 1080 (Ti) sm_61
Grid K520 (AWS g2.2xlarge) sm_30
Tesla K80 (AWS p2.xlarge) sm_37
  1. 构建 Cython modules
make clean
make
cd ..
  1. 安装 Python COCO API,使用该 API 连接 COCO 数据库
cd data
git clone https://github.com/pdollar/coco.git
cd coco/PythonAPI
make
cd ../../..

设置数据

请按照py-faster-rcnn的说明设置VOC和COCO数据集(COCO的一部分已完成)。 这些步骤涉及下载数据并可选地在数据文件夹中创建软链接。

使用预训练模型演示

  1. 下载预训练模型
# Resnet101 for voc pre-trained on 07+12 set
./data/scripts/fetch_faster_rcnn_models.sh
  1. 创建文件夹和软连接使用预训练模型
NET=res101
TRAIN_IMDB=voc_2007_trainval+voc_2012_trainval
mkdir -p output/${NET}/${TRAIN_IMDB}
cd output/${NET}/${TRAIN_IMDB}
ln -s ../../../data/voc_2007_trainval+voc_2012_trainval ./default
cd ../../..
  1. 在自定义图片上测试
# at repository root
GPU_ID=0
CUDA_VISIBLE_DEVICES=${GPU_ID} ./tools/demo.py
  1. Test with pre-trained Resnet101 models
GPU_ID=0
./experiments/scripts/test_faster_rcnn.sh $GPU_ID pascal_voc_0712 res101

注意: 如果不能得到报告中的结果(79.8 ), 可能是因为 NMS 函数编译有问题。

训练自己的模型

  1. 下载预先训练的模型和权重。 目前的代码支持 VGG16 和 Resnet V1模型。 预训练模型由slim提供,点击这里获取预训练模型并将它们设置在data / imagenet_weights文件夹中。 例如对于VGG16,可以设置如下:
mkdir -p data/imagenet_weights
cd data/imagenet_weights
wget -v http://download.tensorflow.org/models/vgg_16_2016_08_28.tar.gz
tar -xzvf vgg_16_2016_08_28.tar.gz
mv vgg_16.ckpt vgg16.ckpt
cd ../..

对于Resnet101, 可以设置如下:

mkdir -p data/imagenet_weights
cd data/imagenet_weights
wget -v http://download.tensorflow.org/models/resnet_v1_101_2016_08_28.tar.gz
tar -xzvf resnet_v1_101_2016_08_28.tar.gz
mv resnet_v1_101.ckpt res101.ckpt
cd ../..
  1. 训练
./experiments/scripts/train_faster_rcnn.sh [GPU_ID] [DATASET] [NET]
# GPU_ID is the GPU you want to test on
# NET in {vgg16, res50, res101, res152} is the network arch to use
# DATASET {pascal_voc, pascal_voc_0712, coco} is defined in train_faster_rcnn.sh
# Examples:
./experiments/scripts/train_faster_rcnn.sh 0 pascal_voc vgg16
./experiments/scripts/train_faster_rcnn.sh 1 coco res101

注意: 使用预训练模型训练前删除软连接。

  1. 使用Tensorboard可视化
tensorboard --logdir=tensorboard/vgg16/voc_2007_trainval/ --port=7001 &
tensorboard --logdir=tensorboard/vgg16/coco_2014_train+coco_2014_valminusminival/ --port=7002 &
  1. 测试和评估
./experiments/scripts/test_faster_rcnn.sh [GPU_ID] [DATASET] [NET]
# GPU_ID is the GPU you want to test on
# NET in {vgg16, res50, res101, res152} is the network arch to use
# DATASET {pascal_voc, pascal_voc_0712, coco} is defined in test_faster_rcnn.sh
# Examples:
./experiments/scripts/test_faster_rcnn.sh 0 pascal_voc vgg16
./experiments/scripts/test_faster_rcnn.sh 1 coco res101
  1. 使用 tools/reval.sh 重新评估
  • 默认训练网络存储在:
output/[NET]/[DATASET]/default/
  • 测试输出存储在:
output/[NET]/[DATASET]/default/[SNAPSHOT]/
  • 训练和验证的Tensorboard信息存储在:
tensorboard/[NET]/[DATASET]/default/
tensorboard/[NET]/[DATASET]/default_val/

About

Faster R-CNN TensorFlow版

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published