轮廓检测论文解读 | 整体嵌套边缘检测HED | CVPR | 2015
主题列表:juejin, github, smartblue, cyanosis, channing-cyan, fancy, hydrogen, condensed-night-purple, greenwillow, v-green, vue-pro, healer-readable
贡献主题:https://github.com/xitu/juejin-markdown-themes
theme: juejin
highlight:
0 轮廓检测
轮廓检测,对我这样的初学者而言,与语义分割类似。分割任务是什么我就不再赘述了,轮廓检测则是完成这样的一个任务:
了解传统图像处理或者opencv的朋友应该都不难看出(想到),“Canny”轮廓提取算子,这个算子简单的说就是对图像的像素值的变化(梯度)进行检测,然后梯度变化大的地方认定为轮廓(上图就是用Canny算子提取的效果)。当然,最近也是用深度学习的方法来做这种轮廓提取,本问介绍的HED就是这样的一个深度学习提取边框的办法,下图是HED提取小狗轮廓的结果图。
1 论文概述
- 相关论文:《Holistically-Nested Edge Detection》
- 论文链接:https://arxiv.org/abs/1504.06375
- 论文年份:2015
今天解读一篇论文,网上已经有一些的解读了,不过讲解的并不细致,让我难以理解,直到看了官方代码才理理顺,所以这篇文章部分搬运,再加上个人补充。
整体来说,这个HED边缘检测模型,与Unet分割模型类似,再加上年份较老,所以复现价值不大,大家当扩展知识看看就得了。
Unet我们直接已经讲解过了,用简单的文字来简单的回顾一下:字母U的左半边,是不断卷积池化层进行特征抽取,然后得到不同尺度的特征图,然后U的右半边,通过转置卷积进行上采样,然后与下采样过程中的同尺度拼接做特征融合,然后最终模型输出一个与输入图像相同大小的预测结果。
HED,Holistically-Nested Edge Detection这个模型,其中的亮点在我看来,是对Deep supervision的一种应用。Deep supervision这个概念相比读者应该不陌生,在上上上一篇文章《Unet++》那个文章中我已经提到了,简单的说就是一个模型有多个输出的结构。
2 HED结构
来看下论文中给出的HED的结构图:
这个图可能比较抽象,我来大概讲解一下:
- 可以看到的是整个过程只有一个卷积+池化的过程,Unet还有上采样的过程,这是不同点;
- 图中的有5个马的图片,从大到小,从浅到深,纹理越来越少,这分别是经过了maxpool和卷积得到的不同尺寸的输出。从图中可以看到,这些输出叫做side-output 1到side-output 5。
- 图中这五个特征图经过虚线,得到了一个Y,这个Y是经过“weighted-fusion”得到了,简单的说就是,五个图经过一个可以训练的权重参数,融合成了最终的输出
结构不难理解,但是到这里读者肯定心中仍有疑惑,看完下面的损失函数的构成就通透了。
3 损失函数
这个损失函数算是deep supervision比较常见的损失函数了,就是每一个side-output输出都是损失函数的一部分。
整体来说,这个损失函数是有两个部分:
- side-output:这个就是上图中五个不同尺度的预测结果,通过上采样成原图大小,然后和mask做交叉熵。因为有5个图,所以损失是五个的和;
- fusion:五个图fusion出得Y,这个Y与ground truth的交叉熵;
所以论文中有这样的损失函数:
我也没注意W,w,h的含义,但是看起来确实是side和fusion两部分损失函数。
这里的Dist其实使用的就是交叉熵
这个side中,除去这个β\betaβ不管,剩下的内容就是二值交叉熵,也许和你常见的那种形式不太一样,但是是一样的。给个提示:看这里的Σ\SigmaΣ的下标
现在我们对损失函数应该有了一个大致的感觉了,但是仍然有两个疑问:
- losssideloss_{side}lossside中的β\betaβ是什么?怎么算?
- lossfuseloss_{fuse}lossfuse中的Y^fuse\hat{Y}_{fuse}Y^fuse怎么得到,换言之,如何融合5个side-output?
对于第一个问题,β\betaβ是一个平衡系数,
β=∣Y−∣∣Y∣\beta = \frac{|Y^-|}{|Y|}β=∣Y∣∣Y−∣
其中∣Y∣|Y|∣Y∣表示图像的像素的数量,也就是widthxheight;∣Y−∣|Y^-|∣Y−∣表示这个图片中,ground truth的像素的数量,类似与解决预测像素不平衡的一个手段。
假设一张图片中ground truth的像素量少,那么意味着,β\betaβ的值小,那么公式(2)中的第一项的权重轻,而第一项的sigma的下标是Y+Y^+Y+,说明这个是计算非目标,也就是groud truth=0的损失,也就是背景的损失,数量很多,所以权重轻损失少。 这一点实在不好讲明白,希望大家没理解的多读两遍。
对于第二个问题,论文中给出了公式:
这个h应该是一个可以训练的参数,然后加和之后用sigma归一化。
4 损失函数 TF
现在万事俱备,官方提供了代码,来看一下这个损失函数的TF版本:
def class_balance_sigmoid_cross_entropy(logits,label,name='cross_entropy_loss'):y = tf.cast(label,tf.float32)count_neg = tf.reduce_sum(1.-y)count_pos = tf.reduce_sum(y)beta = count_neg/(count_neg+count_pos)pos_weight = beta/(1-beta)cost = tf.nn.weighted_cross_entropy_with_logits(logits,y,pos_weight)cost = tf.reduce_mean(cost*(1-beta),name=name)return costcost = class_balanced_sigmoid_cross_entropy(dsn_fuse, annotation_tensor) + \class_balanced_sigmoid_cross_entropy(dsn1, annotation_tensor) + \class_balanced_sigmoid_cross_entropy(dsn2, annotation_tensor) + \class_balanced_sigmoid_cross_entropy(dsn3, annotation_tensor) + \class_balanced_sigmoid_cross_entropy(dsn4, annotation_tensor) + \class_balanced_sigmoid_cross_entropy(dsn5, annotation_tensor)
可能有的朋友看不懂TF的写法,不过大概能看懂把,细节不懂但是英文单词总是没问题的,整体来看,跟我们上面讲解的差不多把。
5 总结
这里谈一谈我看了这个2015年的老前辈模型的收获把:
- HED是一个边缘检测模型,但是使用的和Unet的框架有些类似。HED使用了deep supervision的方法,而Unet并没有,这里我突然想到Unet++ 的结构,Unet++的思想完全可以沿着Unet+HED这条线路诞生。
- 我们学到了一个deep supervision的损失函数的写法;
- 我们学到了一个单词Holistically-nested。holistically 整体地,nest 嵌套。
参考文章:
- https://zhuanlan.zhihu.com/p/35694372
- https://zhuanlan.zhihu.com/p/36660932
- https://www.zhihu.com/question/31864895
- https://arxiv.org/abs/1504.06375
- https://blog.csdn.net/u014779538/article/details/92765963
轮廓检测论文解读 | 整体嵌套边缘检测HED | CVPR | 2015相关推荐
- CVPR2021 | 2D目标检测论文解读
CVPR2021 | 2D目标检测论文解读 1. UP-DETR:--<UP-DETR: Unsupervised Pre-training for Object Detection with ...
- 目标检测论文解读复现之六:基于YOLOv5的遥感图像舰船的检测方法
目标检测论文解读复现 文章目录 目标检测论文解读复现 前言 一.摘要 二.网络模型及核心创新点 三.应用数据集 四.实验效果 五.实验结论 六.投稿期刊介绍 前言 此前出了目标改进算法专栏,但是对于应 ...
- 目标检测论文解读复现之五:改进YOLOv5的SAR图像舰船目标检测
目标检测论文解读复现 文章目录 目标检测论文解读复现 前言 一.摘要 二.网络模型及核心创新点 三.应用数据集 四.实验效果(部分展示) 五.实验结论 六.投稿期刊介绍 前言 此前出了目标改进算法专栏 ...
- 目标检测论文解读复现之一:基于改进YOLOv5的整车原木数量检测方法——TWD-YOLOv5(代码已复现)
目标检测论文解读复现 文章目录 目标检测论文解读复现 前言 一.摘要 二.网络模型及核心创新点 三.应用数据集 四.实验效果 五.投稿期刊介绍 前言 此前出了目标改进算法专栏,但是对于应用于什么场景, ...
- 目标检测论文解读1:(RCNN解读)Rich feature hierarchies for accurate object detection...
一.番外说明 大家好,我是小P,今天和大家一起学习目标检测领域的经典文章-RCNN,希望大家支持和喜欢.此外,对"目标检测/模型压缩/语义分割"感兴趣的小伙伴,欢迎加入QQ群 81 ...
- 目标检测论文解读复现之十一:基于特征融合与注意力的遥感图像小目标检测
前言 此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文,帮 ...
- 目标检测论文解读复现之十五:基于YOLOv5的光学遥感图像舰船 目标检测算法
前言 此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文,帮 ...
- 目标检测论文解读复现之十八:基于注意力机制的光线昏暗条件下口罩佩戴检测
前言 此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文,帮 ...
- 目标检测论文解读复现之八:基于YOLOv5s的滑雪人员检测研究
前言 此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测 ...
- 目标检测论文解读复现【NO.21】基于改进YOLOv7的小目标检测
前言 此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文,帮 ...
最新文章
- 半环(semiring)的数学概念
- Python之父考虑重构Python解释器
- 有关指针的数据类型的小结
- 当机器人遇上神经科学时,将会发生什么?
- hdu2235 机器人的容器
- 图像的放大与缩小(2)——双线性插值放大与均值缩小
- Scala语言编译之后生成的Java代码解读
- Express实现路由分发控制、RESTful API
- 通过jdbc的mysql驱动连接oceanbase mysql模式数据库
- Idea搭建SpringCloud(三)------Ribbon实现负载均衡及其自定义算法策略
- Linux期末考试试题长沙理工,Linux 期末考试试题4
- 访问路由出现An error occurred
- vhd虚拟机安装linux,总算搞定vhd的linux了(包括深度linux),给像我一样的菜鸟总结一下.........
- 【pyqt5】自定义控件 实现能够保持长宽比地缩放子控件
- 计算机学院迎接新生标语,大学迎接新生横幅标语:好巧我们见面了
- 你真的理解图像处理经典算法 SIFT 吗?最深入、最全面综述:尺度不变特征转换
- 软件测试工程师累不累?
- CANoe——CAPL(Message)
- Android U盘文件读写复制操作
- lucene查询解析器语法
热门文章
- 无线路由器的DNS服务器怎么设置,无线路由器DNS的设置方法
- arcgis中的图像裁剪
- 光线跳线转接太多,断网了
- 2014清华计算机系直博名单,2014年清华大学博士研究生拟录取名单公示
- 许奔创新社-第38问:如何练就跨界打劫的本领?
- word文档解除编辑受限(忘记密码)
- 蓝蓝设计 使用全屏照片的网页设计欣赏
- oracle的执行图标不见了,开始菜单oracle集成管理工具的图标没了怎么办
- android 动画入门(一)
- <<视觉问答>>2022:MuKEA: Multimodal Knowledge Extraction and Accumulation for Knowledge-based VQA