目标检测——FasterRCNN原理与实现

news2024/11/25 13:08:02

目录

  • 网络工作流程
    • 数据加载
    • 模型加载
    • 模型预测过程
      • RPN获取候选区域
      • FastRCNN进行目标检测
  • 模型结构详解
    • backbone
    • RPN网络
      • anchors
      • RPN分类
      • RPN回归
      • Proposal层
    • ROIPooling
    • 目标分类与回归
  • FasterRCNN的训练
    • RPN网络的训练
      • 正负样本标记
      • RPN网络的损失函数
      • 训练过程
      • 实现
        • 正负样本设置
        • 损失函数
    • FastRCNN网络的训练
      • 正负样本标记
      • FastRCNN网络的训练
      • 训练过程
      • 实现
        • 正负样本设置
        • 损失函数
    • 共享卷积训练
    • 端到端训练
      • 数据加载
      • 模型实例化
      • 模型训练

网络工作流程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数据加载

只要In[16]就可以送入网络了,剩下的只是方便展示观看
在这里插入图片描述
在这里插入图片描述

模型加载

在这里插入图片描述

模型预测过程

分为两部分:RPN生成候选区域和Fast RCNN进行目标的分类与回归

RPN获取候选区域

在这里插入图片描述
在这里插入图片描述

FastRCNN进行目标检测

将获取的候选区域送入到Fast RCNN网络中进行检测
在这里插入图片描述
res是一个字典,其中rois是目标框,class_ids是所属的类别,scores是置信度
在这里插入图片描述

模型结构详解

在这里插入图片描述
在这里插入图片描述

backbone

在这里插入图片描述
在这里插入图片描述
FPN就是特征融合,使用多个特征图而不是使用一个特征图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

RPN网络

在这里插入图片描述

anchors

预设一组anchors(不同尺度,不同长宽比)
遍历特征图上的特征点,并映射回原图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

RPN分类

在这里插入图片描述
在这里插入图片描述

RPN回归

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Proposal层

利用回归结果对anchor的坐标进行修正
在这里插入图片描述
在这里插入图片描述

ROIPooling

确定proposal要映射到哪个特征图上,获取对应的候选框
将候选框进行H*W的网格划分
在每一个网络中取最大值得到ROIPooling的结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

目标分类与回归

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

FasterRCNN的训练

在这里插入图片描述

RPN网络的训练

在这里插入图片描述

正负样本标记

在这里插入图片描述

RPN网络的损失函数

在这里插入图片描述

训练过程

在这里插入图片描述

实现

正负样本设置

在这里插入图片描述
在这里插入图片描述

损失函数

在这里插入图片描述

FastRCNN网络的训练

在这里插入图片描述

正负样本标记

在这里插入图片描述

FastRCNN网络的训练

在这里插入图片描述

训练过程

在这里插入图片描述

实现

正负样本设置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

损失函数

在这里插入图片描述
在这里插入图片描述

共享卷积训练

在这里插入图片描述

端到端训练

在这里插入图片描述

数据加载

在这里插入图片描述
在这里插入图片描述

模型实例化

在这里插入图片描述

模型训练

#导入工具吧
from detection.datasets import pascal_voc
from detection.model.detectors import faster_rcnn
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np

#数据获取
train_dataset=pascal_voc.pascal_voc('train')
num_classes=len(train_dataset.classes)

#加载模型
model=faster_rcnn.FasterRCNN(num_classes=num_classes)

#优化器
optimizer=tf.keras.optimizers.SGD(1e-3,momentum=0.1,nesterov=True)

#损失函数变化列表
loss_his=[]

#使用tf.gradientTape进行训练
#epoch
for epoch in range(2):
    #获取索引
    indices=np.arange(train_dataset.num_gtlabels)
    np.random.shufflele(indices)
    #迭代次数
    iter=np.round(train_dataset.num_gtlabels/train_dataset.batch_size).astype(np.uint8)
    for idx in range(iter):
        #获取batch数据索引
        idx=indices[idx]
        #获取batch_size
        batch_image,batch_metas,batch_bboxes,batch_label=train_dataset[idx]
        #梯度下降
        with tf.GradientTape() as tape:
            #计算损失函数
            rpn_class_loss,rpn_bbox_loss,rcnn_class_loss,rcnn_bbox_loss=model((batch_image,batch_metas,batch_bboxes,batch_label),training=True)
            #总损失
            loss=rpn_class_loss+rpn_bbox_loss+rcnn_bbox_loss+rcnn_class_loss
            #计算梯度
            grads=tape.gradient(loss,model.trainable_variables)
            #更新参数值
            optimizer.apply_gradients(zip(grads,model.trainable_variables))
            print('epoch:%d,batch:%d,loss:%f'%(epoch+1,idx,loss))
            loss_his.append(loss)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/761492.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kubernetes 使用 helm 部署 NFS Provisioner

文章目录 1. 介绍2. 预备条件3. 部署 nfs4. 部署 NFS subdir external provisioner4.1 集群配置 containerd 代理4.2 配置代理堡垒机通过 kubeconfig 部署 1. 介绍 NFS subdir external provisioner 使用现有且已配置的NFS 服务器来支持通过持久卷声明动态配置 Kubernetes 持久…

大模型基础知识汇总

本文总结大模型相关基础知识,用于大模型学习入门 (持续更新中…) 文章目录 NLP 基础知识传统 NLP 知识NLU 与 NLG 各种任务的差异 Transformer 相关知识Pre Norm与Post Norm的区别?Bert 预训练过程手写 transformer 的 attention …

从0到1:跑团小程序开发心得笔记

背景介绍 随着健康意识的兴起,越来越多的人选择加入跑步俱乐部,不仅体验到了运动的乐趣,也感受到了人生的不同色,那么通过小程序,把俱乐部搬到手机上,通过小程序了解俱乐部动态和运动常识,可以…

C++自定义信号和QML的槽函数建立连接

0x00 在C代码在定义一个信号函数&#xff1a;“void sendData2UI(QString msg);”&#xff0c;该函数主要是将接收到的UDP消息发送到QML界面中 #ifndef UDPCLI_H #define UDPCLI_H#include <QObject> #include <QUdpSocket> #include <QString>class UdpCli …

【Netty】NIO基础(三大组件)

文章目录 三大组件Channel & BufferSelector ByteBufferByteBuffer 正确使用姿势ByteBuffer 内部结构ByteBuffer 常见方法分配空间向 buffer 写入数据从 buffer 读取数据mark 和 reset 字符串与 ByteBuffer 互转Scattering ReadsGathering Writes粘包、半包分析 附&#xf…

《啊哈算法》第一章--排序

文章目录 前言一、排序算法二、桶排序三、冒泡排序三、快速排序总结 前言 今年蓝桥杯没有拿到省一&#xff0c;所以就决定沉下心来学习算法&#xff0c;为了使得算法的学习更加稳固&#xff0c;所以就拿起了&#xff0c;最基础的且最经典的一本算法书《啊哈算法》&#xff0c;…

Redis进阶底层原理- 持久化

Redis作为基于内存的缓存数据库&#xff0c;就会存在断电即失的问题&#xff0c;所以数据的持久化是非常重要的。Redis随着版本升级迭代&#xff0c;持久化技术也在不断的升级&#xff0c;&#xff08;从最开始的RDB&#xff0c;到的Redis1.1版本加入AOF&#xff0c;3.0版本支持…

全志F1C200S嵌入式驱动开发(sd卡驱动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 说是sd卡,其实是micro sd卡,或者称之为tf卡更合适。一般的soc都支持从tf卡启动,所以用tf卡来学习soc、驱动和linux,对新人来说是比较合适的。前面我们已经用sd卡构建了一个类似…

uniapp:针对与富文本解析的几种方法

第一章、富文本的解析方法 1.1 uniapp自带组件&#xff1a;rich-text <rich-text :nodes"nodes"></rich-text> 1.2 v-html <view v-html"item.content"></view> 1.3 uview组件&#xff1a;u-parse <u-parse :content&quo…

学习babylon.js --- [3] 开启https

babylonjs提供WebVR功能&#xff0c;但是使用这个功能得用https&#xff0c;本文讲述如何使用自签名证书来开启https&#xff0c;基于第二篇文章中搭建的工程。 一 生成自签名证书 首先要安装openssl&#xff0c;这个去网上搜下就行了。安装完之后在终端下输入openssl回车可以…

DeepC 实用教程(三)环境数据

目 录 一、前言二、风谱/风剖三、洋流四、波浪4.1 规则波浪4.2 随机波浪谱 五、方向六、海床属性七、位置7.1 创建位置7.2 规则波时域条件7.3 随机波时域条件7.4 波浪散布图7.4.1 散布图分块7.4.2 时域条件 八、参考文献 一、前言 SESAM &#xff08;Super Element Structure A…

y0usef靶场详解

y0usef靶场详解 靶机感悟&#xff1a;对于这个靶机并没有太多的难点&#xff0c;也没有的别多的绊子&#xff0c;就是猜测下一步是什么&#xff0c;耐心的去思考怎么才能进行到下一步。 靶机下载地址&#xff1a;https://download.vulnhub.com/y0usef/y0usef.ova 这个靶机是…

每天一点Python——day55

#第五十五天Python内置数据结构&#xff1a;列表、字典、元组 本次学另外一种数据结构&#xff1a;集合 集合也是可变类型序列 重点&#xff1a;集合里面没有value&#xff0c;只有键&#xff0c;采用也是哈希函数#如图&#xff1a; #集合与字典的对比字典&#xff1a; 字典{ke…

Java 提供的线程安全集合

一、CopyOnWrite&#xff08;COW算法的容器&#xff09; 最终一致性、写分离思想。 用Volatile修饰&#xff0c;每次直接从内存地址中读取&#xff0c;读取时不加锁。 写时用显式锁整个容器&#xff08;防止其它写线程&#xff09;&#xff0c;然后拷贝一份副本&#xff0c;对…

【NLP】transformers的位置编码

一、背景 本文是“实现的变压器”系列的第二篇。它从头开始引入位置编码。然后,它

【Linux | Shell】结构化命令 - if 语句

目录 一、概述二、if-then 语句三、if-then-else 语句四、if-then-elif 语句五、嵌套 if 语句 一、概述 前面文章介绍了一些Shell脚本的基础知识&#xff0c;也了解了怎样构建一个shell脚本文件&#xff0c;让shell脚本执行一些基础的指令&#xff0c;但都是从上到下依次执行的…

少年侠客【InsCode Stable Diffusion美图活动一期】

少年侠客【InsCode Stable Diffusion美图活动一期】 文章目录 Stable Diffusion 模型在线使用地址第一张图第二张图第三张图第四张图第五张图第六章图 一、InsCode Stable Diffusion 体验1.1 界面很友好1.2 小小体验一下1.3 体验感受 二、如何在InsCode给Stable Diffusion安装L…

车载软件架构 —— 闲聊几句AUTOSAR OS(九)

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他人的角度来反对自己。人生在世,最怕的就是把别人的眼光当成自己生活的唯一标…

Keil中文注释乱码解决

1、打开Keil之后&#xff0c;点击Edit 2、点击Configuration 3、 选择Encording &#xff0c;在下拉列表中 选择Chinese GB2312 保存设置&#xff0c;重启keil。

4-1 Working with images

4-Real-world data representation using tensors How do we take a piece of data, a video, or a line of text, and represent it with a tensor in a way that is appropriate for training a deep learning model? This is what we’ll learn in this chapter. We menti…