具体的操作为什么这样做,可参照:
2.如何在caffe中自定义网络层
ROI pooling层
说起ROI Alignment,就要说道faster-rcnn的ROI pooling,
ROIpooling层结构是为了将原图像的rois映射到固定大小的feature map上。而此方法有一些缺点,会带来边缘像素的缺失
ROI Align的作用
详解 ROI Align 的基本原理和实现细节如果roi大小为(7,6),而roipooling是分成了(6,6)的部分,(7,6)到(6,6)的转换必然带来了边缘某像素的损失。而roialign利用双线性插值,将roi(7,6)插值扩充到(12,12),此时再做(6,6)的roipooling,会提高精度,充分利用了roi的像素。
用到的文件链接: https://pan.baidu.com/s/1-f98btUdxX5h8bFTKRxLmA 密码: mypk
1.~/py-faster-rcnn/caffe-fast-rcnn/include/caffe/layers 添加roi_align_layer.hpp
2.~/py-faster-rcnn/caffe-fast-rcnn/src/caffe/layers 添加roi_align_layer.cpp roi_align_layer.cu
3.~/py-faster-rcnn/caffe-fast-rcnn/src/caffe/proto 中caffe.proto添加add for roi align以下的
// Message that stores parameters used by ROIPoolingLayer
message ROIPoolingParameter {
// Pad, kernel size, and stride are all given as a single value for equal
// dimensions in height and width or as Y, X pairs.
optional uint32 pooled_h = 1 [default = 0]; // The pooled output height
optional uint32 pooled_w = 2 [default = 0]; // The pooled output width
// Multiplicative spatial scale factor to translate ROI coords from their
// input scale to the scale used when pooling
optional float spatial_scale = 3 [default = 1];
// add for roi align
optional float pad_ratio = 4[default = 0];
optional uint32 bi_type = 5 [default = 0];
optional bool is_multi_interpolate = 6 [default = true];
4.返回caffe-fast-rcnn路径下 make clean ,make -j64,make pycaffe
5.修改model文件夹下面的prototxt模型文件,将ROIPooling换成ROIAlign
---------------------------------------- 更新与2018年5月16日 --------------------------------------
如果你电脑出现下面这样的问题
roi_align_layer.cu:240] Check failed: error == cudaSuccess (7 vs. 0) too many resources requested for launch
【解决方法】:
1. 删除 roi_align_layer.cu文件
2. 打开roi_align_layer.hpp文件注释掉需要gpu加速的语句.(如下图)
3. 重新编译 make clean ,make -j64,make pycaffe
注意:如果不注释hpp的那一段,直接删除cu文件,重新编译会报错