机器视觉基础系列2—简单了解用神经网络进行深度估计

机器视觉基础系列2—简单了解深度估计

在这里插入图片描述

深度估计

深度估计通俗的来讲就是要得到一张图像当中,哪些区域离得比较近,哪些区域离得比较远。

输入一张彩色得图像,我们输出深度估计得图像,深浅即为远近(从而完成了离相机距离的估计。

它是我们三维重建的基础环节,因为我们需要深度的信息

简单总结一下深度估计的应用场景:

  • AR,VR
  • 可以得到每个像素点的深度值
  • 辅助驾驶场景:
  • 获取各目标距离信息
  • 深度信息在三维世界中相当重要(坐标转换)三维重建

它有些类似于我们的分割任务:分割任务可以看作是对每一个像素点做一个预测,而我们的深度估计类似于对每一个像素点进行一个回归操作。

本质上说深度估计算是一个基础的任务了。

研究背景

在了解深度估计之后我们产生了一个疑问?因为之前从导师那里也了解到了激光雷达和3d点云这些东西。

这些完全可以完成3维空间的一个立体建模(其中一定包含深度的信息那为什么要用神经网络做深度估计和三维的重建呢?

原因就是激光雷达这些东西价格高成本高,普通的单目镜头比较便宜而已了

单目深度估计(End2End)用算法来进行实现。

使用的数据集

KITTI数据集(3d目标检测的一个常用的数据集

KITTI数据集官网:https://www.cvlibs.net/datasets/kitti/index.php
在这里插入图片描述

特点:广(深度,分割,检测,3D等)准确 经典

在这里插入图片描述
这个数据集是一个车载数据集(个人理解是坐在车上面拍出来的)。

在这里插入图片描述

网络模型

使用神经网络来进行深度估计。

论文题目:Monocular Depth Estimation Using Laplacian Pyramid-Based Depth Residuals
发表时间:2021
IEEE TRANSACTIONS ON CIRCUITS AND SYSTEMS FOR VIDEO TECHNOLOGY, VOL. 31, NO. 11, NOVEMBER 2021

在这里插入图片描述

对这一个用来进行深度估计的网络结构模型,进行拆解分开来看。

backbone特征提取

我们用RestNext101作为我们的backbone用来提取特征。(要考虑速度和精度来进行合理的选择。

从论文的网络结构图中我们也可以看出,它使用的多个尺度的层级信息。分别下采样2倍 4倍 8倍 和16倍的下采样操作。

从未体现出了特征的多样性。4个层,尺度大小各不相同,先准备好backbone输出。

深度估计的难度在哪里?难点主要就是在轮廓信息的处理上。我们通过多次的过程使得轮廓信息变得更加的清晰。

在这里插入图片描述
2. 那么在下一步我们需要得到输入图片的轮廓信息,就像网络图描述的那样。如何得到清晰的轮廓信息呢?

在这里插入图片描述
两个特征图做减法来提取差异特征。分别对各个层级都做这个事,提取不同尺度的差异

如何做特征图的减法呢?我们对其中的细节进行简单的描述。

其实它这一个过程和Unet的过程有些相似,将我们下采样得到的第四个特征图 16倍下采样的特征图,使用插值的方法进行上采样的操作

经过上采样,向后得到 16 8 4 2倍上采样的结果,将两侧的特征图相减提取出轮廓的信息。

特征融合

之前在YOLO V3和其他的一些网络结构中用到了spp模块部分。

Spatial Pyramid Pooling,设计该模块的目的是,确保输入全连接层之间的特征向量feature vector是固定尺寸。feature vector 是feature maps的展开,常规的做法是对输入的数据进行剪裁和变形操作,这两种操作可能引发裁剪区域没包含物体的全部或者目标无用,是真严重等问题;而SPP则是将不同feature maps展开为固定尺寸的feature vector。

在这里插入图片描述

优点:可以忽略输入尺寸并产生固定长度的输出;利用不同池化核尺寸提取特征的方式可以获得丰富的特征信息,有利于提高网络的识别精度。

但是resize会丢失相关的信息。

我们spp模块与我们的空洞卷积进行结合。

  • 让感受野更大,在不增加计算量的情况下
  • 并不用每个特征点都计算,分开
  • 可以设置空洞倍率来得到不同的特征图

在这里插入图片描述

对于我们的空洞卷积来说,因为中间的计算的叉开了会使得我们的计算不完全从而会缺少一些特征的提取。

但是换一种相反,我们将经过不同膨胀系数的空洞卷积得到的特征图进行一个像Spp一样的操作进行融合,能不能很好的改善这种效果呢?

在这里插入图片描述

结合之前提到的两个部分的思想于是就引出了我们的重点结构ASPP了

atrous spatial pooling pyramid

  • 主要集成了SPP的思想和空洞卷积
  • 文中只在backbone最后特征图做了一次

在这里插入图片描述

  • 其实就是希望特征多样性能体现出来

X表示拼接(特征图预测结果R5,差异结果L4,中间特征X4拼起来)

在这里插入图片描述

首先我们从图中来看R5其实表示的就是,16倍下采样得到的特征图经过(红色块)多尺度的卷积之后得到的深度图(使得我们的输出通道数为1)的一个预测结果我们称之为R5

这个网络的复杂之处就在于,使用了不同维度的特征来进行拼接。分析好这些连线之间的关系,对于理解这个网络结构十分重要。

  1. 先说明得到R4的一个特征融合的步骤。

在这里插入图片描述

  • 将得到的R5首先经过一个黄色块进行一个上采样的操作得到8倍的下采样的特征图。

  • 将绿色的部分作为一个中间结果,经过一个upconv在通过卷积层进行卷积

  • 同时我们提取到S/8直接经过一个卷积网络进行进一步的特征提取得到x4

  • 将轮廓图l4也进行一个输入

综上:就是按照图示的部分进行融合不断的进行特征的融合,最后通过卷积层得到最后的一个R4深度图的输出。

同理按照相同的套路进行递归或者说是循环,就可以依次的得到 R3 R3 R1的输出结果。 Coarse-to-Fine的一个过程。

先把整体做好,再还原细节

结果输出

最后的一步其实和许多检测网络的部分有很多类似的地方,我个人总结就是将之前得到的结果,与最后于原图像尺寸相同的部分,在进行依次融合的操作。

在这里插入图片描述

权重参数预处理

在这里插入图片描述
图中的蓝色部分代表的是权重参数的分布,主要集中在0附近。

在通过RELU激活函数就会出现问题传统套路是CONV+BN+RELU 现在是多一个预处理;也就是橙色部分的WS我们称之为权重参数的一个标准化。

在这里插入图片描述

损失函数

深度估计的损失函数:

D ( y , y ∗ ) = 1 2 n ∑ i = 1 n ( log ⁡ y i − log ⁡ y i ∗ + α ( y , y ∗ ) ) 2 D\left(y, y^{*}\right)=\frac{1}{2 n} \sum_{i=1}^{n}\left(\log y_{i}-\log y_{i}^{*}+\alpha\left(y, y^{*}\right)\right)^{2} D(y,y)=2n1i=1n(logyilogyi+α(y,y))2

yi指的是我们得到的一个深度的预测值。 yi*代表的是我们的真实值。

D ( y , y ∗ ) = 1 2 n 2 ∑ i , j ( ( log ⁡ y i − log ⁡ y j ) − ( log ⁡ y i ∗ − log ⁡ y j ∗ ) ) 2 = 1 n ∑ i d i 2 − 1 n 2 ∑ i , j d i d j = 1 n ∑ i d i 2 − 1 n 2 ( ∑ i d i ) 2 \begin{aligned} D\left(y, y^{*}\right) & =\frac{1}{2 n^{2}} \sum_{i, j}\left(\left(\log y_{i}-\log y_{j}\right)-\left(\log y_{i}^{*}-\log y_{j}^{*}\right)\right)^{2} \\ & =\frac{1}{n} \sum_{i} d_{i}^{2}-\frac{1}{n^{2}} \sum_{i, j} d_{i} d_{j}=\frac{1}{n} \sum_{i} d_{i}^{2}-\frac{1}{n^{2}}\left(\sum_{i} d_{i}\right)^{2} \end{aligned} D(y,y)=2n21i,j((logyilogyj)(logyilogyj))2=n1idi2n21i,jdidj=n1idi2n21(idi)2

di:表示的是预测值和真实值之间的差异,可以用下面的式子来进行表示。

log ⁡ y i − log ⁡ y i ∗ \log y_{i}-\log y_{i}^{*} logyilogyi

不是特别理解,后面如果理解了在补充吧

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Git安装与配置(2.47.0版本超详细)

一、背景 1.什么是gitt?(官网引用) Git 是一个快速、可扩展的分布式版本控制系统,它拥有异常丰富的命令集,可以提供高级操作和对内部的完全访问。 参阅 gittutorial[7] 开始使用,然后查看 giteveryday[7] …

【2022统考真题】计算时间复杂度

目录 一、题目描述 二、思路分析 三、易错提醒 四、同级和嵌套的关系 一、题目描述 下列程序段的时间复杂度是&#xff08;&#xff09; int sum 0; for (int i 1; i < n; i * 2) for (int j 0; j < i; j) sum; A. O(logn) B. O(n) C. O(nlogn) D…

使用Radzen Blazor组件库开发的基于ABP框架炫酷UI主题

一、项目简介 使用过ABP框架的童鞋应该知道它也自带了一款免费的Blazor UI主题&#xff0c;它的页面是长这样的&#xff1a; 个人感觉不太美观&#xff0c;于是网上搜了很多Blazor开源组件库&#xff0c;发现有一款样式非常不错的组件库&#xff0c;名叫&#xff1a;Radzen&am…

iEnglish「速成」板块上线,快速提升英语能力

10月17日&#xff0c;iEnglish智能升级版正式推出了「速成」板块&#xff0c;这一创新举措不仅是AI教育深度融合的体现&#xff0c;还为用户提供了更为高效的个性化学习体验。 据悉&#xff0c;「速成」板块旨在通过个性化的学习模式和多元化的练习方式&#xff0c;帮助用户实…

SSD |(九)ECC原理 | LDPC

文章目录 &#x1f4da;信号和噪声&#x1f4da;通信系统模型&#x1f4da;纠错编码的基本思想&#x1f407;编码距离&#x1f407;线性纠错码的基石——奇偶校验&#x1f407;校验矩阵H和生成矩阵G &#x1f4da;LDPC原理简介&#x1f407;LDPC是什么&#x1f407;Tanner图 &a…

scrapy案例——当当网的爬取一

项目名称&#xff1a;当当网的爬取一——爬取青春文学的书籍数据 案例需求&#xff1a; 1.使用scrapy爬虫技术爬取当当网中青春文学的书籍数据&#xff0c;包括&#xff08;标题、现价、定价、作者、出版日期、出版社、书本详情和书本图片url&#xff09; 2.将获取到的数据保…

免费开源的微信开发框架

近年来&#xff0c;随着人工智能技术的快速发展&#xff0c;聊天机器人在各个领域得到了广泛的应用。在社交媒体中&#xff0c;自动回复成为了一个流行的功能&#xff0c;让用户可以方便地与机器人进行互动。gewe框架&#xff0c;一个开源的微信聊天机器人框架&#xff0c;实现…

高刚性重切削数控走心机

高刚性重切削数控走心机&#xff0c;作为现代精密加工领域的佼佼者&#xff0c;以其卓越的性能和广泛的应用领域&#xff0c;赢得了众多行业的青睐。下面&#xff0c;我将从多个方面为您详细解析这种数控走心机。 ‌一、定义与特点‌ ‌定义‌&#xff1a;高刚性重切削数控走心…

【Java 并发编程】单例模式

前言 单例模式是一种十分常用但却相对而言比较简单的单例模式。虽然它简单但是包含了关于线程安全、内存模型、类加载机制等一些比较核心的知识点。本章会介绍单例模式的设计思想&#xff0c;会去讲解了几种常见的单例实现方式&#xff0c;如饿汉式、懒汉式、双重检锁、静态内部…

C++和OpenGL实现3D游戏编程【连载16】——详解三维坐标转二维屏幕坐标(向量和矩阵操作实战)

&#x1f525;C和OpenGL实现3D游戏编程【目录】 1、本节课要实现的内容 在上一课我们了解了着色器&#xff0c;了解了部分核心模式编程内容&#xff0c;从中接触到了线性代数中向量和矩阵相关知识&#xff0c;我们已经能够感受到向量和矩阵在OpenGL编程中的重要性。特别是后期…

Linux——传输层协议

目录 一再谈端口号 1端口号范围划分 2两个问题 3理解进程与端口号的关系 二UDP协议 1格式 2特点 3进一步理解 3.1关于UDP报头 3.2关于报文 4基于UDP的应用层协议 三TCP协议 1格式 2TCP基本通信 2.1关于可靠性 2.2TCP通信模式 3超时重传 4连接管理 4.1建立…

MySQL数据库的高可用

一、MHA工作原理 1、MHA的工作原理 1、MHA利用 select 1 as value 指令判断master服务器的健康性&#xff0c;一旦master宕机&#xff0c;MHA从宕机崩溃idmaster保存二进制日志事件&#xff08;binlog events&#xff09; 2、识别含有最新更新的slave 3、应用差异的中继日志&a…

bcprov-jdk15on-1.52.0.jar has unsigned entries - org/bouncycastle/LICENSE

报错界面如上图 解决办法&#xff1a; 1.修改引用jar包&#xff0c;将build.gradle里面的依赖为 implementation org.bouncycastle:bcprov-jdk15on:1.52 2.到maven上下载最新的bcprov-jdk15on-1.52.0.jar,替换文件夹中原有的jar包

C/C++每日一练:实现一个环形队列

队列&#xff08;queue&#xff09; 队列是一种先进先出&#xff08;FIFO&#xff0c;First In First Out&#xff09; 的数据结构&#xff0c;类似于排队的场景。最先进入队列的元素最先被处理&#xff0c;而后加入的元素则排在队列的末尾。 常见的队列操作&#xff1a; 入队…

第二届中国楚域品牌文化创新发展大会暨楚域尚品发布会在汉圆满落幕

10 月 19 日&#xff0c;“第二届中国楚域品牌文化创新发展大会暨楚域尚品发布会”在武汉市光谷九通海源大酒店隆重举行。本次大会由中国商业文化研究会传承创新工作委员会、楚域品牌文化传承创新工作委员会、华夏品牌文化创新发展大会组委会主办&#xff0c;湖北省企业文化促进…

python爬虫简易入门示例

版本环境 win11python 3.12.4 目标&#xff1a;爬取https://gitee.com/explore的列表内容&#xff0c;并写入txt文本 效果 开始 1.安装依赖 pip install requests beautifulsoup42.编写代码&#xff0c;如下&#xff0c;详见注释 import requests from bs4 import Beauti…

【PFGA】二选一数选器

文章目录 前言一、实验原理二、实验过程三、实验结果参考文献 前言 进行 verilog FPGA 实验 一、实验原理 二、实验过程 三、实验结果 代码 module mux21(input s,input a,input b,output reg y); always(s or a or b) beginif (~s) beginy<a;end else beginy<…

ollama+ollama-webu在windos上部署的教程

ollamaollama-webu在windos上部署的教程 一、需要准备的环境和代码二、开始部署1. 修改系统变量&#xff1a; 常见问题 首先介绍一下ollama&#xff1a; Ollama 是一种为快速大规模语言模型推理所设计的框架和平台。它旨在帮助用户通过高效的方式运行和管理大型语言模型&#x…

使用AITemplate和AMD GPU的高效图像生成:结合Stable Diffusion模型

Efficient image generation with Stable Diffusion models and AITemplate using AMD GPUs 2024年1月24日&#xff0c;作者是[Douglas Jia] Stable Diffusion 已成为图像生成领域的突破性进展&#xff0c;帮助用户将文本描述转化为引人入胜的视觉输出。 Stable Diffusion 的…

SAP_通用模块-MASS批量操作技巧(二)

业务背景&#xff1a; 前两天写了一篇关于MASS批量操作的文档&#xff0c;当时测试批量扩充物料视图的时候失败了&#xff0c;就没记录进去&#xff0c;然后手头上刚好有一个需求&#xff0c;就是物料已经有基本视图等相关信息的情况下&#xff0c;需要扩充相关的物料视图。方法…