HED 和 RCF 图像边缘检测
HED 和 RCF 图像边缘检测
引言
虽然传统边缘检测算法在不断发展的过程中也取得了很大的进步,但仍然无法做到精细的边缘检测处理。随着近年来深度学习的快速发展,计算机视觉领域因此获益颇丰,当下最先进的计算机视觉应用几乎都离不开深度学习,深入我们生活的各个领域如目标检测、工业、农业、医疗等。由于深度学习的特性,使得它成为最适合处理计算机视觉任务的工具之一,特别是卷积神经网络(CNN),得益于它强大的自动学习能力,图像边缘检测任务得到了长足的发展,涌现出了许多优秀的方法,如 N4-field、DeepContour、HED、RCF,基于神经网络的边缘检测算法成为了研究热点之一。
本文主要介绍基于 HED 网络的图像边缘检测的基本情况,对 HED 的网络架构和损失函数进行分析讨论。此外也将对另一个基于 HED 的网络,RCF 网络进行探究,对其进步之处进行分析。
HED 图像边缘检测
Holistically-Nested Edge Detection(简称 HED)由 Xie 等人提出。作为图像边缘检测领域一种比较经典的网络,HED 网络的出现对之后出现的各种图像边缘检测算法都有着启发式的贡献,解决了在计算机视觉领域存在的两个重要问题:
- 基于整体图像的训练和预测;
- 多尺度,多层次的特征学习。
在 HED 网络出现之前,大多数边缘检测方法如 N4-field、DeepEdge、DeepContour 等都是基于局部区域的算法。虽然通过 CNN 的学习能力上述方法也取得了不错的边缘检测性能,但也存在计算成本高,测试成本高的缺陷。而基于整体图像的训练和预测通过直接对图像中的每个像素进行判断,简单高效精确度高。
另外一方面,HED 网络拥有多个侧输出的单流深层网络,能够通过多尺度的学习,对中间细节进行丰富的特征提取。相比于直接利用输出层的最终结果,多尺度多层次的特征学习会拥有更好地边缘检测结果。
HED 网络架构
HED 网络架构建立在 VGG16 网络的基础之上,但做出了两方面的修改:
- 为了进行多尺度多层次的特征学习,在 VGG16 网络每个阶段的最后一个卷积层(conv1_2,conv2_2,conv3_3,conv4_3,conv5_3)之后添加侧输出层。
- 为了节约网络训练的内存/时间成本,去掉了最后一个池化层和之后的全连接层。
完整的网络结果如下图所示。通过将卷积层后引出的 5 个侧输出以及 5 个侧输出经过融合层后的结果同时进行训练,计算 6 个损失函数。通过多个侧输出,进行多尺度的学习,对中间细节进行特征提取。对于每个侧输出,通过双线性差值算法进行上采样,还原到原始图像的尺寸,通过融合层输出结果。
HED 损失函数
在 HED 网络中,损失函数由两部分共同构成:侧输出层的损失函数 Lside\mathcal{L}_{side}Lside 和融合层的损失函数 Lfuse\mathcal{L}_{fuse}Lfuse。之后通过梯度下降法得到损失函数:
(W,w,h)∗=argmin(Lside(W,w)+Lfuse(W,w,h))(W,w,h)^* = arg \min (\mathcal{L}_{side} (W,w) + \mathcal{L}_{fuse} (W,w,h)) (W,w,h)∗=argmin(Lside(W,w)+Lfuse(W,w,h))
其中 W 表示网络参数集合,w 表示侧输出层参数,h 表示融合权重。
(1)侧输出层的损失函数
HED 网络侧输出层的损失函数 Lside\mathcal{L}_{side}Lside :
Lside(W,w)=∑m=1Mαmlside(m)(W,w(m))\mathcal{L}_{side} (W,w)=\sum_{m = 1}^M \alpha_{m} \mathcal{l}_{side}^{(m)} (W,w^{(m)}) Lside(W,w)=m=1∑Mαmlside(m)(W,w(m))
其中 W 表示网络参数集合,w 表示侧输出层参数,M 表示侧输出层的数量,αm\alpha_mαm 表示每个侧输出层损失函数的权值。
HED 网络通过在每个像素项的基础上引入一个平衡权重 β,来自动平衡正负样本之间的损失。在边缘检测任务中,边缘像素在全部像素中所占的比例往往非常小,边缘像素和非边缘像素的不均衡对网络学习会产生非常严重的影响,导致最终结果检测出许多非边缘像素,平衡权重 β 的加入,正是为了解决这个问题。使用交叉熵损失函数。具体来说,若图像中边缘像素数量少,那么 β 值较小,第一项的权值较轻,而此项表示的是非边缘像素的损失,因此损失较小。
Lside(m)(W,w(m))=−β∑j∈Y+logPr(yj=1│X;W,w(m))−(1−β)∑j∈Y−logPr(yj=0│X;W,w(m))\begin{aligned} \mathcal{L}_{side}^{(m)} (W,w^{(m)}) = & - \beta \sum_{j\in Y_+} \log Pr(y_j = 1│X;W,w^{(m)}) \\ & - (1 - \beta) \sum_{j \in Y_-} \log Pr(y_j = 0 │X;W,w^{(m)}) \end{aligned} Lside(m)(W,w(m))=−βj∈Y+∑logPr(yj=1│X;W,w(m))−(1−β)j∈Y−∑logPr(yj=0│X;W,w(m))
其中 β=∣Y−∣/∣Y∣\beta = |Y_-|/|Y|β=∣Y−∣/∣Y∣,1−β=∣Y+∣/∣Y∣1-\beta = |Y_+|/|Y|1−β=∣Y+∣/∣Y∣,Y 表示图像像素数量,Y−Y_-Y−和 Y+Y_+Y+ 分别表示边缘和非边缘像素数量。
(2)融合层的损失函数
为了利用侧输出预测,HED 网络通过权重融合层在训练期间同时学习融合权重。融合层的损失函数 Lfuse\mathcal{L}_{fuse}Lfuse :
Lfuse(W,w,h)=Dist(Y,Y^fuse)\mathcal{L}_{fuse} (W,w,h) = Dist(Y, \hat Y_{fuse}) Lfuse(W,w,h)=Dist(Y,Y^fuse)
其中 Y^fuse≡σ(∑m=1MhmA^side(m))\hat Y_{fuse} ≡ \sigma (\sum_{m=1}^M h_m \hat A_{side}^{(m)})Y^fuse≡σ(∑m=1MhmA^side(m)),σ(⋅)\sigma(·)σ(⋅)为激活函数,h=(h1,⋯,hM)h=(h_1, \cdots ,h_M)h=(h1,⋯,hM)表示融合权重。
HED 网络的优缺点
借助 VGG 网络强大的特征提取能力,HED 边缘检测算法能够对图像进行多尺度多层次的学习,直接对整幅图像进行操作。在侧输出层通过深度监督,将不同尺度的侧输出结果进行融合,最后得到了较为优秀的边缘检测结果。然而,随着网络深度的加深,深层特征的分辨率不断降低,导致了一些信息的丢失,在边缘的精细度方面有所欠缺。
RCF 图像边缘检测
在 HED 方法中只采用每个卷积阶段最后一层的卷积特征,而没有充分利用 CNN 丰富特性的层次结构。为了解决这一问题,Liu 等以 HED 网络为基础,提出了一种新的深层结构,Richer Convolutional Features,即更丰富的卷积特征(RCF)。RCF 通过自动学习将所有卷积层的信息组合起来,从而能够获得不同尺度的更加精细的特征。
RCF 网络架构
RCF 基于 HED 网络,与 VGG16 相比,RCF 主要做了如下修改:
- 与 HED 相同,RCF 去掉了最后一个池化层和之后的全连接层,形成了全卷积网络。
- 在 VGG16 的每个卷积层之后连接一个 1×1 大小深度为 21 的卷积层,并将每一阶段的特征累积得到混合特征。
- 在每个阶段得到混合特征之后添加反卷积层进行上采样。
- 在上采样层之后添加 loss/sigmoid 层计算损失。
- 将所有上采用层连接,对每个阶段的特征进行融合,最后再通过 loss/sigmoid 层计算损失。
RCF 损失函数
与 HED 的做法类似,由于图像中边缘像素点和非边缘像素点的数量差异往往很大,需要计算正负样本之间的损失,RCF 对 HED 中的损失函数进行了改进,加入了阈值 η\etaη,若某个像素为边缘像素的概率小于阈值 η\etaη,则认为这个像素为非边缘像素:
l(Xi;W)={α⋅log(1−P(Xi;W))if yi=00if 0≤yi≤ηβ⋅logP(Xi;W)otherwisel(X_i;W) = \begin{cases} \alpha \cdot \log (1 - P(X_i;W)) \quad & \text{if } y_i = 0 \\ 0 & \text{if } 0 \leq y_i \leq \eta \\ \beta \cdot \log P(X_i;W) & \text{otherwise} \end{cases} l(Xi;W)=⎩⎪⎨⎪⎧α⋅log(1−P(Xi;W))0β⋅logP(Xi;W)if yi=0if 0≤yi≤ηotherwise
其中
α=λ⋅∣Y+∣∣Y+∣+∣Y−∣\alpha = \lambda \cdot \frac{|Y^+|}{|Y^+| + |Y^-|} α=λ⋅∣Y+∣+∣Y−∣∣Y+∣
β=λ⋅∣Y−∣∣Y+∣+∣Y−∣\beta = \lambda \cdot \frac{|Y^-|}{|Y^+| + |Y^-|} β=λ⋅∣Y+∣+∣Y−∣∣Y−∣
Y−Y^-Y−和 Y+Y^+Y+分别表示边缘和非边缘像素数量,超参数 λ 用来平衡正负样本的数量,W 表示网络参数集合。RCF 改进的损失函数是:
L(W)=∑i=1∣I∣(∑k=1Kl(Xi(k);W)+l(Xifuse;W))L(W) = \sum_{i=1}^{|I|} \left( \sum_{k=1}^{K} l(X_i^{(k)};W) + l(X_i^{fuse};W) \right) L(W)=i=1∑∣I∣(k=1∑Kl(Xi(k);W)+l(Xifuse;W))
其中 Xi(k)X_i^{(k)}Xi(k)是阶段 k 的激活值,XifuseX_i^{fuse}Xifuse 是融合层的激活值。∣I∣|I|∣I∣是图像 I 的像素个数,K 是阶段数,这里为 5。
RCF 与 HED 的区别
HED 方法与 RCF 方法最大的区别在于以下两个方面:
HED 方法只考虑了 VGG16 网络每个阶段最后一个卷积层的特征,丢失了很多信息;而 RCF 网络充分考虑了 VGG16 网络的所有卷积层,从而能够获得更加丰富的信息,在几乎没有任何花费的情况下,大幅度提高了图像边缘检测的性能。
新的损失函数。RCF 在 HED 损失函数的基础上进一步进行了修改,通过设置阈值 η 着重解决了多人标注情况下那些不确定是否为边缘的像素处理,提高了训练的稳定性。具体来说,RCF 将边缘像素概率高于阈值 η 的像素作为正样品,将边缘像素概率等于 0 作为负样本。而 HED 则设置阈值 η=0.5,并且将其作为正负样本的分界线。
参考文献
- XIE S, TU Z. Holistically-Nested Edge Detection[J]. International Journal of Computer Vision, 2017, 125(1/3): 3–18.
- LIU Y, CHENG M M, HU X 等. Richer Convolutional Features for Edge Detection[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2019, 41(8): 1939–1946.
HED 和 RCF 图像边缘检测相关推荐
- OpenCV(二)逐像素的图像复制、图像边缘检测(自实现和API实现)
目录 一.逐像素的图像复制 1.代码 2.效果 二.简单的图像边缘检测(自实现) 0.图像处理的卷积运算 1.简单模糊处理 2.强化边缘处理 1.原理 2.代码 3.效果 三.简单的图像边缘检测(调用 ...
- 图像边缘检测之拉普拉斯(Laplacian)C++实现
拉普拉斯算子(Laplacian)可应用到图像边缘检测中.在OpenCV中当kernel大小为3*3时,支持两种kernel算子,分别为: 在OpenCV中默认的计算方式如下,假设有一个5*5的小图像 ...
- 图像边缘检测--OpenCV之cvCanny函数
图像边缘检测--OpenCV之cvCanny函数 分类: C/C++ void cvCanny( const CvArr* image, CvArr* edges, double threshold1 ...
- 1.3 图像边缘检测edge函数的用法
(1)语法和说明 ①BW = edge(I): 返回二值图像 BW,其中的值 1 对应于灰度或二值图像 I 中函数找到边缘的位置,值 0 对应于其他位置.默认情况下,edge 使用 Sobel 边缘检 ...
- 图像边缘检测,检测亦或简化
文章目录 写在最前 Sobel 边缘检测 基本原理 代码实现 Canny边缘检测 基本原理 代码实现 Laplacian边缘检测 Scharr 写在最后 总结 下载 参考 写在最前 上一章节,我们在使 ...
- matlab的边缘检测方法,常用图像边缘检测方法及Matlab研究
2011 年 2 月 15 日第 34 卷第 4 期 现代电子技术 Modern Electronics Technique Feb. 2011 Vol. 34 No. 4 常用图像边缘检测方法及 M ...
- matlab评估边缘检测性能,【模糊推理】模糊逻辑图像边缘检测,原理+matlab代码~...
这篇博客是接着上一篇来哒,https://blog.csdn.net/luolan9611/article/details/94285158 本篇博客及上篇博客搜集的资料.实验代码.实验报告.PPT均 ...
- caany边缘检测matlab,自适应canny算法研究及其在图像边缘检测中的应用.pdf
自适应canny算法研究及其在图像边缘检测中的应用.pdf 还剩 51页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容 ...
- matlab差分算子的灰度图像边缘检测,常用图像边缘检测方法及MATLAB研究
论文 2 1年 2月 I 01 5日 现代电子技术 M o e n El c r i sT e h qu d r e ton c c ni e 第3 4卷第 4期 Fe .2 11 b 0 Vo1 3 ...
最新文章
- Php数组面包屑导航,PHP 导航提示(面包屑型轨迹)
- Visual Studio 2013开发 mini-filter driver step by step (5) - 读写文件
- Rocky(dfs)
- oracle死锁解决常用方法(屡试不爽)
- python从入门到爬虫_python爬虫从入门到放弃(一)之初识爬虫
- Apple Configurator 2下载 Apple Configurator 2 for mac官方最新版 支持M1
- JeecgBoot 常见问题QA
- 关于React中状态保存的研究
- 基于消息的软件架构模型演变
- Apache Mahout的Taste基于Hadoop实现协同过滤推荐引擎的代码分析
- 对话 | AI、机器学习在材料科学研究中能发挥哪些作用?
- JDBC连接hive(错误小结)
- 算法---逻辑智力题
- 计算机保研英语常见问题
- LeetCode-自除数
- 产品化机器学习的一些思考
- 高级软件工程第三次作业:数独游戏界面功能
- 教你如何制作并压缩高质量视频
- 吉米_王:浅谈链表和顺序表
- MISRA 2004 VS MISRA 2012
热门文章
- 阿里 P6 面试体验
- 逆序整数求和C语言,c语言 数字逆序相加
- 【更新ing】已有5个省份公布2020软考报名时间
- 小程序marker callout 遇到的坑
- LiDAR-based Panoptic Segmentation via Dynamic Shifting Network(论文阅读笔记)
- JPBC库的使用实例——BLS签名
- 【Windows Server 2019】路由服务的配置和管理
- 遇到电脑显示器花屏是什么问题
- 安卓应用方法数超过64k解决办法:分割Dex
- 我的世界服务器连接显示不见了,我的世界服务器为什么进去就卡,然后几十秒后显示“连接已丢失”怎么? 爱问知识人...