深度学习算法火起来之后,基于深度学习各种模型都如雨后春笋一般在各个领域广泛应用。

  由于想把深度学习算法应用在在视频目标检测方向,得到一个较好的结果。由于视频数据的复杂性,因此使用深度学习算法在视频中的目标检测难度比较大,但是仍然可以借鉴现阶段state-of-art的目标检测算法r-cnn。通过自己运行r-cnn目标检测代码,可以明确目标检测的流程,同时构建目标检测的baseline。下面详细讲解构建r-cnn框架的过程和方法以及过程中遇到的问题解决方案。

  在跑r-cnn代码之前需要明确一些问题:

  1. r-cnn代码是基于caffe构建的,因此在跑r-cnn代码之前,首先需要搭建好caffe平台;
  2. caffe的版本必须时0.999,在r-cnn官网已经明确,r-cnn不支持最新的caffe,0.999版本见r-cnn的github主页。

下面,我们一步步搭建r-cnn代码。跑r-cnn代码流程在r-cnn的gtihub主页已经非常清楚。按照官网说明一步步操作。

这里主要讲解一些r-cnn代码构建时的一些问题:

编译caffe-0.999时遇到的错误:

make: *** [build/src/caffe/util/math_functions.cuo] Error 2
解决方法:地址

修改文件 caffe/include/caffe/util/math_functions.hpp中

修改前:

using std::signbit;
DEFINE_CAFFE_CPU_UNARY_FUNC(sgnbit, y[i] = signbit(x[i]));

修改后:

// using std::signbit;
DEFINE_CAFFE_CPU_UNARY_FUNC(sgnbit, y[i] = std::signbit(x[i]));

caffe-0.999版本下make matcaffe出问题的解决方案:

在修改makefile.config中CUDA_ARCH,修改后为:

CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
-gencode arch=compute_20,code=sm_21 \
-gencode arch=compute_30,code=sm_30 \
-gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=sm_50 \
-gencode arch=compute_50,code=compute_50
matcaffe编译不能通过,解决方法
通过修改makefile中第266行和272行中的问题:
266行修改前:
$(MAT$(PROJECT)_SO): $(MAT$(PROJECT)_SRC) $(STATIC_NAME)

  修改后:

$(MAT$(PROJECT)_SO): $(MAT$(PROJECT)_SRC) $(NAME)

在将rcnn代码应用到自己的数据集时,需要注意的是:

1.将已经设计好的网络定义文件prototxt和提取好的window_files拷贝到external/caffe/example/finetune_voc_exp/文件夹下;

2.使用caffe的cmd命令来对网络进行finetuning;

  1).使用cd 命令进入external/caffe/example/finetune_vid_exp/文件夹下;

  2).使用caffe/build/caffe工具来对网络进行finetuning,由于caffe的接口变化,rcnn官网上的命令已不能使用,具体命令为:  

  GLOG_logtostderr=1 ../../build/tools/caffe train  -solver pascal_finetune_solver.prototxt  -weights /home/startag/Desktop/code/rcnn-master/data/caffe_nets/ilsvrc_2012_train_iter_310k 2>&1 | tee log.txt

 

在获取到bbox之后,生成window_file之后,使用该window_file进行DL网络训练时出现错误信息:

OpenCV Error: Assertion failed ( <= roi.x &&  <= roi.width && roi.x + roi.width <= m.cols &&  <= roi.y &&  <= roi.height && roi.y + roi.height <= m.rows) in Mat, file /home/uujjwal/libraries/opencv-3.0./modules/core/src/matrix.cpp, line
terminate called after throwing an instance of 'cv::Exception'
what(): /home/uujjwal/libraries/opencv-3.0./modules/core/src/matrix.cpp:: error: (-) <= roi.x && <= roi.width && roi.x + roi.width <= m.cols && <= roi.y && <= roi.height && roi.y + roi.height <= m.rows in function Mat
*** Aborted at (unix time) try "date -d @1447952145" if you are using GNU date ***

解决方案:地址


Caffe使用step by step:r-cnn目标检测代码的更多相关文章

  1. CNN目标检测系列算法发展脉络——学习笔记(一):AlexNet

    在咨询了老师的建议后,最近开始着手深入的学习一下目标检测算法,结合这两天所查到的资料和个人的理解,准备大致将CNN目标检测的发展脉络理一理(暂时只讲CNN系列部分,YOLO和SSD,后面会抽空整理). ...

  2. 皮卡丘检测器-CNN目标检测入门教程

    目标检测通俗的来说是为了找到图像或者视频里的所有目标物体.在下面这张图中,两狗一猫的位置,包括它们所属的类(狗/猫),需要被正确的检测到. 所以和图像分类不同的地方在于,目标检测需要找到尽量多的目标物 ...

  3. [转]CNN目标检测(一):Faster RCNN详解

    https://blog.csdn.net/a8039974/article/details/77592389 Faster RCNN github : https://github.com/rbgi ...

  4. 标题 发布状态 评论数 阅读数 操作 操作 CNN目标检测系列算法发展脉络简析——学习笔记(三):Fast R-CNN

    最近两周忙着上网课.投简历,博客没什么时间写,姑且把之前做的笔记放上来把... 下面是我之前看论文时记的笔记,之间copy上来了,内容是Fast R-CNN的,以后如果抽不出时间写博客,就放笔记上来( ...

  5. CNN之yolo目标检测算法笔记

    本文并不是详细介绍yolo工作原理以及改进发展的文章,只用做作者本人回想与提纲. 1.yolo是什么 输入一张图片,输出图片中检测到的目标和位置(目标的边框) yolo名字含义:you only lo ...

  6. 目标检测YOLOv1-v3——学习笔记

    Fast RCNN更准一些.其损失函数比YOLO简单. YOLO更快 YOLO(You Only Look Once) 简介: 测试过程: 训练过程: 坐标.含有.不含.类别预测 目标检测的效果准确率 ...

  7. 使用Faster R-CNN做目标检测 - 学习luminoth代码

    像玩乐高一样拆解Faster R-CNN:详解目标检测的实现过程 https://mp.weixin.qq.com/s/M_i38L2brq69BYzmaPeJ9w 直接参考开源目标检测代码lumin ...

  8. Caffe使用step by step:faster-rcnn目标检测matlab代码

    faster-rcnn是MSRA在物体检测最新的研究成果,该研究成果基于RCNN,fast rcnn以及SPPnet,对之前目标检测方法进行改进,faster-rcnn项目地址.首先,faster r ...

  9. enode框架step by step之框架要实现的目标的分析思路剖析1

    enode框架step by step之框架要实现的目标的分析思路剖析1 enode框架系列step by step文章系列索引: 分享一个基于DDD以及事件驱动架构(EDA)的应用开发框架enode ...

随机推荐

  1. CF13E Holes LCT

    CF13E Holes LG传送门 双倍经验题,几乎同[HNOI2010]弹飞绵羊,LCT练手题,LG没有LCT题解于是发一波. 从当前点向目标点连边,构成一棵树,带修改就用LCT动态维护答案,由于不 ...

  2. redis中key的归类

    redis中可以使用前缀对key进行归类: 例如:key: ITEM_INFO:123456:BASE ITEM_INFO:123456:DESC 作用:方便进行管理 如果把二维表保存到redis中: ...

  3. python中@property和property函数使用

    1.基本的@property使用,可以把函数当做属性用 class Person(object): @property def get_name(self): print('我叫xxx') def m ...

  4. 2018.4.23 linux系统

    linux: 1.代表linux的内核 2.代表linux的操作系统:linux的内核和工具软件.应用软件..办公工具.开发工具. 它的特点: 1.它是开源软件,时当今最成功的开源软件之一.所以很多的 ...

  5. node.js主从分布式爬虫

    前言 前文介绍过用Python写爬虫,但是当任务多的时候就比较慢, 这是由于Python自带的http库urllib2发起的http请求是阻塞式的,这意味着如果采用单线程模型,那么整个进程的大部分时间 ...

  6. django orm 操作表

    django orm 操作表 1.基本操作 增 models.Tb1.objects.create(c1='xx', c2='oo') 增加一条数据,可以接受字典类型数据 **kwargs inser ...

  7. Prometheus 添加报警规则

    https://prometheus.io/docs/prometheus/latest/migration/

  8. BOM 头是什么,怎么除去

    WINDOWS自带的记事本,在保存一个以 UTF-8 编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM).它是一串隐藏的字符,用于让记事本等编辑器识别这个文 ...

  9. ualias命令详解

    基础命令学习目录首页 原文链接:https://blog.csdn.net/yexiangcsdn/article/details/82782667 个人分类: Linux Command 所属专栏: ...

  10. redis高级应用(集群搭建、集群分区原理、集群操作)

    文章主目录 Redis集群简介 Redis集群搭建 Redis集群分区原理 集群操作 参考文档 本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 ...