基于深度学习的图像边缘和轮廓提取

news2024/11/15 0:09:30

导读:边缘和轮廓的提取是一个非常棘手的工作,细节也许就会被过强的图像线条掩盖,纹理(texture)本身就是一种很弱的边缘分布模式,分级(hierarchical)表示是常用的方法,俗称尺度空间(scale space)。以前做移动端的视觉平台,有时候不得不把一些图像处理功能关掉,原因是造成了特征畸变。现在 CNN 模型这种天然的特征描述机制,给图像预处理提供了不错的工具,它能将图像处理和视觉预处理合二为一。

边缘提取

1. HED

整体嵌套边缘检测(Holistically-Nested Edge Detection,HED 是一个深度学习的边缘提取的算法,两个特色:(1)整体图像训练和预测; (2)多尺度、多层特征学习。该深度模型利用全卷积网络,自动学习丰富的分层表示(基于侧面响应的深层监督指导)。

多尺度深度学习可分为四类,即多流学习(multi-stream)、跳网(skip-net learning)学习、多输入单模型以及独立网训练,如图所示:(a)多流架构; (b)跳网架构; (c)多尺度输入的单一模型; (d)不同网络独立训练; (e)HED,其中添加多个侧面输出。

在表示和计算复杂性方面,(a)-(d)方法存在冗余。(e)HED 是一个相对简单的变体,能够从多个尺度产生预测。该结构可以被解释为(d)“独立网络”法的“整体嵌套”版,包括多个侧输出的单流深度网络。隐藏层监督可以改善图像分类任务的优化和泛化。如果需要统一输出,多侧向输出可以灵活地添加额外的融合层。

如图是 HED 的网络架构图,在卷积层之后插入侧输出层,在每个侧输出层施加深度监督,引导侧输出成为边缘预测。HED 输出是多尺度多层,侧输出面变小,感受野变大。一个加权融合层自动学习如何组合来自多个尺度的输出。整个网络通过多个误差传播路径(虚线)训练。

图片

下图给出HED的部分实验结果。(a)测试图像;(b)手工标注的边缘;(c)HED 结果。(d)、(e)和(f)卷积神经网络的层2、3和4的侧边响应。(g)、(h)和(i)Canny 边缘检测器在尺度 σ= 2.0、σ= 4.0 和 σ= 8.0 的边缘响应。HED 与 Canny 在一致性方面显示出明显的优势。

图片

2. CASENet

CASENet 将每个边缘像素与多于一个的边缘类相关联,是一种基于 ResNet 的端到端深度语义边缘学习的架构,同时也是一种跳层(skip-layer)架构,其中顶层卷积层的类别边缘激活共享并与底层特征的同一集融合,这里一种多标签损失函数来监督激活的融合。

三种 CNN 架构的比较如图(a)-(c)所示。图中实心矩形表示 CNN 层的组合块。宽度减小表示输出特征图的空间分辨率下降2倍。箭头旁边的数字表示输出特征的通道数。蓝色实心矩形是一堆 ResNet 块。紫色实心矩形是分类模块。红色虚线框表示输出由损失函数监控。灰色实心矩形是侧面特征提取模块。深绿色实心矩形是融合分类模块,执行 K 个分组1×1卷积。图(d)-(h)是图(a)-(c)中模块细节,其中矩形是输入和输出特征图。

图片

图(a)是基础网络,采用全卷积网络框架,在 ResNet-101 删除平均池化和全连接层并保留底部卷积块;将 ResNet-101 中第一个和第五个卷积块(“res1”和“res5”)的步幅从2改为1;将扩张因子(dilation factors)引入后续的卷积层以保持原始 ResNet 相同的感受野;在基础网络的顶部,添加分类模块(图(d))作为1×1卷积层,然后是双线性上采样(由 K 分组反卷积层实现)产生一个 K 个激活图 { A1,···,AK } 的集合,其中每个激活图都与图像尺寸相同;然后,Yk(p)=σ(Ak(p))定义的 sigmoid 单元对像素属于第 k 类边缘的概率建模。

前面 HED 网络的基本思路是除了顶部网络损失以外还考虑底层卷积损失。另外,通过监督侧面激活的线性组合来获得融合边缘图。不过,HED 仅执行二进制边缘检测。深度监督网络(DSN)扩展了这种架构,处理侧输出的K通道和最终输出的 K 通道,如图(b)所示。在该网络中,将上述分类模块连接到每个残差块的输出,产生5个侧分类激活图 { A(1), ... , A(5)},其中每个激活图都有K通道。然后,通过切片连接层(sliced concatenation layer)融合这5个激活图(图中颜色表示图(g)的通道索引)产生 5K 通道激活图:

图片

Af 馈入融合分类层,该分类层执行 K-组 1×1卷积(图(f))产生 K-通道激活图A(6)。最后,在激活图 {A(1),...,A(6)}计算6个损失函数,为该网络提供深入监督。

由于监督5个侧面激活,隐含地约束了那些侧面激活的每个通道只带有该类别最相关的信息。由于切片级联和分组卷积,像素 p 的融合激活由下式给出:

图片

CASENet 采用嵌套式架构(nested architecture),改进点如下:

① 将底部分类模块更换为特征提取模块。

② 放置分类模块,仅在网络顶部施加监督。

③ 采用共享串联(图(h))而不是切片连接。

侧面特征提取和侧面分类之间的区别在于前者仅输出单个通道特征图 F(j)而不是 K 类激活。共享级联从 Side-1-3 复制底部特征 F = {F(1),F(2),F(3)},分别与 K 个顶部激活的每一个相连接:

图片

到的连接激活图再被馈送到有 K-分组卷积的融合分类层,产生 K-通道激活图 A(6)。

通常 CASENet 被认为是联合边缘检测和分类的网络,它让较低级的特征参与并通过跳层结构增强高级的语义分类。

下图是 CASENet 和 DSN 的结果比较,从左到右:输入,基础事实,DSN 和 CASENet。CASENet 在具有挑战性的目标上显示出更好的检测质量,而 DSN 在非边缘像素有更多的误报。

轮廓提取

1. DeepEdge

以前大多使用纹理或显著性等低级特征来检测轮廓,而 DeepEdge 利用目标相关特征作为轮廓的高级线索检测。设计的是多级深度网络,由五个卷积层和一个分叉全连接子网络(bifurcated fully-connected subnetwork)组成。从输入层到第五个卷积层是预训练网络,直接用于图像输入的四个不同尺度。将这四个平行且相同的数据流连接到两个独立训练的分支组成的分叉子网络,一个分支学习预测轮廓似然(以分类为目标),而另一个分支训练学习在给定点轮廓的存在(基于回归测度),如图是 DeepEdge 架构图,其中 Canny 边缘检测器提取候选轮廓点,然后在每个候选点周围,提取四个不同尺度的补丁,同时通过预训练的 KNet 五个卷积层。

一个解释模型架构的单尺度示意图,在下图给出:首先,输入以候选点为中心的补丁,经过 KNet 五个卷积层;为了提取高级特征,在每个卷积层提取围绕中心点的特征图的小子容积,并在子容积上执行最大、平均和中心池化。池化值馈入分叉子网络。测试时,从分叉子网络的分支计算的标量输出做平均,生成最终轮廓预测。

图片

如图给出部分实验结果:左到右依次为输入图像、Canny 边缘检测器产生的候选点集合、非阈值预测、阈值预测和基础事实图。为了生成阈值预测,概率阈值设为0.5。

图片

2. CEDN

另外一种方法利用全卷积编码器-解码器网络(CEDN),端到端训练的数据来自 PASCAL VOC 中修正的不准确的多边形标注,其网络架构如图所示。

图片

部分实验结果见图:从左到右依此是(a)输入图像,(b)GT 轮廓,(c)具有预训练 CEDN 的轮廓检测,和(d)具有细调 CEDN 的轮廓检测。

图片

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

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

相关文章

PWN环境配置

虚拟机安装 镜像下载网站(http://old-releases.ubuntu.com/releases/)虚拟机建议硬盘 256 G 以上,内存也尽量大一些。硬盘大小只是上界,256 G 不是真就占了 256G,而后期如果硬盘空间不足会很麻烦。lsb_release -a查看版本更换 ubuntu 镜像源…

【教程】怎么给网站添加弹窗广告代码javascript

由于最近支付宝悬赏领红包活动比较多邀请别人扫码自己也有奖励于是就想到了给自己网站上添加一个这种弹窗广告用户可以自己领取红包 效果图 代码也很简单下面附上代码 首先引入jquery <script src”https://pay.codewo.cn/static/index/user/assets/vendor/libs/jquery/j…

绘出你的梦中情人,AI绘画Stable Diffusion 万金油模型推荐 ,助你快速涨粉!

嘿&#xff0c;大家好&#xff0c;我是向阳 到目前为止&#xff0c;我已经分享了近百篇AI绘画类的文章教程以及模型分享 其中有些模型已经无法下载了&#xff0c;原因懂得自懂 你是否也和我一样&#xff0c;每天看着这样的小姐姐乐不思蜀&#xff0c;简单的提示词就能实现你…

用C#(WinForm)开发触摸屏,体验感满满

用C#&#xff08;WinForm&#xff09;开发触摸屏&#xff0c;体验感满满

基于粒子群优化算法的的微电网多目标优化调度----解析代码

前言&#xff1a; 写在这里&#xff0c;这是我小论文的方向&#xff0c;但是以前从来没有接触过微电网及优化调度算法&#xff0c;所以呢&#xff0c;开始展开积极自救。两个月前&#xff0c;我开始重拾Matlab编程以及最简单的微电网知识&#xff0c;以及看一些论文&#xff0c…

AI大模型探索之路-实战篇:智能化IT领域搜索引擎的构建与初步实践

系列篇章&#x1f4a5; No.文章1AI大模型探索之路-实战篇&#xff1a;智能化IT领域搜索引擎的构建与初步实践2AI大模型探索之路-实战篇&#xff1a;智能化IT领域搜索引擎之GLM-4大模型技术的实践探索3AI大模型探索之路-实战篇&#xff1a;智能化IT领域搜索引擎之知乎网站数据获…

【机器学习】基于CNN-RNN模型的验证码图片识别

1. 引言 1.1. OCR技术研究的背景 1.1.1. OCR技术能够提升互联网体验 随着互联网应用的广泛普及&#xff0c;用户在日常操作中频繁遇到需要输入验证码的场景&#xff0c;无论是在登录、注册、支付还是其他敏感操作中&#xff0c;验证码都扮演着重要角色来确保安全性。然而&am…

代码随想录:回溯19

332.重新安排行程 题目 给你一份航线列表 tickets &#xff0c;其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK&#xff08;肯尼迪国际机场&#xff09;出发的先生&#xff0c;所以该行程必须从…

C语言面试题总结(含参考答案)------持续更新

1、关键字static的作用是什么&#xff1f; 在函数内部使用static修饰局部变量时&#xff0c;表示该变量在程序的整个生命周期内只会被初始化一次&#xff0c;并且在函数调用结束后不会被销毁&#xff0c;其值会一直保持。这种特性使得静态局部变量成为一种很有用的工具&#xf…

【ARM】MDK出现报错error: A\L3903U的解决方法

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决MDK出现报错error: A\L3903U这样类型的报错 2、 问题场景 电脑或者软件因为意外情况导致崩溃&#xff0c;无法正常关闭&#xff0c;强制电脑重启之后&#xff0c;打开工程去编译出现下面的报错信息&#xff08;…

怎么把pdf格式文件其中几页单独弄出来

在现代办公和学习环境中&#xff0c;pdf格式的文件因其跨平台兼容性和良好的保持原样特性而备受欢迎。然而&#xff0c;有时我们可能只需要pdf文件中的某几页&#xff0c;而不是整个文件。这时&#xff0c;将PDF文件中的特定页面单独提取出来就显得尤为重要。 搜索一下&#xf…

React基础教程:TodoList案例

todoList案例——增加 定义状态 // 定义状态state {list: ["kevin", "book", "paul"]}利用ul遍历list数组 <ul>{this.state.list.map(item ><li style{{fontWeight: "bold", fontSize: "20px"}} key{item.i…

后端项目实战--瑞吉外卖项目软件说明书

瑞吉外卖项目软件说明书 一、项目概述 瑞吉外卖项目是一个外卖服务平台&#xff0c;用户可以通过该平台浏览餐厅菜单、下单、支付以及追踪订单状态。产品原型就是一款产品成型之前的一个简单的框架&#xff0c;就是将页面的排版布局展现出来&#xff0c;使产品得初步构思有一…

Linux ldd和ldconfig

ldconfig ldconfig 查看默认库路径和ld.so.conf包含的库路径&#xff0c;来建立运行时动态装载的库查找路径。 ldconfig命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),…

推挽式B类功率放大器的基本原理

单晶体管 B 类放大器&#xff08;图 1&#xff09;使用高 Q 值储能电路作为负载来抑制高次谐波分量。通过采用高 Q 谐振电路&#xff0c;输出电压仅包含基波分量&#xff0c;使放大器能够忠实地再现输入信号。尽管集电极电流是半波整流正弦波&#xff0c;但高 Q 值储能电路将谐…

11_1、多态性:概念及运算符重载

多态性 多态的概念和类型多态的类型多态的实现 运算符重载运算符重载的概念和规则概念规则 运算符重载为类的成员函数双目运算符单目运算符 运算符重载为类的友元函数双目运算符重载单目运算符重载 多态的概念和类型 消息&#xff1a;消息在C编程中指的是对类的成员函数的调用…

【C++进阶】模板与仿函数:C++编程中的泛型与函数式编程思想

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;栈和队列相关知识 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀模板进阶 &#x1f9e9;<&…

深度学习之激活函数

激活函数&#xff08;Activation Function&#xff09;是一种添加到人工神经网络中的函数&#xff0c;旨在帮助网络学习数据中的复杂模式。在神经元中&#xff0c;输入的input经过一系列加权求和后作用于另一个函数&#xff0c;这个函数就是这里的激活函数。 1. 为什么需要激活…

在Oxygen中如何打开文件管理器并显示文件所在目录

▲ 搜索“大龙谈智能内容”关注公众号▲ 在Oxygen中&#xff0c;我们常需要查看项目中的某文件在Windows“文件资源管理器”所在位置&#xff0c;从而进行拷贝、分享等各种操作。 通过以下方法可以实现&#xff1a; 1. 在Oxygen的“项目”中选择文件并单击右键 2. 选择菜单…

数据可视化后起之秀——pyecharts

题目一&#xff1a;绘制折线图&#xff0c;展示商家A与商家B各类饮品的销售额 题目描述&#xff1a; 编写程序。根据第9.3.1&#xff0c;绘制折线图&#xff0c;展示商家A与商家B各类饮品的销售额。 运行代码&#xff1a; #绘制折线图&#xff0c;展示商家A与商家B各类饮品的…