目标检测入门系列手册四:Faster R-CNN 训练教程

简介: 目标检测入门系列手册四:Faster R-CNN 训练教程

>>戳此处立即下载电子书<<,学习全套目标检测算法&模型

image.png

Faster R-CNN

Faster R-CNN[3] 作为目标检测的经典方法在现今很多实战项目和比赛中频频出现。其实,Faster R-CNN 就是在Fast R-CNN 的基础上构建一个小的网络,直接产生region proposal 来代替通过其他方法(如selective search)得到ROI。这个小型的网络被称为区域预测网络(Region Proposal Network,RPN)。Faster R-CNN 的训练流程如图2-10 所示,其中的RPN 是关键,其余流程基本和Fast R-CNN 一致。

image.png

图2-10 Faster R-CNN 训练流程[9]

RPN 的思想是构建一个小的全卷积网络,对于任意大小的图片,输出ROI 的具体位置以及该ROI 是否是物体。RPN 网络在卷积神经网的最后一个特征层上滑动。

接下来我们对着图2-11 来进一步解释RPN 网络。图2-11(a)中最下面灰色的网格表示卷积神经网络的特征层,红框表示RPN 网络的输入,其大小为3×3,而后连接到256 维的一个低维向量。这3×3 的窗口滑动经过整个特征层,并且每次计算都将经过这256 维的向量并最终输出2 个结果:该3×3 滑动窗口位置中是否有物体以及该滑动窗口对应物体的矩形框位置。如果还是不好理解,我们将图2-11(a)中的RPN 网络顺时针旋转90 度,如图2-11(b)所示,现在可以很清晰地看出神经网络结构了,这里input 维度是9,即图2-11(a)中的3×3 大小。

image.png

(a)

image.png

(b)

图2-11 RPN 网络原理[3]

为了适应多种形状的物体,RPN 网络定义了k 种不同尺度的滑窗(因为有的目标是长的,有的是扁的,有的是大的,有的是小的,统一用一个3×3 的滑窗难以很好地拟合多种情况),这里给它一个专业的名词——anchor,每个anchor 都是以特征层(feature map)上的像素点为中心并且根据其尺度大小进行后续计算的。在Faster-RCNN 论文中,滑窗在特征层的每个位置上使用3 种大小和3 种比例共3×3=9 种anchor,在图2-11(a)中n=9。

根据上面的介绍我们知道RPN 网络有2 类输出:二分类网络输出是否是物体,回归网络返回矩形框位置对应的4 个值。

接下来,我们看一下训练过程中的一些细节问题。首先,针对分类任务,对于滑窗产生的每一个anchor 都计算该anchor 与真实标记矩形框的IOU。当IOU 大于0.7 时,便认为该anchor 中含有物体;当IOU 小于0.3 时,便认为该anchor 中不含物体;当IOU 介于0.3-0.7 之间时,则不参与网络训练的迭代过程。

对于回归任务,这里定义为anchor 中心点的横、纵坐标以及anchor 的宽高,学习目标为anchor 与真实bbox 在这四个值上的偏移。RPN 网络为一个全卷积网络,可以用随机梯度下降的方式端到端地进行训练。

这里需要注意,训练过程中能与真实物体矩形框相交的IOU 大于0.7 的anchor并不多,绝大多数都是负样本,因此会导致正负样本比例严重失衡,从而影响识别效果。因此,在RPN 训练的过程,每个batch 进行随机采样(每个batch 中有256个样本)并保证正负样本的比例为1:1,而当正样本数量小于128 时,取全部的正样本,其余的随机使用负样本进行补全。

使用RPN 网络产生ROI 的好处是可以和检测网络共享卷积层,使用随机梯度下降的方式端到端地进行训练。接下来我们看下Faster R-CNN 的训练过程:

(1)使用ImageNet 预训练好的模型训练一个RPN 网络。

(2)使用ImageNet 预训练好的模型,以及第(1)步里产生的建议区域训练Fast R-CNN 网络,得到物体实际类别以及微调的矩形框位置。

(3)使用(2)中的网络初始化RPN,固定前面卷积层,只有调整RPN 层的参数。

(4)固定前面的卷积层,只训练并调整Fast R-CNN 的FC 层。

有了RPN 的帮助,Faster R-CNN 的速度大大提升,(如图2-12 所示。RCNN、Fast R-CNN、Faster R-CNN 几个模型的对比如图2-13 所示。

image.png

图2-12 RCNN、Fast R-CNN、Faster R-CNN 模型耗时对比

image.png

图2-13 RCNN、Fast R-CNN、Faster R-CNN 模型对比

从R-CNN 到Faster R-CNN,前面讲了基于proposal 想法做目标检测的发展史,这种思路分为产生proposal 和检测两个步骤,可以得到相对较好的精度,但缺点是速度较慢。接下来我们介绍另外几种常用于检测的方法。

image.png

目录
相关文章
|
6月前
|
机器学习/深度学习 算法 安全
FRCNN来袭 | Faster RCNN与FCN永不遗忘,联邦学习+边缘数据既保护隐私也提升性能
FRCNN来袭 | Faster RCNN与FCN永不遗忘,联邦学习+边缘数据既保护隐私也提升性能
239 0
|
3天前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN)入门与实践
【8月更文挑战第62天】本文以浅显易懂的方式介绍了深度学习领域中的核心技术之一——卷积神经网络(CNN)。文章通过生动的比喻和直观的图示,逐步揭示了CNN的工作原理和应用场景。同时,结合具体的代码示例,引导读者从零开始构建一个简单的CNN模型,实现对图像数据的分类任务。无论你是深度学习的初学者还是希望巩固理解的开发者,这篇文章都将为你打开一扇通往深度学习世界的大门。
|
2月前
|
机器学习/深度学习 人工智能 算法
深度学习中的卷积神经网络(CNN)入门与实践
【9月更文挑战第19天】在这篇文章中,我们将探索深度学习的一个重要分支——卷积神经网络(CNN)。从基础概念出发,逐步深入到CNN的工作原理和实际应用。文章旨在为初学者提供一个清晰的学习路径,并分享一些实用的编程技巧,帮助读者快速上手实践CNN项目。
|
2月前
|
机器学习/深度学习 人工智能 TensorFlow
深度学习入门:理解卷积神经网络(CNN)
【9月更文挑战第14天】本文旨在为初学者提供一个关于卷积神经网络(CNN)的直观理解,通过简单的语言和比喻来揭示这一深度学习模型如何识别图像。我们将一起探索CNN的基本组成,包括卷积层、激活函数、池化层和全连接层,并了解它们如何协同工作以实现图像分类任务。文章末尾将给出一个简单的代码示例,帮助读者更好地理解CNN的工作原理。
53 7
|
1月前
|
机器学习/深度学习 PyTorch API
深度学习入门:卷积神经网络 | CNN概述,图像基础知识,卷积层,池化层(超详解!!!)
深度学习入门:卷积神经网络 | CNN概述,图像基础知识,卷积层,池化层(超详解!!!)
|
2月前
|
机器学习/深度学习 数据采集 数据可视化
深度学习实践:构建并训练卷积神经网络(CNN)对CIFAR-10数据集进行分类
本文详细介绍如何使用PyTorch构建并训练卷积神经网络(CNN)对CIFAR-10数据集进行图像分类。从数据预处理、模型定义到训练过程及结果可视化,文章全面展示了深度学习项目的全流程。通过实际操作,读者可以深入了解CNN在图像分类任务中的应用,并掌握PyTorch的基本使用方法。希望本文为您的深度学习项目提供有价值的参考与启示。
|
3月前
|
机器学习/深度学习 人工智能 自动驾驶
深度学习中的卷积神经网络(CNN)入门
【8月更文挑战第31天】在人工智能的璀璨星空中,卷积神经网络(CNN)如同一颗耀眼的星辰,以其卓越的图像处理能力在深度学习领域熠熠生辉。本文将带你领略CNN的魅力,从其结构原理到实战应用,深入浅出地探索这一技术的奥秘。我们将通过Python代码片段,一起实现一个简单的CNN模型,并讨论其在现实世界问题中的应用潜力。无论你是初学者还是有一定基础的开发者,这篇文章都将为你打开一扇通往深度学习世界的大门。
|
3月前
|
机器学习/深度学习
CNN网络编译和训练
【8月更文挑战第10天】CNN网络编译和训练。
89 20
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN)入门
【8月更文挑战第31天】在人工智能的浪潮中,深度学习以其强大的数据处理能力成为时代的宠儿。本文将引导你走进深度学习的核心组件之一——卷积神经网络(CNN),并带你一探其背后的奥秘。通过简明的语言和直观的代码示例,我们将一起构建一个简易的CNN模型,理解它在图像处理领域的应用,并探索如何利用Python和TensorFlow实现它。无论你是初学者还是有一定基础的开发者,这篇文章都将为你打开一扇通往深度学习世界的大门。

热门文章

最新文章