simple-faster-rcnn-pytorch:基于 PyTorch 的 Faster R-CNN 目标检测实现项目

A simplified implemention of Faster R-CNN that replicate performance from origin paper

分支4Tags2
当前项目代码仓暂无内容

更简洁快速的Faster R-CNN实现

1. 引言

[更新:] 我已经进一步简化了代码,使其适用于pytorch 1.5和torchvision 0.6,并用torchvision中的roipool和nms替换了自己的自定义操作。如果你需要旧版本的代码,请查看分支v1.0

本项目是基于chainercv和其他项目的一个简化的Faster R-CNN实现。我希望它能作为一个起点,为那些想要了解Faster R-CNN细节的人提供帮助。它的目标是:

  • 简化代码(简单优于复杂
  • 让代码更直观(扁平优于嵌套
  • 达到原论文中报告的性能(速度和mAP都很重要

它具备以下特点:

  • 可以作为纯Python代码运行,无需构建过程。
  • 这是一个约2000行有效代码的最小实现,其中包含大量注释和说明。(感谢chainercv出色的文档)
  • 它比原实现具有更高的mAP(0.712 VS 0.699)
  • 在TITAN XP上训练和测试的速度与其他实现相当(分别为6fps和14fps)
  • 内存效率高(对于vgg16约为3GB)

2. 性能

2.1 mAP

使用VGG16在trainval数据集上进行训练,在test数据集上进行测试。

注意:训练表现出很大的随机性,可能需要一些运气和更多的训练epoch才能达到最高的mAP。然而,要超过下限应该比较容易。

实现 mAP
原始论文 arXiv 0.699
使用Caffe预训练模型训练 0.700-0.712
使用torchvision预训练模型训练 0.685-0.701
chainercv转换的模型(报告0.706) 0.7053

2.2 速度

实现 GPU 推理 训练
原始论文 arXiv K40 5 fps N/A
本实现 [1] TITAN Xp 14-15 fps 6 fps
pytorch-faster-rcnn TITAN Xp 15-17fps 6fps

[1]: 确保正确安装cupy并只有一个程序使用GPU。训练速度对GPU状态敏感。更多信息请参阅故障排除。此外,程序开始时会较慢 —— 需要时间来预热。

通过去除可视化、日志记录、平均损失等功能,速度可以更快。

3. 安装依赖项

以下是使用anaconda从头创建环境的示例:

# 创建conda环境
conda create --name simp python=3.7
conda activate simp
# 安装PyTorch
conda install pytorch torchvision cudatoolkit=10.2 -c pytorch

# 安装其他依赖
pip install visdom scikit-image tqdm fire ipdb pprint matplotlib torchnet

# 启动visdom进行可视化
nohup python -m visdom.server &

如果不使用anaconda,则:

  • 安装带有GPU支持的PyTorch(代码仅支持GPU),参考官方站点

  • 安装其他依赖项:pip install visdom scikit-image tqdm fire ipdb pprint matplotlib torchnet

  • 为了可视化,启动visdom

nohup python -m visdom.server &

4. 示例

Google DriveBaidu Netdisk(密码: scxn)下载预训练模型。

更多详情见demo.ipynb

5. 训练

5.1 准备数据

Pascal VOC2007

  1. 下载训练、验证、测试数据和VOCdevkit

    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
    
  2. 将这些tar文件解压缩到一个名为VOCdevkit的目录中

    tar xvf VOCtrainval_06-Nov-2007.tar
    tar xvf VOCtest_06-Nov-2007.tar
    tar xvf VOCdevkit_08-Jun-2007.tar
    
  3. 应该有如下基本结构

    $VOCdevkit/                           # 开发工具包
    $VOCdevkit/VOCcode/                   # VOC实用代码
    $VOCdevkit/VOC2007                    # 图像集合,注解等
    # ... 和几个其他目录 ...
    
  4. 修改utils/config.py中的voc_data_dir配置项,或者通过参数如--voc-data-dir=/path/to/VOCdevkit/VOC2007/传递给程序。

5.2 [可选]准备Caffe预训练的vgg16

如果你想使用Caffe预训练模型作为初始权重,可以运行以下命令获取由Caffe转来的vgg16权重,这与原论文中使用的相同。

python misc/convert_caffe_pretrain.py

这个脚本会下载预训练模型并将其转换为与torchvision兼容的格式。如果你在中国并无法下载预训练模型,你可以参考此问题

然后可以在utils/config.py中设置caffe_pretrain_path,指定Caffe预训练模型vgg16_caffe.pth的位置。默认路径是可以的。

如果你想使用torchvision的预训练模型,可以跳过此步骤。

注意,Caffe预训练模型显示出轻微更好的性能。

注意:Caffe模型要求图像以BGR 0-255的形式,而torchvision模型则需要RGB形式且范围为0-1。详细信息请参阅data/dataset.py

5.3 开始训练

python train.py train --env='fasterrcnn' --plot-every=100

你可以参考utils/config.py了解更多参数。

一些关键参数:

  • --caffe-pretrain=False:使用Caffe的预训练模型还是torchvision的(默认:torchvision)
  • --plot-every=n:每n批次可视化预测、损失等。
  • --env:用于可视化的visdom环境
  • --voc_data_dir:VOC数据存储位置
  • --use-drop=False:在RoI头部使用dropout,默认False
  • --use-Adam=False:使用Adam代替SGD,默认使用SGD。(使用Adam时需要设置非常低的lr
  • --load-path:预训练模型路径,默认None,如果指定了路径,将会加载该模型。

你可以在浏览器中访问http://<ip>:8097,看到如下所示的训练过程的可视化:

故障排除

  • DataLoader:接收到了0项ancdata

    参见讨论,此问题已在train.py中修复。因此,你应该已经摆脱了这个问题。

  • Windows 支持

    我没有配备GPU的Windows设备来调试和测试。如果有人能提交拉取请求并进行测试,那将非常欢迎。

致谢

本项目基于许多杰出的工作构建,包括:

^_^

根据MIT许可协议授权,详情请参阅LICENSE文件。

欢迎贡献。

如果你遇到任何问题,可以自由地打开一个议题,但我最近比较忙。

如果有任何错误或不清楚的地方,请指正。

模型结构: img

项目介绍

A simplified implemention of Faster R-CNN that replicate performance from origin paper

定制我的领域
534.03 K1.12 K访问 GitHub