目标检测0:layman学习Faster-RCNN算法(基于VOC数据进行训练)

分享:

Bubbliiiing的学习小课堂博主的专栏《睿智的目标检测》中对Faster-RCNN有较为详细的描述。
CSDN  链接 :睿智的目标检测27——Pytorch搭建Faster R-CNN目标检测平台
源代码下载   :https://github.com/bubbliiiing/faster-rcnn-pytorch
B站讲解链接:配置Tensorflow+Keras环境,搭建自己的Faster-RCNN目标检测平台
                        科普:什么是Faster-RCNN目标检测算法_哔哩哔哩_bilibili

VOA数据集:The PASCAL Visual Object Classes Challenge 2007 (VOC2007)

注:下面的交流内容会结合上面提到的源代码。

交流:

一、 略缩词

  1. RCNN:Region-based Convolutional Neural Network
  2. VOC: Visual Object Classes
  3. RPN:Region Proposal Network
  4. ROI:Regions of Interest
  5. IoU:  Intersection over Union
  6. NMS: Non-Maximum Suppression

 二、基本常识

1. 使用Faster-RCNN进行目标检测任务的具体执行过程

        这里放一张睿智的目标检测27——Pytorch搭建Faster R-CNN目标检测平台里面的图片,以方便对以下文字内容的理解。

  • 输入图像:
    接收一张待检测的图像作为输入。
  • 特征提取:
    将整个图像缩放到固定大小(由于后续网络中有全连接层),然后输入到卷积神经网络(CNN)中进行特征提取,得到特征图(K×K)维×N层。常用的Backbone网络有VGG、ResNet等。
  • 候选区域提取:
    构建区域建议网络(Region Proposal Network, RPN)对特征图假设为N×N×3)和预先设定的先验框假设每层特征图的每个维度有9个先验框)进行处理,生成一系列候选区域,即建议框/候选框。RPN网络会输出每个候选框的得分(表示该候选框是否包含目标物体的可能性)以及边界框的坐标信息。
  • 感兴趣区域(ROI)池化:
    将RPN网络生成的候选区域投影到特征图上,得到对应的特征矩阵。通过ROI池化层,将这些不同大小的特征矩阵缩放到统一大小(例如14x14),以便于后续的全连接层处理。
  • 目标分类和边界框回归:
    构建分类回归网络(classifier),将经过ROI池化后得到的特征向量输入到全连接层中,进行分类边界框回归。分类部分使用SoftMax分类器,判断每个候选区域所属的类别(包括背景类别)。边界框回归部分则用于微调候选区域的边界框,使其更准确地贴合目标物体的真实边界,即预测框
  • 非极大值抑制(NMS):
    在得到所有候选区域的类别和边界框后,使用非极大值抑制算法去除重叠度较高的候选区域,保留得分最高的候选区域作为最终的检测结果。
  • 输出结果:
    输出最终的检测结果,包括每个目标物体的类别、边界框坐标以及得分。

        总结:Faster-RCNN目标检测过程中需要构建的网络主要有ResNet50网络、RPN网络、classifier网络。并结合ROI池化层和非极大值抑制算法等技术手段,来实现目标检测。

2. Model.train_on_batch(input,label)

         model_all.train_on_batch 是深度学习框架(如 TensorFlow 的 Keras API)中的一个方法,用于在一个批次(batch)的数据上进行模型训练。当你调用这个方法时,它会根据提供的输入数据和对应的标签来更新模型的权重。以下是使用该方法的简要概述:

  • 输入数据:输入数据通常是一个列表,其中每个元素都是一个 numpy 数组或类似的数据结构(如 TensorFlow 张量)。在这个列表中,每个元素对应模型的一个输入分支。例如,在目标检测任务中,可能有一个输入分支用于整个图像,另一个输入分支用于特定区域的图像(ROI)。
  • 标签数据:标签数据也是一个列表,其中每个元素对应于模型的一个输出分支。这些标签通常是 numpy 数组或 TensorFlow 张量,包含用于监督学习的目标值。在目标检测中,这可能包括边界框坐标、类别标签等。
  • 前向传播:当 train_on_batch 被调用时,模型首先进行前向传播。输入数据通过模型的各个层进行传递,最终产生预测输出。这些预测输出与真实的标签数据进行比较,以计算损失。
  • 计算损失:对于模型的每个输出分支,都会有一个与之对应的损失函数。损失函数衡量了模型预测与真实标签之间的差异。所有输出分支的损失值通常会被组合成一个总的损失值,这通常是通过加权求和来完成的。
  • 反向传播:一旦损失被计算出来,模型就会进行反向传播。这个过程中,损失值通过模型的各个层反向传递,计算出每个权重对损失函数的梯度。
  • 更新权重:使用优化器(如 SGD、Adam 等)根据计算出的梯度来更新模型的权重。优化器决定了权重更新的方式和步长(学习率)。
  • 返回结果:train_on_batch 通常返回一个列表,其中包含每个输出分支的损失值(如果有多个输出分支)。在某些情况下,它还可能返回其他指标,如准确率等。

        需要注意的是,train_on_batch 只在一个批次的数据上进行训练,因此它通常被包含在一个更大的训练循环中,用于迭代整个数据集或多个epoch。此外,为了监控训练进度和防止过拟合,通常还会在训练过程中使用验证集,并在每个epoch结束时评估模型的性能。

3. 待进一步完善………………

  • 11
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值