RFCN论文笔记

R-FCN论文阅读(R-FCN: Object Detection via Region-based Fully Convolutional Networks 


 

目录

  • 作者及相关链接
  • 方法概括
  • 方法细节
  • 实验结果
  • 总结
  • 参考文献

 


 

作者及相关链接

  • 作者:

方法概括

  • R-FCN解决问题——目标检测

  • 整个R-FCN的结构

    • 一个base的conv网络如ResNet101, 一个RPN(Faster RCNN来的),一个position sensitive的prediction层,最后的ROI pooling+投票的决策层

  • R-FCN的idea出发点(关键思想)

    • 分类需要特征具有平移不变性,检测则要求对目标的平移做出准确响应。现在的大部分CNN在分类上可以做的很好,但用在检测上效果不佳。SPP,Faster R-CNN类的方法在ROI pooling前都是卷积,是具备平移不变性的,但一旦插入ROI pooling之后,后面的网络结构就不再具备平移不变性了。因此,本文想提出来的position sensitive score map这个概念是能把目标的位置信息融合进ROI pooling。

    • 对于region-based的检测方法,以Faster R-CNN为例,实际上是分成了几个subnetwork,第一个用来在整张图上做比较耗时的conv,这些操作与region无关,是计算共享的。第二个subnetwork是用来产生候选的boundingbox(如RPN),第三个subnetwork用来分类或进一步对box进行regression(如Fast RCNN),这个subnetwork和region是有关系的,必须每个region单独跑网络,衔接在这个subnetwork和前两个subnetwork中间的就是ROI pooling。我们希望的是,耗时的卷积都尽量移到前面共享的subnetwork上。因此,和Faster RCNN中用的ResNet(前91层共享,插入ROI pooling,后10层不共享)策略不同,本文把所有的101层都放在了前面共享的subnetwork。最后用来prediction的卷积只有1层,大大减少了计算量。

方法细节

  • Backbone architecture: ResNet 101——去掉原始ResNet101的最后一层全连接层,保留前100层,再接一个1*1*1024的全卷积层(100层输出是2048,为了降维,再引入了一个1*1的卷积层)。
  • k^2(C+1)的conv: ResNet101的输出是W*H*1024,用K^2(C+1)个1024*1*1的卷积核去卷积即可得到K^2(C+1)个大小为W*H的position sensitive的score map。这步的卷积操作就是在做prediction。k = 3,表示把一个ROI划分成3*3,对应的9个位置分别是:上左(左上角),上中,上右,中左,中中,中右,下左,下中,下右(右下角),如图Figuire 3。

  • k^2(C+1)个feature map的物理意义: 共有k*k = 9个颜色,每个颜色的立体块(W*H*(C+1))表示的是不同位置存在目标的概率值(第一块黄色表示的是左上角位置,最后一块淡蓝色表示的是右下角位置)。共有k^2*(C+1)个feature map。每个feature map,z(i,j,c)是第i+k(j-1)个立体块上的第c个map(1<= i,j <=3)。(i,j)决定了9种位置的某一种位置,假设为左上角位置(i=j=1),c决定了哪一类,假设为person类。在z(i,j,c)这个feature map上的某一个像素的位置是(x,y),像素值是value,则value表示的是原图对应的(x,y)这个位置上可能是人(c=‘person’)且是人的左上部位(i=j=1)的概率值。

 

  • ROI pooling就是faster RCNN中的ROI pooling,也就是一层的SPP结构。主要用来将不同大小的ROI对应的feature map映射成同样维度的特征,思路是不论对多大的ROI,规定在上面画一个n*n 个bin的网格,每个网格里的所有像素值做一个pooling(平均),这样不论图像多大,pooling后的ROI特征维度都是n*n。注意一点ROI pooling是每个feature map单独做,不是多个channel一起的。

 

  • ROI pooling的输入和输出:ROI pooling操作的输入(对于C+1个类)是k^2*(C+1)*W' *H'(W'和H'是ROI的宽度和高度)的score map上某ROI对应的那个立体块,且该立体块组成一个新的k^2*(C+1)*W' *H'的立体块:每个颜色的立体块(C+1)都只抠出对应位置的一个bin,把这k*k个bin组成新的立体块,大小为(C+1)*W'*H'。例如,下图中的第一块黄色只取左上角的bin,最后一块淡蓝色只取右下角的bin。所有的bin重新组合后就变成了类似右图的那个薄的立体块(图中的这个是池化后的输出,即每个面上的每个bin上已经是一个像素。池化前这个bin对应的是一个区域,是多个像素)。ROI pooling的输出为为一个(C+1)*k*k的立体块,如下图中的右图。更详细的有关ROI pooling的操作如公式(1)所示:

    

  

                          

 

 

  • vote投票:k*k个bin直接进行求和(每个类单独做)得到每一类的score,并进行softmax得到每类的最终得分,并用于计算损失

  • 损失函数:和faster RCNN类似,由分类loss和回归loss组成,分类用交叉熵损失(log loss),回归用L1-smooth损失

  • 训练的样本选择策略:online hard example mining (OHEM,参考文献1) 。主要思想就是对样本按loss进行排序,选择前面loss较小的,这个策略主要用来对负样本进行筛选,使得正负样本更加平衡。
  • 训练细节:
    • decay = 0.0005
    • momentum = 0.9
    • single-scale training: images are resized such that the scale (shorter side of image) is 600 pixels [6, 18].
    • 8 GPUs (so the effective mini-batch size is 8×), each GPU holds 1 image and selects = 128 RoIs for backprop.
    • fine-tune learning rate = 0.001 for 20k mini-batches,  0.0001 for 10k mini-batches on VOC.
    • the 4-step alternating training between training RPN and training R-FCN.(类似于Faster RCNN)
    • 使用atrous(hole算法)

实验结果

  • VOC2007和VOC2010上与Faster R-CNN的对比:R-FCN比Faster RCNN好!

  • 深度影响对比:101深度最好!

  • 候选区域选择算法对比:RPN比SS,EB好!

 

 

  • COCO库上与Faster R-CNN的对比:R-FCN比Faster RCNN好!

  • 效果示例:

总结

  • R-FCN是在Faster R-CNN的框架上进行改造,第一,把base的VGG16换车了ResNet,第二,把Fast R-CNN换成了先用卷积做prediction,再进行ROI pooling。由于ROI pooling会丢失位置信息,故在pooling前加入位置信息,即指定不同score map是负责检测目标的不同位置。pooling后把不同位置得到的score map进行组合就能复现原来的位置信息。
<think>好的,我需要帮助用户在WSL2环境下安装和配置RFCN深度学习框架。首先,我要回顾一下用户提供的引用内容,看看有没有相关的步骤可以借鉴。 根据引用[1],用户需要先设置WSL 2为默认版本并安装Ubuntu 22.04。这可能是一个前提条件,所以我要确认用户已经完成了这些步骤。如果还没有,可能需要先指导他们进行这些基础设置。引用[2]提到了在WSL2上安装GPU版本的PyTorch和CUDA 12.1,这可能对配置RFCN的GPU支持有帮助。引用[3]则提供了WSL2的更新包链接,用于安装Ubuntu系统和深度学习环境,这可能涉及到系统层面的配置。 接下来,RFCN本身不是一个独立的框架,通常是基于现有的深度学习框架如TensorFlow或PyTorch实现的。因此,用户可能需要先安装这些框架,然后从开源代码库中获取RFCN的实现。例如,Detectron2(基于PyTorch)或TensorFlow Models可能包含RFCN的代码。 我需要考虑以下步骤: 1. **确认WSL2和Ubuntu安装**:用户是否已经正确安装并配置了WSL2和Ubuntu 22.04?如果还没有,需要引用[1]中的命令来设置。 2. **安装GPU驱动和CUDA**:RFCN需要GPU加速,所以必须配置NVIDIA驱动、CUDA和cuDNN。引用[2]提到安装CUDA 12.1,但需要确认是否与用户的GPU兼容。通常,WSL2需要Windows端的NVIDIA驱动,然后在Linux侧安装CUDA工具包。 3. **安装深度学习框架**:根据RFCN的实现选择PyTorch或TensorFlow。引用[2]中的conda环境创建和框架安装步骤可以参考。 4. **获取RFCN代码库**:比如从GitHub克隆相关的仓库,并安装依赖项。 5. **安装依赖库**:如OpenCV、COCO API等,这些可能被RFCN所需。 6. **测试安装**:运行示例代码或训练脚本,确保一切正常。 需要注意的是,用户提到的“安装和配置RFCN深度学习框架”可能有些混淆,因为RFCN通常是模型而非框架,所以需要明确指导用户安装相应的框架和模型代码。此外,确保所有安装步骤在WSL2的Ubuntu环境中进行,并且正确配置GPU支持,可能需要参考引用[2]和[3]中的步骤。 另外,用户提供的引用中没有直接提到RFCN,所以可能需要依赖外部资源,如官方文档或GitHub仓库的安装说明。因此,在回答中应建议用户查阅RFCN实现的具体文档,并提供通用的安装步骤。同时,提醒用户注意版本兼容性,尤其是CUDA、cuDNN与深度学习框架的版本匹配。 最后,生成的相关问题需要围绕WSL2环境配置、CUDA安装、框架选择以及RFCN模型的使用展开,帮助用户进一步解决可能遇到的问题。</think>以下是在WSL2环境下搭建RFCN深度学习模型的步骤指南: ### 1. 确认WSL2环境配置 - 确保已启用WSL2并安装Ubuntu 22.04: ```bash wsl --set-default-version 2 wsl --install -d Ubuntu-22.04 ``` 详细步骤参考微软官方文档[^1] ### 2. 配置GPU支持 - 在Windows主机安装NVIDIA驱动(需GeForce Experience或Quadro驱动) - 在WSL2中安装CUDA工具包(以CUDA 12.1为例): ```bash wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600 sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/3bf863cc.pub sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/ /" sudo apt-get install cuda-12-1 ``` 验证安装:`nvidia-smi`应显示GPU信息[^2] ### 3. 创建虚拟环境 ```bash conda create -n rfcn python=3.9 conda activate rfcn ``` ### 4. 安装深度学习框架 推荐使用PyTorch(以CUDA 12.1版本为例): ```bash pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 ``` ### 5. 安装RFCN实现 推荐使用Detectron2框架的RFCN实现: ```bash pip install 'git+https://github.com/facebookresearch/detectron2.git' ``` ### 6. 安装依赖库 ```bash sudo apt install libgl1-mesa-glx pip install opencv-python pycocotools matplotlib ``` ### 7. 验证环境 ```python import torch print(torch.cuda.is_available()) # 应返回True from detectron2 import model_zoo print(model_zoo.get_config_file("RFCN/XXX.yaml")) # 具体配置文件需参考官方文档 ``` ### 常见问题处理 - **CUDA不可用**:检查WSL2内核版本(`uname -a`应≥5.10.60) - **显存不足**:调整batch size或使用`--shm-size`参数启动容器 - **性能优化**:在`/etc/wsl.conf`添加: ``` [wsl2] memory=8GB processors=4 ```
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值