r-fcn比faster rcnn-rcnn新一些吗

Faster R-CNN学习笔记
Faster R-CNN学习笔记
R-CNN学习笔记:http://blog.csdn.net/xzzppp/article/details/
Fast R-CNN学习笔记:http://blog.csdn.net/xzzppp/article/details/
& & & &Faster R-CNN(其中R对应于“Region(区域)” )是基于深度学习R-CNN系列目标检测最好的方法。使用VOC2训练集训练,VOC2007测试集测试mAP达到73.2%,目标检测的速度可以达到每秒5帧。
& & & &技术上将RPN网络和Fast R-CNN网络结合到了一起,将RPN获取到的proposal直接连到ROI pooling层,是一个CNN网络实现端到端目标检测的框架。
2、R-CNN系列方法对比
3、Fast R-CNN目标检测系统框图
4、Faster R-CNN
  RPN的核心思想是使用卷积神经网络直接产生region proposal,使用的方法本质上就是滑动窗口。RPN网络结构图如上所示(ZF模型:256维),假设给定600*1000的输入图像,经过卷积操作得到最后一层的卷积feature map(大小约为40*60),最后一层卷积层共有256个feature map。
Region ProposalNetwork(RPN)
  在这个特征图上使用3*3的卷积核(滑动窗口)与特征图进行卷积,那么这个3*3的区域卷积后可以获得一个256维的特征向量。因为这个3*3的区域上,每一个特征图上得到一个1维向量,256个特性图即可得到256维特征向量。
& & & &3*3滑窗中心点位置,对应预测输入图像3种尺度(128,256,512),3种长宽比(1:1,1:2,2:1)的regionproposal,这种映射的机制称为anchor,产生了k=9个anchor。即每个3*3区域可以产生9个region proposal。所以对于这个40*60的feature map,总共有约*9)个anchor,也就是预测20000个region proposal。
& & & &后边接入到两个全连接层,即cls layer和reglayer分别用于分类和边框回归。clslayer包含2个元素,用于判别目标和非目标的估计概率。reglayer包含4个坐标元素(x,y,w,h),用于确定目标位置。cls:正样本,与真实区域重叠大于0.7,负样本,与真实区域重叠小于0.3。reg:返回区域位置。
& & & 最后根据region proposal得分高低,选取前300个region proposal,作为Fast R-CNN的输入进行目标检测。
5、训练4步阶段:
(1)使用在ImageNet上预训练的模型初始化RPN网络参数,微调RPN网络;
(2) 使用(1)中RPN网络提取region proposal训练Fast R-CNN网络,也用ImageNet上预训练的模型初始化该网络参数;(现在看来两个网络相对独立)
(3) 使用(2)的Fast R-CNN网络重新初始化RPN, 固定卷积层进行微调,微调RPN网络;
(4) 固定(2)中Fast R-CNN的卷积层,使用(3)中RPN提取的region proposal对Fast R-CNN网络进行微调。
我的热门文章
即使是一小步也想与你分享The page is temporarily unavailable
nginx error!
The page you are looking for is temporarily unavailable.
Please try again later.
Website Administrator
Something has triggered an error on your
This is the default error page for
nginx that is distributed with
It is located
/usr/share/nginx/html/50x.html
You should customize this error page for your own
site or edit the error_page directive in
the nginx configuration file
/etc/nginx/nginx.conf.深度学习(78)
学习笔记(5)
转自:/question/7490
深度学习班和视觉班寒老师和李老师讲过图像检测与识别,这篇笔记主要记录R-FCN、SSD、YOLO2、faster-rcnn和labelImg实验。
作者代码:&#matlab版本
这里使用python版本的代码:
1.下载代码
git clone&
2.克隆caffe
cd py-R-FCN
git clone&&#Microsoft的源
git reset --hard 1a2be8e
3.编译Cython模块
cd py-R-FCN/lib
4.编译caffe和pycaffe
这里Makefile.config要支持Python layers!
In your Makefile.config, make sure to have this line uncommented
WITH_PYTHON_LAYER := 1
cd py-R-FCN/caffe
cp Makefile.config.example Makefile.config&
make -j8 && make pycaffe
5.下载resnet caffemodel
从OneDriver下载rfcn_models&
解压到:py-R-FCN/data下
解压后的目录:
py-R-FCN/data/rfcn_models/resnet50_rfcn_final.caffemodel
py-R-FCN/data/rfcn_models/resnet101_rfcn_final.caffemodel
6.运行demo
python py-R-FCN/tools/demo_rfcn.py --net ResNet-50
python py-R-FCN/tools/demo_rfcn.py --net ResNet-101
ResNet-50效果图:
ResNet-101效果图:
7.准备训练和测试
笔者这里简单使用VOC2007,并且修改名称VOC0712,笔者把数据集直接放在py-R-FCN/data下
官网使用VOC2007和VOC2012,使用的时候要合并数据集,具体参考官网的Preparation for Training & Testing 第四点
8.下载ImageNet 与预训练的ResNet-50和ResNet-100
OneDriver:(在KaimingHe的github&&)
mkdir py-R-FCN/data/imagenet_models
将model放到该目录
9.可自己修改模型,类别,修改相应的py-r-fcn/py-R-FCN/models/pascal_voc/目录下对应的文件和py-r-fcn/lib/datasets/pascal_voc.py。笔者这里还是使用默认的。
10.修改迭代次数
vi py-r-fcn/experiments/scripts/rfcn_end2end_ohem.sh
把pascal_voc的ITERS 调小
./py-r-fcn/experiments/scripts/rfcn_end2end_ohem.sh 0 ResNet-50 pascal_voc&
其他训练方式请自行参考官网Usage
将训练好的模型py-r-fcn/py-R-FCN/output/rfcn_end2end_ohem/voc_0712_trainval/resnet50_rfcn_ohem_iter_x.caffemodel,放到 py-r-fcn/py-R-FCN/data/rfcn_models 下,修改 py-R-FCN/tools/demo_rfcn.py的NETS,运行
作者代码:
1.下载代码:
git clone&
git checkout ssd
2.编译代码
cp Makefile.config.example Makefile.config
make test -j8
make runtest -j8
1.下载caffemodel和prototxt&
从上边地址下载完放到/models/VGGNET/
4.下载VOC2007和VOC2012
cd /root/data
tar -xvf VOCtrainval_11-May-2012.tar
tar -xvf VOCtrainval_06-Nov-2007.tar
tar -xvf VOCtest_06-Nov-2007.tar
5.创建LMDB文件
cd $CAFFE_ROOT
./data/VOC0712/create_list.sh
./data/VOC0712/create_data.sh
6.训练模型
python examples/ssd/ssd_pascal.py&
也可以从这里&下训练好的模型。
7.评估模型
python examples/ssd/score_ssd_pascal.py
8.测试模型
python examples/ssd/ssd_pascal_webcam.py #笔者这步忽略
贴几张youtube的SSD实时检测效果,视频地址:
直接用ssd_detect.ipynb(examples/ssd_detect.ipynb)测试
9.训练其他数据集忽略
mxnet 版本的ssd
代码地址:
1.下载代码
git clone --recursive&
2.编译mxnet
cd mxnet-ssd/mxnet
cp make/config.mk ./config.mk #自行修改配置文件
3.下载预训练模型
地址:。下载后解压到model下
4.测试demo
python demo.py --epoch 0 --images ./data/demo/dog.jpg --thresh 0.5
5.其他的训练数据忽略
1.下载代码
git clone&
cd darknet
2.下载模型
./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg
其他效果图
4.所有检测
./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg -thresh 0
5.在视频上检测
./darknet detector demo cfg/coco.data cfg/yolo.cfg yolo.weights &video file&
faster-rcnn
官方版本:&#matlab
这里使用python版本:
1.下载代码
git clone --recursive&
笔者这里换了官方的源,没问题的同学可忽略
cd caffe-fast-rcnn
git remote add caffe&86Xgit fetch caffe
git merge caffe/master&
2.编译Cython模块
cd $FRCN_ROOT/lib
3.编译caffe和pycaffe
这里Makefile.config要支持Python layers!
In your Makefile.config, make sure to have this line uncommented
WITH_PYTHON_LAYER := 1
cd $FRCN_ROOT/caffe-fast-rcnn
make -j8 && make pycaffe
4.下载预训练模型
cd $FRCN_ROOT
./data/scripts/fetch_faster_rcnn_models.sh
5.测试demo
cd $FRCN_ROOT
./tools/demo.py
6.其他数据集训练的此处忽略
笔者使用的图像标注工具是labelImg,制作的格式和PASCAL VOC一样,可在windows、linux和Mac使用。
代码地址:
1.环境依赖
至少python2.6和PyQt 4.8
2.Linux/Ubuntu/Mac 安装
sudo apt-get install pyqt4-dev-tools
sudo pip install lxml
./labelImg.py
在文件目录下执行
pyrcc4 -o resources.py resources.qrc
python labelImg.py
3.常规使用步骤
python labelImg.py
在File菜单选Change default saved annotation folder
点击Open Dir,打开图片路径
点击Create RectBox,画标注
4.常用快捷键
Ctrl + r 选择annotation的默认存放路径
Ctrl + n 新建一个标注
Ctrl + s 保存图片
n:下张图片
p:上一张图片
5.预先可以在 labelImg/data/predefined_classes.txt 定义标注类别
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:128355次
积分:3197
积分:3197
排名:第9016名
原创:165篇
转载:222篇
评论:10条
文章:15篇
阅读:7684
(7)(17)(31)(8)(8)(57)(28)(46)(61)(22)(62)(6)(18)(14)(5)RCNN学习笔记(8):Fully Convolutional Networks for Semantic Segmentation(全卷积网络FCN)
日期: 17:04:25
来源:ITeye
RCNN学习笔记(8):Fully Convolutional Networks for Semantic Segmentation(全卷积网络FCN)
【论文信息】
《Fully Convolutional Networks for Semantic Segmentation》
CVPR 2015 best paper
Reference link: http://blog.csdn.net/tangwei2014
http://blog.csdn.net/u/article/details/
概览&主要贡献
提出了一种end-to-end的做semantic segmentation的方法,简称FCN。
如下图所示,直接拿segmentation 的 ground truth作为监督信息,训练一个端到端的网络,让网络做pixelwise的prediction,直接预测label map。(笔者自己类比思想:faster rcnn中的rbn-&(fc-&region proposal) label map-& fast-rcnn for fine tuning)
【方法简介】
主要思路是把CNN改为FCN,输入一幅图像后直接在输出端得到dense prediction,也就是每个像素所属的class,从而得到一个end-to-end的方法来实现image
semantic segmentation。
我们已经有一个CNN模型,首先要把CNN的全连接层看成是卷积层,卷积模板大小就是输入的特征map的大小,也就是说把全连接网络看成是对整张输入map做卷积,全连接层分别有的卷积核,的卷积核,的卷积核,如下图:
接下来就要对这的输出,做upsampling,得到1000个原图大小(如32*32)的输出,这些输出合并后,得到上图所示的heatmap。
【细节记录】
dense prediction
这里通过upsampling得到dense prediction,作者研究过3种方案:
1,shift-and-stitch:设原图与FCN所得输出图之间的降采样因子是f,那么对于原图的每个f*f的区域(不重叠),“shift the input x pixels to the right and y pixels down for every (x,y) ,0 & x,y & f." 把这个f*f区域对应的output作为此时区域中心点像素对应的output,这样就对每个f*f的区域得到了f^2个output,也就是每个像素都能对应一个output,所以成为了dense
prediction。
2,filter rarefaction:就是放大CNN网络中的subsampling层的filter的尺寸,得到新的filter:
其中s是subsampling的滑动步长,这个新filter的滑动步长要设为1,这样的话,subsampling就没有缩小图像尺寸,最后可以得到dense prediction。
以上两种方法作者都没有采用,主要是因为这两种方法都是trad-off的,原因是:
对于第二种方法, 下采样的功能被减弱,使得更细节的信息能被filter看到,但是receptive fileds会相对变小,可能会损失全局信息,且会对卷积层引入更多运算。
对于第一种方法,虽然receptive fileds没有变小,但是由于原图被划分成f*f的区域输入网络,使得filters无法感受更精细的信息。
重点方法:反卷积层-&pixel wise-&bp parameters-&实现把conv的前传和反传过程对调一下即可
3,这里upsampling的操作可以看成是反卷积(deconvolutional),卷积运算的参数和CNN的参数一样是在训练FCN模型的过程中通过bp算法学习得到。fusion prediction
以上是对CNN的结果做处理,得到了dense prediction,而作者在试验中发现,得到的分割结果比较粗糙,所以考虑加入更多前层的细节信息,也就是把倒数第几层的输出和最后的输出做一个fusion,实际上也就是加和:
这样就得到第二行和第三行的结果,实验表明,这样的分割结果更细致更准确。在逐层fusion的过程中,做到第三行再往下,结果又会变差,所以作者做到这里就停了。可以看到如上三行的对应的结果:
问题&解决办法
1.如何做pixelwise的prediction?
传统的网络是subsampling的,对应的输出尺寸会降低,要想做pixelwiseprediction,必须保证输出尺寸。
解决办法:
(1)对传统网络如AlexNet,VGG等的最后全连接层变成卷积层。
例如VGG16中第一个全连接层是的,将之解释为512x7x7x4096的卷积核,则如果在一个更大的输入图像上进行卷积操作(上图的下半部分),原来输出4096维feature的节点处(上图的上半部分),就会输出一个coarsefeature map。
这样做的好处是,能够很好的利用已经训练好的supervisedpre-training的网络,不用像已有的方法那样,从头到尾训练,只需要fine-tuning即可,训练efficient。
(2)加In-network upsampling layer。
对中间得到的featuremap做bilinear上采样,就是反卷积层。实现把conv的前传和反传过程对调一下即可。
2.如何refine,得到更好的结果?
upsampling中步长是32,输入为3x500x500的时候,输出是544x544,边缘很不好,并且limit thescale of detail of the upsampling output。
解决办法:
采用skiplayer的方法,在浅层处减小upsampling的步长,得到的finelayer 和 高层得到的coarselayer做融合,然后再upsampling得到输出。
这种做法兼顾local和global信息,即文中说的combiningwhat and where,取得了不错的效果提升。FCN-32s为59.4,FCN-16s提升到了62.4,FCN-8s提升到62.7。可以看出效果还是很明显的。
3.训练细节
用AlexNet,VGG16或者GoogleNet训练好的模型做初始化,在这个基础上做fine-tuning,全部都fine-tuning。
采用wholeimage做训练,不进行patchwise sampling。实验证明直接用全图已经很effectiveand efficient。
对classscore的卷积层做全零初始化。随机初始化在性能和收敛上没有优势。
【实验设计】
1,对比3种性能较好的几种CNN:AlexNet, VGG16, GoogLeNet进行实验,选择VGG16
2,对比FCN-32s-fixed, FCN-32s, FCN-16s, FCN-8s,证明最好的dense prediction组合是8s
3,FCN-8s和state-of-the-art对比是最优的,R-CNN, SDS.
4,FCN-16s和现有的一些工作对比,是最优的
5,FCN-32s和FCN-16s在RGB-D和HHA的图像数据集上,优于state-of-the-art
1,训练一个end-to-end的FCN模型,利用卷积神经网络的很强的学习能力,得到较准确的结果,以前的基于CNN的方法都是要对输入或者输出做一些处理,才能得到最终结果。
2,直接使用现有的CNN网络,如AlexNet, VGG16, GoogLeNet,只需在末尾加上upsampling,参数的学习还是利用CNN本身的反向传播原理,"whole image training is effective and efficient."
3,不限制输入图片的尺寸,不要求图片集中所有图片都是同样尺寸,只需在最后upsampling时按原图被subsampling的比例缩放回来,最后都会输出一张与原图大小一致的dense prediction map。
根据论文的conclusion部分所示的实验输出sample如下图:
可以直观地看出,本文方法和Groud truth相比,容易丢失较小的目标,比如第一幅图片中的汽车,和第二幅图片中的观众人群,如果要改进的话,这一点上应该是有一些提升空间的。
当然是state-of-the-art的了。
感受一下:
当然是state-of-the-art的了。
感受一下:
本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
写在前面: 本文为安卓线程与JAVA线程的异同,请多多指正! 简述: 相信很多学安卓的都是从java入门之后开始进行安卓的学习,而当我们面临安卓线程的书写的时候,发现安卓线程并不是我们想象中使用java的线程写法就可以。 java线程的语法移植出错了? 这里我们简单的书写一个TextClock(由TextView 和Calendar组成),这里的Button用于终止时间。这里我们使用java上线程的写法来: public class MainActivity extends AppCompatActivi
说明:从今天开始,我阿赵打算写一些简单的教程,方便自己日后回顾,或者方便刚入门的朋友学习。水平有限请勿见怪。不过请尊重码字截图录屏的劳动,如需转载请先告诉我。谢谢!
unity自从3.5版本之后,增加了NavMesh寻路的功能。在此之前,unity用户只能通过第三方插件(如Astar寻路插件)等做寻路功能。阿赵我也使用过A*寻路插件,A*的原理并不复杂,有兴趣的朋友可以自己百度一下。不过由于不是自带的功能,所以在设定网格和烘焙的过程难免会出现很多不便。NavMesh作为unity自带的功
今年,“工匠精神”第一次被写入政府工作报告,而对于AppCan,“工匠精神”并不陌生。创立6年,AppCan始终是近乎低调的深研技术,自主研发出面向移动端的Hybrid混合开发技术,精心打磨产品,为技术人提供极致开发体验,是AppCan一直推崇和坚守的工匠精神。 中国第一个吃螃蟹的人,专注移动开发技术六年 2008年前后,Andriod、IOS、塞班等操作系统竞相角逐,王国春凭借敏锐的市场战略眼光,开始着手于研发跨平台的移动应用开发系统。王国春回忆道,“除了对行业的前瞻,更多的是对技术的追求。PC时代,软
一、关于性能优化的几处问题 1.是否应该手动调用System.gc()? 不应该。在Android 2.2 (API level 8)以及之前,当垃圾回收发生时,应用的线程是会被暂停的,这会导致一个延迟滞后,并降低系统效率。 从Android 2.3开始,添加了并发垃圾回收的机制,但是在GC开始和结束的时候仍然会阻塞主线程。 2.是否有必要调用Bitmap.recycle()方法? Android3.0之前需要,Android3.0以及之后不需要。 在Android 2.3.3 (API level 10
1.隐藏导航栏上的返回字体 //Swift UIBarButtonItem .appearance () .setBackButtonTitlePositionAdjustment (UIOffsetMake( 0 , - 60 ), forBarMetrics: .Default ) //OC [[ UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake( 0 , - 60 ) forBarMetrics
转载请注明出处: 王亟亟的大牛之路 之前的那个整合库又更新了,东西会越来越多,方便大家找素材和学习,这里再安利下: /ddwhan0123/Useful-Open-Source-Android 往常我们经常会用到SP,大致代码像这样: SharedPreferences sharedPreferences = getSharedPreferences( "wjj" , Context.MODE_PRIVATE); Editor editor = sharedPrefer
Siemens.SolidEdge ST6 MP12 Update Only Win32_64 2CD Solid Edge ST5 Win32_64 简体中文完整版 2DVD Solid Edge ST5 Win32_64 机械库和管道库 1DVD SolidEdge ST5 V105.00.00.102 English Win32_64-ISO 3DVD Solid Edge ST5 MP1 Update Only Win32_64 2CD SolidEdge ST4 v104.00.00.082 CN
Use merge/ tag 这merge/ 标签,帮助我们在include一个布局的时候,消除多余的View Groups,例如,你的主布局文件是一个竖直的linearlayout。 Linearyout xmlns:android = /apk/res/android Android:layout_width=”match_parent” Android:layout_height=”match_parent” Android:orientation
接着 git学习笔记(二) 学习,今天学习下git分支管理。 1.创建合并分支 默认创建的git目录只有master一个分支,现在我们创建dev分支,然后切换到dev分支: $ git checkout -b dev git checkout 命令加上 -b 参数表示 创建并切换 ,相当于以下两条命令: $ git branch dev $ git checkout dev 然后,用 git branch 命令查看当前分支: git branch命令会列出所有分支,当前分支前面会标一个*号。 然后,我们就
控件布局 xcode的自动布局让iOS开发更加便利,但是也存在许多的弊端,跟纯代码比起来省去了许多计算坐标以及繁复的语句,但是有些人认为自动布局不如代码灵活,总是能听到有人说这个用代码做可以实现,用自动布局实现不了,或许是可以实现的,只是对这个了解不深,当然我也只能在这里写些基础的东西。 现在xcode默认使用自动布局,因此直接把控件拖进controller,再将其约束起来就可以了,这里要说的就是如何按照不同的需求去约束。 这里不能像web那样一个个div块整整齐齐的分出来,而是要用尽量少的控件去搭出自己
Copyright (C)
ITfish.net

我要回帖

更多关于 faster rcnn github 的文章

 

随机推荐