首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >OpenCV4中调用HED边缘检测算法

OpenCV4中调用HED边缘检测算法

作者头像
OpenCV学堂
发布于 2019-06-14 04:22:42
发布于 2019-06-14 04:22:42
4.5K10
代码可运行
举报
运行总次数:0
代码可运行

OpenCV4 DNN 模块,自定义层解析! 觉得不错,请点【在看】支持!

HED算法介绍

图像边缘检测是图像处理计算机视觉领域最基础也是最重要的任务之一,早期的Canny边缘检测到现在还在使用,但是Canny边缘检测过于依赖人工阈值的设定,无法在通用场景下工作,如何找到一个在自然场景下可以正确工作的边缘检测器,答案是使用CNN。2015年的时候有人提出了基于卷积神经网络的边缘检测算法HED全称为《Holistically-Nested Edge Detection》, 先看一下HED与Canny的效果对比:

作者提出HED算法是受到了全卷积网络与深度监督网络的启发与影响,作者以VGGNet与FCN作为基础网络进行改进,对VGG网络进行conv1_2, conv2_2, conv3_3, conv4_3, conv5_3多个特征层的输出,借助FCN全卷积网络的设计,通过权重融合层实现各个层相连接,去掉了VGG网络的后半部分,大大减少了网络浮点数计算次数,网络架构示意图如下:

代码演示

OpenCV DNN本身是不支持该网络直接加载与执行的,必须通过OpenCV4中支持的自定义层方法,首先解析HED网络的自定义多层输出,然后重载它的forward方法之后,才可以正确执行。

自定义层解析的代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 自定义层
class CropLayer(object):
    def __init__(self, params, blobs):
        self.xstart = 0
        self.xend = 0
        self.ystart = 0
        self.yend = 0

    def getMemoryShapes(self, inputs):
        inputShape, targetShape = inputs[0], inputs[1]
        batchSize, numChannels = inputShape[0], inputShape[1]
        height, width = targetShape[2], targetShape[3]

        self.ystart = (inputShape[2] - targetShape[2]) // 2
        self.xstart = (inputShape[3] - targetShape[3]) // 2
        self.yend = self.ystart + height
        self.xend = self.xstart + width
        return [[batchSize, numChannels, height, width]]

    def forward(self, inputs):
        return [inputs[0][:,:,self.ystart:self.yend,self.xstart:self.xend]]

加载网络,进行多全层次的边缘检测:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 自定义层
# 注册自定义层
cv.dnn_registerLayer('Crop', CropLayer)

# Load the model.
net = cv.dnn.readNet("D:/projects/models/hed/deploy.prototxt", "D:/projects/models/hed/hed_pretrained_bsds.caffemodel")

kWinName = 'Holistically-Nested Edge Detection'
cv.namedWindow('Input', cv.WINDOW_AUTOSIZE)
cv.namedWindow(kWinName, cv.WINDOW_AUTOSIZE)

cap = cv.VideoCapture(0)
while cv.waitKey(1) < 0:
    hasFrame, frame = cap.read()
    frame = cv.flip(frame, 1)
    if not hasFrame:
        cv.waitKey()
        break
    cv.imshow('Input', frame)

    inp = cv.dnn.blobFromImage(frame, scalefactor=1.0, size=(500, 500),
                               mean=(104.00698793, 116.66876762, 122.67891434),
                               swapRB=False, crop=False)
    net.setInput(inp)
    out = net.forward()
    out = out[0, 0]
    out = cv.resize(out, (frame.shape[1], frame.shape[0]))
    cv.imshow(kWinName, out)

运行效果

图像测试

视频测试

论文与源码

源码与预训练模型 https://github.com/s9xie/hed 论文地址: https://arxiv.org/abs/1504.06375

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
下不到pretrained model了
下不到pretrained model了
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
腾讯前端团队是如何做web性能监控的?
也许你有听过一个问题,你这款 web 应用性能怎么样呀?你会回答什么呢?是否会优于海量 web 应用市场呢?本文就来整理下如何进行 web 性能监控?包括我们需要监控的指标、监控的分类、performance 分析以及如何监控。
zz_jesse
2020/06/24
7.9K0
腾讯前端团队是如何做web性能监控的?
《现代Javascript高级教程》提升网页性能的利器
在现代 Web 开发中,性能优化是一个关键的方面。用户期望快速加载的网页,而慢速的加载和响应时间可能导致用户流失和不良的用户体验。为了满足用户的需求,我们需要准确地测量和分析网页的性能,并采取相应的优化措施。
linwu
2023/07/27
2730
Performance API不完全使用指北
使用浏览器的DevTools来评估web应用性能是很有用的,但要复现现实世界的使用情况并不容易。因为人们在不同地点使用不同的设备、浏览器和网络,都会有不同的体验。
chuckQu
2023/02/13
1.2K0
Performance API不完全使用指北
【性能】198-腾讯新闻前端团队:深入理解前端性能监控
https://segmentfault.com/a/1190000018785911
pingan8787
2019/07/23
1.8K0
【性能】198-腾讯新闻前端团队:深入理解前端性能监控
如何使用Performance API 来衡量应用性能?
从历史上看,我们对客户端性能监控方式非常有限,而且还遇到了API浏览器的限制,阻碍了我们准确地衡量客户端性能。
泯泷、
2024/03/11
2630
深入剖析vscode工具函数(十二)Performance
其中第二个分支和第三个分支都是走_definePolyfillMarks 来返回结果。
孟健
2023/11/23
2720
深入剖析vscode工具函数(十二)Performance
performance
Performance 接口可以获取到当前页面中与性能相关的信息。它是 High Resolution Time API 的一部分,同时也融合了 Performance Timeline API、Navigation Timing API、 User Timing API 和 Resource Timing API
epoos
2022/06/06
4590
深入了解Performance API:优化网页性能的利器
在现代Web开发中,优化网页性能是至关重要的。用户对于加载速度和交互性能的要求越来越高,而Performance API作为一组用于测量和监控网页性能的JavaScript接口,为开发者提供了丰富的工具和信息。本文将深入探讨Performance API的各个方面,帮助读者更好地理解和利用这一强大工具来优化网页性能。
can4hou6joeng4
2023/11/16
9300
前端性能优化 —— 前端性能分析
作者:ouven https://my.oschina.net/zhangstephen/blog/1601380 前端性能优化是一个很宽泛的概念,本书前面的部分也多多少少提到一些前端优化方法,这也是我们一直在关注的一件重要事情。配合各种方式、手段、辅助系统,前端优化的最终目的都是提升用户体验,改善页面性能,我们常常竭尽全力进行前端页面优化,但却忽略了这样做的效果和意义。先不急于探究前端优化具体可以怎样去做,先看看什么是前端性能,应该怎样去了解和评价前端页面的性能。 通常前端性能可以认为是用户获取所需要页面
前端教程
2018/03/05
2.5K0
前端性能优化 —— 前端性能分析
如何收集常见的前端性能信息
总体来说,需要知道浏览器(新的)给我们提供了 Performance API,使用这个属性,我们可以得到一系列跟性能相关的数据
书童小二
2018/12/26
8190
前端埋点数据收集及上报方案
埋点,它的学名是事件追踪(Event Tracking),主要是针对特定用户行为或业务过程进行捕获、处理和发送的相关技术及实施过程。埋点是数据领域的一个专业术语,也是互联网领域的一个俗称。
落落落洛克
2021/10/12
7.1K0
Chrome Dev Tools 之 Performance
作为前端开发,肯定对 Chrome 的 dev tools 不陌生,除了日常 Debug,还提供了一个非常强大的功能:performance 用做性能分析。
CS逍遥剑仙
2020/02/01
1.7K0
超全对照!前端监控的性能指标与数据采集
导语 | 前端监控可以让你更了解自己的网站,更早地发现和解决存在的问题,再通过优化来提升网站的性能和体验。那么,如何衡量一个网站的好坏?有什么指标?性能数据如何采集?本文围绕这些问题和你一起探讨。 一、为什么要做前端性能监控 可能你也有过这样的经历: 有用户反馈你的网站很慢,然后你立马紧张地在浏览器上打开用户反馈的网站。经过检查,可能你的网站一切正常,也可能你的网站真的很慢,甚至打不开了。 有一天老板问你:“咱们的网站性能体验怎么样?”你该如何回答?“挺好的,很快,这个月没有发生过故障....”老板再
腾讯云开发者
2021/06/02
4.4K0
Web 页面的性能 performance 详解
Navigation Timing 是一个可以在web中精确测量性能的javascript API。这个API提供了一个简单的方法来获得页面导航、加载事件的精确而又详细的时间状态。目前在 IE9、Chrome、Firefox nightly builds 中可用
一个会写诗的程序员
2020/05/27
1.8K0
Web 页面的性能 performance 详解
前端性能优化之自定义性能指标及上报方法详解
性能优化是所有前端人的追求,在这条路上,方法多种多样。这篇文章,说一下利用浏览器的一些API,可以怎样进行自定义性能指标及上报。
winty
2020/02/13
1.4K0
前端性能优化之自定义性能指标及上报方法详解
Web 性能优化-首屏和白屏时间
白屏时间是指浏览器从响应用户输入网址地址,到浏览器开始显示内容的时间。 首屏时间是指浏览器从响应用户输入网络地址,到首屏内容渲染完成的时间。
李振
2021/11/26
3.1K0
Web 性能优化-首屏和白屏时间
前端性能监控
主要对 W3C 工作小组提出的各个草案和标准做了一些解读,各个草案的时间点,以及关注的内容等。
上山打老虎了
2022/06/15
1.7K0
前端性能监控
使用performance进行网页性能监控
由于项目需要, 需要对网页的一些性能进行监控, 接触到了performance, window.performance 提供了一组精确的数据,经过简单的计算就能得出一些网页性能数据, 将这些数据存储为
用户1741436
2018/05/16
1.8K0
实现一套前端应用监控系统
我们通过浏览器的 performance API 获取性能数据, 其中要用到以下数据
木子星兮
2020/07/16
7860
页面性能监测之performance
最近,需要对业务上的一些性能做一些优化,比如降低首屏时间、减少核心按钮可操作时间等的一些操作;在这之前,需要建立的就是数据监控的准线,也就是说一开始的页面首屏数据是怎样的,优化之后的数据是怎样,需要有一个对比效果。此时,performance 这个API就非常合适了。
Tiffany_c4df
2019/09/04
2.1K0
页面性能监测之performance
相关推荐
腾讯前端团队是如何做web性能监控的?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验