文档章节

图像处理算法的各种优化【持续更新中】

Parser7
 Parser7
发布于 2016/08/14 21:24
字数 877
阅读 114
收藏 1

首先,必须给开源中国的博客系统点个赞,右边的标题导航真的很方便,跟CSDN"十几年"一尘不变的画风比起来真的甩了好几条街,说不定一言不合就超越CSDN了(什么?已经超越了?)~以下内容目前只是大胆猜测、感觉、没有查阅过一些资料(这样的资料好像很难找,其实是我蠢),不对的地方希望被指正。

由于之前没做过相关优化,所以做一些猜想吧,大概分这么几种:

1、寄存器级优化

OpenCV里filter2D的double型以4元素为一组的计算应该就是这个套路。实测能降低42.8%的时间开销(当然,只针对某一芯片)

2、指令集优化

比如SSE,这个很经典!

3、Cache级优化

由于Cache 的访问速度比主存快好几个数量级,所以如果CPU调度指令能够较准命中数据块的话,对于算法执行的效率提升有极大帮助,毕竟如果Cachemiss太高导致执行周期过长的话很可能就要轮更多的时间片了,而这样所带来的耗时就会涨数量级了。感觉在实践的时候要注意指针、索引之类的不要太过于"远程",不然EBP会给调度程序带来错觉而导致Cachemiss。

4、内存级优化

虽然内存访问很slow,但是毕竟比磁盘快-_-,好吧,常见的可能就是复用了,毕竟有时候malloc/alloc/.....也会慢!而且还会造成内存碎片,不方便管理,尤其是诸如C#的高级语言,是很忌讳动态地去增长内存,堆很胖不方便上楼梯。

5、数据类型优化

跟前端的师兄讨教时,他直接吐槽本宝宝用double,确实,double能不用千万不用,编译器想优化都有心无力,而且又浪费存储;只是当初预研的时候想尽量保持精度,以最好的姿势去运行,并未被告知还需要移植。。。

不废话了,常见的就是降到float,不过据说float在前端都很少见,毕竟SIMD里一般double只能并行两个,而float能并行4个,该方法是本人能够间接证实的。

还有就是换整型,因为数量级本质上也是一种精度表述;double的有效数位再多,幂次跟不上一旦pooling,那么权值就相当于0了;有的时候在Normalize后256量化下直接就是0,所以还不如换整型。现在接触这块总算明白为什么很多人习惯用299,587,114了,毕竟前面带个小数点总感觉有毒。而整型的add/sub/mul/div就要比浮点的快很多指令周期了。一般int最大值4,294,967,295,而普通的图像2kx2k=4kk,分辨度/灵敏度完全够用了。

6、代码循环的优化

一般遵循小循环里套大循环的原则。

7、降采样

这是一种很常见的方法,x4倍速提升效率,甚至更高(考虑到Cache优化策略)。

8、等

© 著作权归作者所有

共有 人打赏支持
Parser7
粉丝 25
博文 16
码字总数 21280
作品 1
杭州
程序员
私信 提问
OpenCV/OpenCV3计算机视觉软件支持库和最新资源

OpenCV近几年随着视频设备的广泛使用,发展的非常之快。中国的大部分视频应用几乎都用了其中的代码。但是由于各种原因,OpenCV的资料却比较杂乱,本人基于学习和使用和一些经验体会,整理如下...

openthings
2015/09/23
958
0
OpenCV简介

OpenCV是Intel®开源计算机视觉库。它由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV 拥有包括 300 多个C函数的跨平台的中、高层 API。它不依赖于...

长平狐
2013/12/25
681
2
卷积神经网络工作原理研究 - 概要

卷积神经网络在图像识别领域无限风光,通过一张图片,算法可以知道图片上的物体是什么,着实令人震惊,但是很多人和我一样,对于其背后的原理,都非常好奇,卷积神经网络是如何进行图像识别的...

中和软件技术推进
2017/04/07
0
0

hjimce算法类博文目录 个人博客:http://blog.csdn.net/hjimce 个人qq:1393852684 知乎:https://www.zhihu.com/people/huang-jin-chi-28/activities 一、深度学习 深度学习(七十)darknet...

hjimce
2016/01/24
0
0
ORFEO Toolbox 4.0 发布,远程传感图像处理库

ORFEO Toolbox 4.0 发布,此版本是个主版本发布,兼容 ITKv4 (内部或者外部);主要根据 OTB 的变化来清理一些代码,减少了大量的库依赖。 Orfeo Toolbox (OTB) 是一个高分辨率的远程传感图像...

oschina
2014/03/16
867
0

没有更多内容

加载失败,请刷新页面

加载更多

泛型就这么简单

前言 从今天开始进入Java基础的复习,可能一个星期会有一篇的<十道简单算法>,我写博文的未必都是正确的~如果有写错的地方请大家多多包涵并指正~ 今天要复习的是泛型,泛型在Java中也是个很...

群星纪元
59分钟前
7
0
大数据提醒你:中国这些古建筑,可能是下一个巴黎圣母院!

大家晚上好,我是今天的提笔人嗅嗅。 巴黎圣母院失火事件让我的心情很沉重,一句无关痛痒的安慰“巴黎不哭”,已经不能表达我对这场文化之殇的惋惜之痛,人类伟大的建筑在一瞬间被毁灭。 世界...

forespider
今天
0
0
mysql函数substring_index的用法

substring_index 按索引字符位进行截取字符串 substring_index(“待截取的字符串”,“截取数据依据的字符”,截取字符的位置N) 第三个参数可正,可负。正数表示索引字符前面的字符串,负数...

echojson
今天
4
0
好程序员web前端分享用CSS和JS打造一个简单的图片编辑器

好程序员web前端分享用CSS和JS打造一个简单的图片编辑器,本文主要是利用CSS的 filter和简单的Jquery代码来实现一个简单的图片编辑器,包括对图片的透明度,黑白,图片亮度等调节。 CSS filt...

好程序员IT
今天
2
0
浅析spring mvc的细节

spring mvc 整体结构 系统监听到请求 -> 通知tomcat -> 根据web.xml 通知相应的拦截器(spring mvc 通常指DispatcherServlet) --> 检查url是否有相匹配的请求实现 --> 拿到请求实现bean的适配...

最爱肉肉
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部