本文为原创,欢迎转载,转载请注明出处:

http://blog.csdn.net/autocyz/article/details/43305767

在我看来,首先要说明的一点就是,BING这个方法与其称之为一种新的一般物体识别方法,倒不如说是一种加速方法。其方法的成功之处就是在于其较快的处理速度,即其文章中所说的1000fps。目前,大部分的物体识别方法都是先学习大量的样本,获得学习结果,然后用不同的框遍历需要测试的图片,将遍历的框中内容依次与学习结果比对,然后确定框中是否存在此物体。然而,对于一幅N*N图像而言,要遍历所有可能的框,则其需要遍历的次数大约为N的4次方数量级。所以说,这个方框的筛选就变成了一个很大的问题,也是限制速度的主要因素。而BING这种方法就是一种快速挑出候选框的方法。下面就解释下,为何我认为其不是一种新的方法,而是一种加速方法。

1、其算法最终实现的功能并非物体识别,而是物体候选框的筛选。即其所说的每秒1000张图片的处理速度,并非真正找出图片中的物体,而是找出可能包含物体的候选框。这个候选框的数量大小一般是千位量级。即使如此,这也大大减少了后续物体识别的工作量。

2、其方法中有很多地方都用到了加速过程,下面一一解释:

(1)其大胆的将图像缩小成36中不同大小的图像,然后选用8*8模板进行匹配。一般来说,我们在处理图像时,都尽可能的希望图像质量好,并且在处理的过程中不会轻易的修改原图像,而他这里却将原图像给缩小。现假设有一1000*1000的图像,假设我要用100*100的框进行遍历,则遍历的次数为900*900=810000次,而若将图像缩小为500*500的图像,则此时采用50*50的方框遍历,其效果与原来的100*100的方框是一样的,但是其遍历的次数却变为了450*450次,整整减少了4倍。另外,图像虽然缩小,会损失一些图像的信息,但是物体的结构轮廓仍旧是存在的,故不影响我的检测结果。

至于选用36中不同大小,其选取的依据也是根据图像包含物体的可能性来选择的,即选取的带下都是最有可能完整包含物体的。

(2)其选取的特征是物体在梯度图下的闭合轮廓。梯度图的好处是能够完整的表征物体的形状,且数据量较小,因为其是单通道的图像,每位也是一个8位的unsigned char的数,在这里作者做了第二次加速。即将数据进一步简化,舍去8位数据的后四位,选取数据的前四位代替其本身。这里,我分析里一下的这个舍去方法所可能产生的误差影响。假设某位像素的值为0001 1111(31),而舍去后四位后变成0001 0000(16),这种情况将是相对误差和绝对误差均为最大的情况。这里的相对误差为(31-16)/31=48.4%,绝对误差为15,。这些都是误差最大时的情况,而误差最小则为0。因此这些都是可以接受的,且在图像中也看不到很明显的特征, 这个数据减少的过过程为后面的位操作减少了一般的位移运算量。
亲测如下:

上面两张为原梯度图,第二张为舍去后四位的梯度图。(可以看出只是图像变的稍微暗了一些,别的没有影响)

(3)将所有对图像像素的位移,转换为对位的操作,数据存储在64位的整型数据中。数据转换如下:

Mat FilterBING::matchTemplate(const Mat &mag1u){const int H = mag1u.rows, W = mag1u.cols;const Size sz(W+1, H+1); // Expand original size to avoid dealing with boundary conditionsMat_<INT64> Tig1 = Mat_<INT64>::zeros(sz), Tig2 = Mat_<INT64>::zeros(sz);Mat_<INT64> Tig4 = Mat_<INT64>::zeros(sz), Tig8 = Mat_<INT64>::zeros(sz);Mat_<byte> Row1 = Mat_<byte>::zeros(sz), Row2 = Mat_<byte>::zeros(sz);Mat_<byte> Row4 = Mat_<byte>::zeros(sz), Row8 = Mat_<byte>::zeros(sz);Mat_<float> scores(sz);for(int y = 1; y <= H; y++){ const byte* G = mag1u.ptr<byte>(y-1);INT64* T1 = Tig1.ptr<INT64>(y); // Binary TIG of current rowINT64* T2 = Tig2.ptr<INT64>(y);INT64* T4 = Tig4.ptr<INT64>(y);INT64* T8 = Tig8.ptr<INT64>(y);INT64* Tu1 = Tig1.ptr<INT64>(y-1); // Binary TIG of upper rowINT64* Tu2 = Tig2.ptr<INT64>(y-1);INT64* Tu4 = Tig4.ptr<INT64>(y-1);INT64* Tu8 = Tig8.ptr<INT64>(y-1);byte* R1 = Row1.ptr<byte>(y);byte* R2 = Row2.ptr<byte>(y);byte* R4 = Row4.ptr<byte>(y);byte* R8 = Row8.ptr<byte>(y);float *s = scores.ptr<float>(y);for (int x = 1; x <= W; x++) {byte g = G[x-1];R1[x] = (R1[x-1] << 1) | ((g >> 4) & 1);R2[x] = (R2[x-1] << 1) | ((g >> 5) & 1);R4[x] = (R4[x-1] << 1) | ((g >> 6) & 1);R8[x] = (R8[x-1] << 1) | ((g >> 7) & 1);T1[x] = (Tu1[x] << 8) | R1[x];T2[x] = (Tu2[x] << 8) | R2[x];T4[x] = (Tu4[x] << 8) | R4[x];T8[x] = (Tu8[x] << 8) | R8[x];s[x] = dot(T1[x], T2[x], T4[x], T8[x]);}}Mat matchCost1f;scores(Rect(8, 8, W-7, H-7)).copyTo(matchCost1f);return matchCost1f;
}

上面三个方面就是其加速的过程,其中第二步中的8*8模板的选取与第三步数据的转换是相关的。

此种方法对于候选框的筛选方法很快,且其基于物体的闭合性这一性质,能够对几乎所有的物体进行预判,因此若想识别某一特定物体,则在获取候选窗口的时候,可以先用此法剔除大部分的窗口,得到少数的候选窗口,然后在将候选窗口的内容,送入分类器,进行区分,这样可以很大的提高效率。

另外,因为此种方法中没有很多复杂图片操作,故可移植性比较强。且速度较快,则可以针对很多实时的场景进行实践。

对于基于嵌入式的图像处理,运用此种方法可以加快处理速度,完成针对实时性的要求。并且,其关于位的操作,能够更加将嵌入式的硬件特性运用充分,即减少不必要的冗杂运算,使用尽可能最直接最有效的操作。

关于程明明老师的BING一点自我看法——加速相关推荐

  1. 程明明:“生活歌者,一路向前”

    Datawhale干货 人物:程明明,来源:西电校友总会 人物:程明明 "85后".国家青年拔尖人才."优青".国家杰出青年基金获得者.博士生导师.南开大学计算 ...

  2. 程明明-关于文献阅读和寻找新的科研题目

    自从2007年一月去我即将读研的清华大学计算机图形学组做本科毕业设计开始,我就陷入了一个困扰我许久的问题之中:如何阅读文献,如何寻找科研题目?之后长达三年的时间,我一直被这个问题深深困扰,直至2009 ...

  3. 程明明:面向弱监督的图像理解

    点击上方"深度学习大讲堂"可订阅哦! 编者按: 若言琴上有琴声,放在匣中何不鸣? 若言声在指头上,何不于君指上听? 苏轼的<琴诗>暗示了全局认知对于场景理解的重要性.而 ...

  4. 将大核卷积分三步,清华胡事民、南开程明明团队全新视觉骨干VAN,超越SOTA ViT和CNN...

    来源:机器之心 来自清华大学和南开大学的研究者提出了一种新型大核注意力(large kernel attention,LKA)模块,并在 LKA 的基础上构建了一种性能超越 SOTA 视觉 trans ...

  5. 登上更高峰!颜水成、程明明团队开源ViP,引入三维信息编码机制,无需卷积与注意力...

    导读 本文从位置信息编码出发,引入了高-宽-通道三维信息编码机制.为进一步校正不同分支的作用,提出了加权融合方式.ViP在ImageNet上取得了83.2%的top1精度,代码已开源. 标题& ...

  6. 计算机教师幽默介绍,老师的幽默式自我介绍

    老师的幽默式自我介绍 老师的幽默式自我介绍1 师:我们先来做一个游戏好吗? 师:这个游戏主要是测一测大家的反应速度如何,规则是--我说"1"男同学起立,我说"2" ...

  7. 无需卷积和注意力!颜水成、程明明团队开源ViP:用于视觉识别的可置换MLP类架构...

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 作者丨Happy  审稿丨邓富城 转载自丨极市平台 导读 本文从位置信息编码出发,引入了高-宽-通道三维信息 ...

  8. 显著检测论文解析1——Global contrast based salient region detection(程明明 IEEE TPAMI)

    显著检测论文解析1 本人在图像处理方面的主要研究方向是显著性检测,在刚接触显著性时感觉很难下手,有太多东西不是很清楚.学习到现在我对这一块有了一定的认识,现在对显著性领域我读过的近几年比较好的论文写一 ...

  9. 【VALSE 2019 PPT】南开计算机视觉万人计划教授-程明明-《弱监督图像语义分割》学习记录

    摘要: 基于深度卷积神经网络的传统语义分割模型严重依赖于大量人工标注数据,因而在学习新的类别信息时需要庞大的人力成本来标注数据.弱监督语义分割技术,由于仅依赖图像类别标签等轻量级标注数据,也因此正在成 ...

最新文章

  1. Linux下覆盖目录的方法
  2. Web项目中文件上传Filter处理
  3. mysql主从复制-mysqldump
  4. Gym - 101471D Money for Nothing(决策单调性+分治+贪心)
  5. 宝塔需在php设置中安装redis扩展,wordpress开启Redis扩展教程
  6. HJ浇花(牛客竞赛 约束差分)
  7. Struts2 POI 导入导出Excel数据
  8. ctf-HITCON-2016-houseoforange学习
  9. BUAA_OO_博客作业3——规格
  10. mysql linux 关闭防火墙_linux常用命令和关闭防火墙
  11. vue项目中input框默认获得焦点,回车选中输入文本
  12. TurboMail邮件服务器腾云驾务云化邮件办公
  13. 图片md5值不一样_夏天宅家,拍点不一样的宝骏530车模图片!
  14. 动态规划-----(思路详解)
  15. BZOJ 1878: [SDOI2009]HH的项链【莫队】
  16. 计算机正常开机显示器无信号,电脑开机显示器无信号怎么办 电脑开机显示器无信号解决方法【详解】...
  17. Spring Boot 错误页配置
  18. Redis开启远程访问
  19. Flex之AdvancedDataGrid用法
  20. 58同城亿级流量架构演进

热门文章

  1. 雷神笔记本FN功能快捷键大全
  2. 小心联通在信服务包月陷阱
  3. PHP支持的数据类型
  4. VC中常见API函数用法(经验版)
  5. No instances available for ***
  6. 微软公司内部培训程序员资料---求解线性方程组的类
  7. MySQL - Windows 版 MySQL 下载安装教辅
  8. 图书馆 管理系统--可行性报告
  9. 焦化厂通过plc无线通信模块竟然可以解决生产安全问题
  10. 单细胞数据分群的几种方法