【深度学习】研究Fast rcnn代码

【原文:http://blog.sina.com.cn/s/blog_855a82cd0102vnjq.html

原文:http://arxiv.org/pdf/1504.08083.pdf

代码:https://github.com/rbgirshick/fast-rcnn

1.准备工作

1.1 软件准备

    首先,需要安装Caffepycaffe

    caffe原作者网页:http://caffe.berkeleyvision.org/installation.html

    欧新宇师兄caffe安装说明:http://ouxinyu.github.io/Blogs/20140723001.html

    注意:必须在 Makefile.config配置文件中打开Python层支持。

    # In your Makefile.config, make sure to have this line uncommented

    WITH_PYTHON_LAYER := 1

    其次,可能需要Python安装包:cythonpython-opencveasydict

    先装一个python包管理器pip

    sudo apt-get install python-pip

    再装那三个包:

    sudo pip install cython

    #sudo pip install python-opencv

    sudo pip install easydict

    再次,可能需要MATLAB,主要用于对PASCAL voc数据集的评估。

1.2 硬件准备

    对于训练较小的网络(CaffeNet, VGG_CNN_M_1024),至少需要3G内存的GPU(如:TitanK20K40...

    对于训练VGG16,至少需要一个K40(约11G内存),这里我们就不考虑了。

2.安装(用于demo

2.1 githubcloneFast RCNN的仓库。最好就直接这么clone,不要自己去下载,不然还满麻烦的。

    # Make sure to clone with --recursive

    git clone --recursive https://github.com/rbgirshick/fast-rcnn.git

2.2 生成Cython模块(下面的$FRCN_ROOT都是指fast-rcnn的解压位置)

    cd $FRCN_ROOT/lib

    make

2.3 生成Caffepycaffe

    cd $FRCN_ROOT/caffe-fast-rcnn

    # Now follow the Caffe installation instructions here:

    #   http://caffe.berkeleyvision.org/installation.html

    # If you're experienced with Caffe and have all of the requirements installed

    # and your Makefile.config in place, then simply do:

    make -j8 && make pycaffe

2.4 下载Fast RCNN检测器

    cd $FRCN_ROOT

    ./data/scripts/fetch_fast_rcnn_models.sh

3.运行demo

3.1 Python

    cd $FRCN_ROOT

    ./tools/demo.py

可能我安装了cudnn,所以即使2G内存的GPU也是可以的。

【深度学习】研究Fast <wbr>rcnn代码

    如果用CPU模式,就是

    cd $FRCN_ROOT

    ./tools/demo.py --cpu

【深度学习】研究Fast <wbr>rcnn代码

显然是慢很多的。效果图如下所示:  

【深度学习】研究Fast <wbr>rcnn代码

    demo中是用VGG16网络,在PASCAL VOC2007上训练的模型来执行检测的,这个模型比较大,如果把caffe弄崩溃了,可以换一个小一点的网络,其实还更快一点,如

    ./tools/demo.py --net caffenet

    或者

    ./tools/demo.py --net vgg_cnn_m_1024

    或者就用CPU模式好了。

3.2 MATLAB版(暂时没找到编译好的caffe,现在先不管)

    matlab文件夹下打开matlab,下面是我的matlab的安装地址。

    cd $FRCN_ROOT/matlab

    /usr/local/MATLAB/R2014a/bin/matlab  # wait for matlab to start...

    $FRCN_ROOT/caffe-fast-rcnn/matlab下的caffe文件夹拷贝到$FRCN_ROOT/matlab中,为防止内存不够,我们还是以CaffeNet为例,把fast-rcnn-demo.m中的所有VGG16改为CaffeNet。在matlab命令行下输入命令:

    >> fast_rcnn_demo

【深度学习】研究Fast <wbr>rcnn代码

3.3 一些获取object proposal的算法代码

    Selective Search: original matlab codepython wrapper

    EdgeBoxes: matlab code

    GOP and LPO: python code

    MCG: matlab code

    RIGOR: matlab code

4.准备数据集

4.1 首先要下载训练集、验证集、测试集,例子是VOC2007。资源在墙外,将给出百度云盘中的地址。

    wget http://pascallin.ecs.soton.ac.uk/challenges/VOC/voc2007/VOCtrainval_06-Nov-2007.tar

    wget http://pascallin.ecs.soton.ac.uk/challenges/VOC/voc2007/VOCtest_06-Nov-2007.tar

    wget http://pascallin.ecs.soton.ac.uk/challenges/VOC/voc2007/VOCdevkit_08-Jun-2007.tar

4.2 提取所有压缩包到同一个下面称为$VOCdevkit的文件夹下。

    tar xvf VOCtrainval_06-Nov-2007.tar

    tar xvf VOCtest_06-Nov-2007.tar

    tar xvf VOCdevkit_08-Jun-2007.tar

    要有这些基本的目录:

    $VOCdevkit/                           # development kit

    $VOCdevkit/VOCcode/                   # VOC utility code

    $VOCdevkit/VOC2007                    # image sets, annotations, etc.

4.3 创建对VOC2007数据集的symlink,也就是链接FRCN_ROOTVOC2007的目录。

    cd $FRCN_ROOT/data

    ln -s $VOCdevkit VOCdevkit2007

    这个方法非常好,因为别的工程里面也可能用到这个数据集,这样就不用多次拷贝了,节省了很多存储空间,windows下面就没有。

4.4 可以再用同样的办法得到VOC20102012的数据集,如果有需要的话。

4.5 下载预先用selective search计算好的object proposal

    cd $FRCN_ROOT

    ./data/scripts/fetch_selective_search_data.sh

    会下载到$FRCN_ROOT/data下,解压后是一个名为selective_search_data的文件夹。

4.6 下载预先训练好的ImageNet模型。

    cd $FRCN_ROOT

    ./data/scripts/fetch_imagenet_models.sh

    下载到三个模型,分别是CaffeNet (model S), VGG_CNN_M_1024 (model M), and VGG16 (model L),会下载到$FRCN_ROOT/data下,解压后是一个名为imagenet_models的文件夹。

5.模型的训练与测试

5.1 训练模型

    训练Fast R-CNN检测器,以在VOC2007上训练一个CaffeNet 的网络为例。

    ./tools/train_net.py --gpu 0 --solver models/CaffeNet/solver.prototxt --weights data/imagenet_models/CaffeNet.v2.caffemodel

    这里我出现了EnvironmentError: MATLAB command 'matlab' not found. Please add 'matlab' to your PATH.这种错误,说明没把matlab的路径添加到环境变量中,下面的语句设置环境变量:

    export PATH=$PATH:"/usr/local/MATLAB/R2014a/bin"

    又提示说ImportError: No module named yaml,那就下载安装一个:

    sudo apt-get install python-yaml

    再次运行代码就可以了。如果显示内存不够,可以用nvidia-smi随时查看内存使用情况。每10000次迭代会生成一个model,结果存放在output文件夹中。

    训练VGG_CNN_M_1024网络时,会提示说内存不够,就把$FRCN_ROOT/lib/fast_rcnn下的config.py中每个minibatch所用的图片由2改为1,如果还不行,说明GPU内存太小,只能换GPU了。

    ./tools/train_net.py --gpu 0 --solver models/VGG_CNN_M_1024/solver.prototxt --weights data/imagenet_models/VGG_CNN_M_1024.v2.caffemodel

    训练 VGG16网络,据作者说,即使把每个minibatch所用的图片由2改为1,也需要将近5GGPU内存,3G以上内存的可以尝试一下,cudnn可能在一定程度上起到了优化作用。

5.2 测试模型

    在自己的模型还没有训练好,或者训练得不够好的时候,可以试试作者提供的模型:

    ./tools/test_net.py --gpu 0 --def models/CaffeNet/test.prototxt  --net data/fast_rcnn_models/caffenet_fast_rcnn_iter_40000.caffemodel

    在测试的时候一直报下面这样的错,困扰了很久,找到原因后觉得自己蠢哭了。

【深度学习】研究Fast <wbr>rcnn代码

    VOCevaldet中相应文件名输出来,发现问题出在VOCinit上,我们现在是在测试,把

【深度学习】研究Fast <wbr>rcnn代码

第一句注释掉,第二句取消注释。

    下面再测试自己的模型:

    ./tools/test_net.py --gpu 0 --def models/CaffeNet/test.prototxt  --net output/default/voc_2007_trainval/caffenet_fast_rcnn_iter_40000.caffemodel

    测试的结果也在output文件夹中。

5.3 用全连接层压缩的SVD来压缩FRCNN模型

    ./tools/compress_net.py --def models/CaffeNet/test.prototxt --def-svd models/CaffeNet/compressed/test.prototxt --net output/default/voc_2007_trainval/caffenet_fast_rcnn_iter_40000.caffemodel

    压缩后的模型和压缩前的模型是放在一起的,只是名字不一样,在output下的相应文件夹下。再测试这个压缩后的模型:

    ./tools/test_net.py --gpu 0 --def models/CaffeNet/compressed/test.prototxt --net output/default/voc_2007_trainval/vcaffenet_fast_rcnn_iter_40000_svd_fc6_1024_fc7_256.caffemodel

    好像是快了一些吧,反正这也不是重点。

 

附录

1.$FRCN_ROOT/experiments/scripts下的这些脚本可以再现作者论文中的实验,有兴趣的话可以试一下。

2.日志文件下载地址:Experiment logs

3.PASCAL VOC的一些检测结果

voc_2007_test_results_fast_rcnn_caffenet_trained_on_2007_trainval.tgzvoc_2007_test_results_fast_rcnn_vgg16_trained_on_2007_trainval.tgzvoc_2007_test_results_fast_rcnn_vgg_cnn_m_1024_trained_on_2007_trainval.tgz    voc_2012_test_results_fast_rcnn_vgg16_trained_on_2007_trainvaltest_2012_trainval.tgzvoc_2012_test_results_fast_rcnn_vgg16_trained_on_2012_trainval.tgz

4.Fast R-CNN VGG16 modeltrained on VOC07 train,val,test union with VOC12 train,val

 

最后,为什么自己用selective search生成的bounding boxes就再难再现demo里面那么好的效果,而作者目前也没给出回应。

感谢欧新宇师兄的热心指导。

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Fast R-CNN是一种用于目标检测的深度学习模型,它是R-CNN和SPP-Net的改进版本。Fast R-CNN使用单个神经网络来预测图像中的目标位置和类别,相比于R-CNN和SPP-Net,它具有更快的训练和测试速度。 在PyTorch中,可以使用torchvision.models中的fasterrcnn_resnet50_fpn模型来实现Fast R-CNN。该模型使用ResNet-50作为特征提取器,并使用FPN(Feature Pyramid Network)来提高检测性能。可以通过以下代码加载模型: ``` import torchvision model = torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=True) ``` 加载预训练模型后,可以使用该模型对图像进行目标检测。具体实现方法可以参考PyTorch官方文档和示例代码。 ### 回答2: Fast R-CNN是一个基于深度学习的目标检测算法。相比于之前的R-CNN和SPPNet,Fast R-CNN加速了检测过程,并提高了准确率。Fast R-CNN的核心思想是使用RoI Pooling代替SPPNet中的SPP层,这样可以更加高效地提取区域特征。 在PyTorch中实现Fast R-CNN的代码可以分为以下几个步骤: 1. 数据准备:首先需要准备好训练集和测试集,将图片和对应的标注文件存储在相应的路径下。然后可以使用PyTorch内置的dataset和dataloader方法来加载数据集。 2. 模型搭建:在PyTorch中搭建模型可以使用nn.Module类来定义模型,同时也可以使用现成的预训练模型。在Fast R-CNN中,可以使用VGG16作为特征提取网络。然后添加RoI Pooling层和全连接层进行分类和回归。 3. 损失函数和优化器:Fast R-CNN使用多任务损失函数来训练模型,其中包括分类损失和边界框回归损失。可以使用PyTorch内置的交叉熵函数和平滑L1损失函数来计算损失。优化器可以选择SGD或Adam等。 4. 训练模型:定义好模型、损失函数和优化器之后,就可以开始训练模型了。可以使用PyTorch提供的训练模板,或者自定义训练循环。在每个epoch结尾计算并输出模型在验证集上的准确率和损失。 5. 测试模型:训练完成后可以测试模型在测试集上的准确率。可以使用PyTorch提供的测试模板,或者自定义测试循环。在每个epoch结尾计算并输出模型在测试集上的准确率和f-score。 总之,使用PyTorch实现Fast R-CNN可以帮助我们更加高效地进行目标检测。效果和准确率都比较不错,如果你是一个PyTorch的用户,可以尝试一下。 ### 回答3: Fast R-CNN是一个物体检测的网络模型,其主要特点就是速度快。Fast R-CNN使用ROI(region-of-interest)pooling来提取每个建议区域的特征,在提取特征后送入后续的分类和回归层进行物体的分类和定位。Fast R-CNN是R-CNN系列中的第二个版本,相较于R-CNN和SPPnet,Fast R-CNN训练和测试速度更快。 Fast R-CNN代码pytorch的实现主要分为以下步骤: 1. 数据的准备和预处理:准备数据集,对图片进行resize和数据增强等操作。 2. 模型的搭建:模型的搭建主要分为特征提取层、分类层和回归层。特征提取层主要使用卷积层和池化层,分类和回归层主要是全连接层。 3. 损失的计算:损失函数采用了多任务损失函数(Multi-task loss),用于分类和边界框回归。 4. 训练模型:训练模型主要包括数据的加载、前向传播、计算损失、反向传播和更新参数等步骤。需要注意的是,在训练过程中需要采用SGD优化器来进行参数的优化。 5. 模型的测试:在测试过程中,需要先使用非极大值抑制(NMS)来去除冗余的边界框,然后再使用分类和回归网络来对剩余的框进行分类和定位。 Fast R-CNN代码pytorch的实现需要注意的问题包括: 1. 在模型训练过程中,需要对超参数进行适当的调整,如学习率、批量大小、数据增强的方法等。 2. 在测试过程中需要根据具体场景选择合适的阈值来进行分类和定位。 总之,Fast R-CNN在物体检测领域中具有较高的检测速度和精度,可以用于实际应用中的目标跟踪和物体识别等任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值