FPN(Feature Pyramid Networks for Object Detection)安装与训练

本文详细介绍如何在Ubuntu16.04环境下安装并编译FPN-caffe框架,包括解决常见编译错误的方法,并提供了训练及测试的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FPN主要使用特征金字塔网络来融合多层特征,改进了CNN特征提取。其在小目标上取得了很大的进步。更多细节可以阅读论文。
下面分两个内容介绍:

1. 安装
2. 训练测试

1.安装

对于FPN有好几个框架实现的版本,如:caffe,mxnet 等。本文是对caffe 版本的FPN安装。

1.1 安装环境

 Ubuntu 16.04
 Python 2.7
 opencv 3.3.0

由于之前安装过caffe,所以很多caffe的依赖都已经安装好,这里不一一叙述,具体问题具体分析。可以参考caffe的ubuntu 安装方法安装必要的依赖。

1.2 下载源码并且编译

#下载源码, 第一个是最原始的代码,由于版本问题,一些依赖升级,导致了编译出现很多错误,所以这里直接fork 作者的代码到自己的工程,修改编译的Makefile 和 Makefile.config文件。

#git clone https://github.com/unsky/FPN-caffe.git
$ git clone https://github.com/abner2015/FPN-caffe.git
#编译 
#这里的编译方法其实是使用py-faster-rcnn的编译方法,和原作者的代码略有不同。如果你的编译出现了各种问题,不妨参考一下py-faster-rcnn的编译
$ cd caffe-FP_Net
$ make -j8 && make pycaffe
$ cd lib
$ make 

如果没有错误到了这里就完成编译了,但事实并没有那么顺利,下面列举出几个遇到的错误(附:如果是用本文的代码,有些问题可能不会出现,仅供参考)


> Error 1


 Check failed: registry.count(type) == 1 (0 vs. 1) Unknown layer type: Python 
在使用caffe的python层时经常容易出现如下错误:

Check failed: registry.count(type) == 1 (0 vs. 1) Unknown layer type: Python
其原因是没有开启对python的支持,需要在Makefile.conf文件中开启如下开关:

WITH_PYTHON_LAYER=1 
然后再
make && make pycaffe

#http://blog.csdn.net/lanyuxuan100/article/details/70231173

> Error 2

EnvironmentError: The CUDA lib64 path could not be located in /usr/lib64
gedit 打开 setup.py 改成以下:

    cudaconfig = {'home':home, 'nvcc':nvcc,  
                  'include': pjoin(home, 'include'),  
                  'lib64': pjoin(home, 'lib')}  

> Error 3

#对于下面的错误是直接修改配置文件的
Unsupported gpu architecture 'compute_61'
makefile.config中有cuda版本限制,设置的参数有可能cuda不支持。
可以参考本文代码的配置文件

> Error 4

Check failed: error == cudaSuccess (10 vs. 0)  invalid device

#可能命令中GPU 的 ID 不对,0写成1 或者1写成0

> Error 5

#这个原因是由于numpy 版本问题,所以修改源码
#参考教程:http://blog.csdn.net/mydear_11000/article/details/70241139


TypeError: 'numpy.float64' object cannot be interpreted as an index 
lib/roi_data_layer/minibatch.py

将:
fg_rois_per_image = np.round(cfg.TRAIN.FG_FRACTION * rois_per_image)
改为:
fg_rois_per_image = np.round(cfg.TRAIN.FG_FRACTION * rois_per_image).astype(np.int)
 lib/datasets/ds_utils.py

将:
hashes = np.round(boxes * scale).dot(v)
改为:
hashes = np.round(boxes * scale).dot(v).astype(np.int)
lib/fast_rcnn/test.py

将:
hashes = np.round(blobs['rois'] * cfg.DEDUP_BOXES).dot(v)
改为:
hashes = np.round(blobs['rois'] * cfg.DEDUP_BOXES).dot(v).astype(np.int)
lib/rpn/proposal_target_layer.py

将:
fg_rois_per_image = np.round(cfg.TRAIN.FG_FRACTION * rois_per_image)
改为:
fg_rois_per_image = np.round(cfg.TRAIN.FG_FRACTION * rois_per_image).astype(np.int)

> Error 6

TypeError: slice indices must be integers or None or have an __index__ method
#改成以下
for ind in inds:
        ind = int(ind)
        cls = clss[ind]
        start = int(4 * cos)
        end = int(start + 4)
        bbox_targets[ind, start:end] = bbox_target_data[ind, 1:]
        bbox_inside_weights[ind, start:end] = cfg.TRAIN.BBOX_INSIDE_WEIGHTS
    return bbox_targets, bbox_inside_weights

2. 训练测试

2.1 训练

首先下载预训练模型VGG16.v2.caffemodel,可以从py-faster-rcnn中下载

#训练
./experiments/scripts/FP_Net_end2end.sh 1 VGG16 pascal_voc
# VGG16.v2.caffemodel 路径可以在FP_Net_end2end.sh 修改
 time ./tools/train_net.py --gpu ${GPU_ID} \
  --solver models/${PT_DIR}/${NET}/FP_Net_end2end/solver.prototxt \
  --weights model/VGG16.v2.caffemodel  \
  --imdb ${TRAIN_IMDB} \
  --iters ${ITERS} \
  --cfg experiments/cfgs/FP_Net_end2end.yml \
  ${EXTRA_ARGS}

2.2 测试

./test.sh 1 VGG16 pascal_voc

参考文献:

  1. https://github.com/unsky/FPN-caffe
  2. https://github.com/rbgirshick/py-faster-rcnn
  3. http://blog.csdn.net/mydear_11000/article/details/70241139
### 回答1: 特征金字塔网络(Feature Pyramid Networks, FPN)是一种用于目标检测的神经网络架构。它通过在深层特征图上构建金字塔结构来提高空间分辨率,从而更好地检测小目标。FPN具有高效的多尺度特征表示和鲁棒性,在COCO数据集上取得了很好的表现。 ### 回答2: 特征金字塔网络(Feature Pyramid Networks,简称FPN)是一种用于目标检测的深度学习模型。该模型是由FAIR(Facebook AI Research)在2017年提出的,旨在解决单一尺度特征不能有效检测不同大小目标的问题。 传统的目标检测算法通常采用的是滑动窗口法,即在图像上以不同大小和不同位置进行滑动窗口的检测。但是,这种方法对于不同大小的目标可能需要不同的特征区域来进行检测,而使用单一尺度特征可能会导致对小目标的错误检测或漏检。FPN通过利用图像金字塔和多层特征提取,将不同尺度的特征合并起来,从而达到对不同大小目标的有效检测。 FPN主要分为两个部分:上采样路径(Top-Down Pathway)和下采样路径(Bottom-Up Pathway)。下采样路径主要是通过不同层级的卷积神经网络(CNN)来提取特征,每层都采用了非极大值抑制(Non-Maximum Suppression,NMS)方法来选择最具有代表性的特征。上采样路径则主要是将低层特征进行上采样操作,使其高层特征的尺寸对齐,并高层特征相加,实现特征融合。 FPN在目标检测中的优势体现在以下几个方面。首先,FPN可以提高模型对小目标的检测能力,同时仍保持对大目标的检测准确度。其次,FPN的特征金字塔结构可以在一次前向传递中完成目标检测,减少了计算时间。最后,FPN对于输入图像的尺寸和分辨率不敏感,可以在不同分辨率的图像上进行目标检测,从而适应多种应用场景。 总之,FPN是一种在目标检测领域中得到广泛应用的模型,其特征金字塔结构能够有效地解决单一尺度特征不足以检测不同大小目标的问题,并在检测准确率和计算效率方面取得了不错的表现。 ### 回答3: 特征金字塔网络是一种用于目标检测的深度学习模型,主要解决的问题是在不同尺度下检测不同大小的物体。在传统的卷积神经网络中,网络的特征图大小会不断减小,因此只能检测较小的物体,对于较大的物体则无法很好地检测。而特征金字塔网络则通过在底部特征图的基础上构建一个金字塔状的上采样结构,使得网络能够在不同尺度下检测不同大小的物体。 具体来说,特征金字塔网络由两个主要部分构成:共享特征提取器和金字塔结构。共享特征提取器是一个常规的卷积神经网络,用于提取输入图像的特征。而金字塔结构包括多个尺度的特征图,通过上采样和融合来获得不同尺度的特征表示。这些特征图之后被输入到后续的目标检测网络中,可以通过这些特征图来检测不同尺度的物体。 特征金字塔网络可以有效地解决目标检测任务中的尺度问题,并且在许多实际应用中表现出了优异的性能。例如,通过使用特征金字塔网络,在COCO数据集上得到的目标检测结果明显优于现有的一些目标检测算法。 总之,特征金字塔网络是一种非常有效的深度学习模型,可以处理目标检测任务中的尺度问题,提高模型在不同大小物体的检测精度。它在实际应用中具有很高的价值和应用前景。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值