zoukankan      html  css  js  c++  java
  • Caffe使用step by step:faster-rcnn目标检测matlab代码

    faster-rcnn是MSRA在物体检测最新的研究成果,该研究成果基于RCNN,fast rcnn以及SPPnet,对之前目标检测方法进行改进,faster-rcnn项目地址
    首先,faster rcnn所使用的caffe版本并不是官方caffe,是Shaoqing Ren自己在官方版本上实现的一个caffe,具体下载地址为:caffe-faster-rcnn地址


    另外,在配置caffe时,可以直接把自己已配置成功的makefile.config文件拷贝过去。
    由于该版本caffe相对最新的caffe比较旧,因此如果使用opencv 3.0以上版本,需要对Makefile进行修改(实现对OpenCV 3.x的支持)
    查找“Derive include and lib directories”一节,修改“LIBRARIES +=”的最后一行,增加opencv_imgcodecs
    opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs

    保存,退出。
    在此基础之上,需要对原本编译成功的caffe的makefile.config文件进行修改,rbg给出了makefile.config修改参考地址:Makefile.config
    如果出现错误:
    Building with 'g++'.
    /home/agruzdev/git/faster_rcnn/external/caffe/matlab/+caffe/private/caffe_.cpp:19:28: fatal error: gpu/mxGPUArray.h: No such file or directory
    compilation terminated.
    
    

    解决地址:解决方案

    在Makefile.config文件中加入:

    MATLAB_INCLUDE := -I$(MATLAB_DIR)/toolbox/distcomp/gpu/extern/include
    MATLAB_LIBS := -lmwgpu

    提示错误:

    Invalid MEX-file caffe_.mexa64': libcudart.so.7.5: cannot open shared object file: No such file or directory

    解决方案:

     LD_LIBRARY_PATH路径未配置

    sudo gedit ~/.bashrc

    在文本最后加入:

    export LD_LIBRARY_PATH=/usr/local/cuda-7.0/lib64:/usr/local/lib:$LD_LIBRARY_PATH

    对应自己的cuda路径位置

     注:每次需要在新机器上部署fater-rcnn代码时候,最好的方法就是把对应的caffe-fater-rcnn版本重新放在external下面,保留原有的Makefile.config文件,
    这样可以最快的部署好faster- rcnn平台。

    错误:
    [libprotobuf ERROR google/protobuf/descriptor_database.cc:57] File already exists in database: caffe.proto
    [libprotobuf FATAL google/protobuf/descriptor.cc:1018] CHECK failed: generated_database_->Add(encoded_file_descriptor, size):
    Killed
    解决方法:
    最好方法是重启matlab

    安装2:
    在有多个项目需要使用多个data时,最好将所有需要用的数据都存放在datasets文件夹下,使用ln -s srcpath dstpath来构建软链接到项目中,这样一次构建就可以永久使用,也不用考虑后续的其它问题。
    构建软链接的命令为:
    ln -s srcpath dstpath
    
    
    在使用faster-rcnn时候,如果因为服务器的迁移带来的问题,那么需要将bin文件夹下生成的mex文件进行删除,使用faster_rcnn_build命令来重新生成,具体的操作细节同faster-rcnn的github主页上readme相同。


    注意:faster-rcnn中使用的caffe版本较低,不支持cudnn-v4,因此如果要在Makefile.config文件中打开CUDNN加速,那么安装的cudnn版本应该低于v4(v2或者v3:没试过)



    ---------------------------------------------------- 2016.05.09更新 --------------------------------------------------

    Faster RCNN主要有两部分组成:
      Region porposal Network(获取region candidate)
      Detection(Fast RCNN)

    由于rpn网络是一个0(non-region) vs 1 (region)网络,所以一般情况下不用使用自己的数据集进行finetuning,直接使用已经训练好的rpn_ZF.caffemodel获取对应图像的region proposal即可。当然也可以使用自己的数据集对该网络进行finetuning。
    RPN网络的另外一种region 提取方法:
    DeepBox
    deepproposal
    deepmask


    但是在一般应用中需要根据自己的实际情况对detection网络,即Fast RCNN网络进行finetuning。这里要讲的是如何使用自己的数据集对Fast RCNN网络进行finetuning。在已有训练好的网络caffemodel前提下,从头训练一个网络是非常费时也是费人的。我就是经历了这样一个痛苦的过程,才走回正道。在做一个事情之前需要认证想清楚自己的目标是什么,不要盲目的做,到头来浪费时间,耽误研究进程。

    如何使用自己的数据集finetuning FastRCNN,网上已经给出了很多参考教程:

    Train a fast-rcnn CovNet on another dataset

    Train Fast-RCNN on Another Dataset

    Test Fast-RCNN on Another Dataset

    how to use py-faster-rcnn to do 4 classes training instead of 20 classes?

    Training Faster RCNN on Imagenet

    How to train fast rcnn on imagenet

    以及将ResNet应用于Fast RCNN中进行检测:

    ResNet Implementation for Faster-rcnn

    上述进行Fast RCNN finetuning都是基于fast rcnn python版本进行。由于本人使用的是Ren Shaoqing提供的matlab版本,所以需要在matlab下面进行finetuning。

    在$FRCNN/experiments/ZF_for_Fast_RCNN_VOC0712文件中,在给定train.mat(bbox:region candidate,images: image_path)条件下使用数据集进行finetuning。

    操作步骤:

    1.$FRCNN/+Dataset/文件夹下添加自己的数据集对应文件;

    2.使用selective search 或者上面提到的已经训练好的RPN网络来获取bbox,将其存成train.mat形式(具体形式见网上selective_search_data.mat);

    3.修改solver.prototxt文件以及train_val.prototxt 和 test.protxt文件中对应的cls  和 bbox数值,以及对应的layer_name;

    4. 修改fast_rcnn_train.m文件中snapshot函数中

      bbox_pred_layer_name = 'bbox_pred_vid';

    为自己定义的layer:name(bbox_pred_vid)。

    5. 修改fast_rcnn_im_detect.m文件中

        scores = caffe_net.blobs('cls_score_vid').get_data();

    为自己定义的layer:name(cls_score_vid)。

    6.修改imdb_eval函数

    最后就可以按照ZF_for_Fast_RCNN_VOC0712仿写自己的训练程序。


    2017.05.16更新 py-faster-rcnn

    Nvidia cuda版本已经更新至8.0,因此在使用py-faster-rcnn的时候需要支持cuda8.0,而原始的faster python版本代码并不支持cuda8.0,所以需要将其中的caffe代码进行更新。

    更新代码方式见:py-faster-rcnn support 1080P and cudnn v5?

  • 相关阅读:
    理解FreeRTOS的任务状态机制
    stm32【按键处理:单击、连击、长按】
    stm32f4单片机 硬件浮点运算
    stm32 HAL库 串口无法接收数据的问题
    Single Sign On —— 简介(转)
    关于第三方库安装时很慢或者读取超时问题处理
    设计模式》状态机模式
    设计模式》责任链模式
    设计模式》访问者模式
    设计模式》策略者模式
  • 原文地址:https://www.cnblogs.com/empty16/p/4918345.html
Copyright © 2011-2022 走看看