meiqua / shape_based_matching(issue记录)

2023-05-16

文章目录

    • readme
    • issue 1 如何加快responsemap的创建?
    • issue 2 请问一下是否抗缩放呢?
    • issue 3 匹配准确
    • 定位精度还能再提高吗?
    • branch有些多了,能否写个文档介绍一下各branch的功能
    • response map fusion implementation

readme

与opencv linemod 源码相比,我们从6个方面进行了改进:

  • 删除深度模式,所以我们不需要虚拟函数,这可能会加快
  • opencv linemod最多只能使用63个特征。现在我们可以有8191个
  • 简单代码,旋转和缩放模板图像用于训练。有关示例,请参见test.cpp
  • nms用于精确的边缘选择
  • 单通道方向提取节省时间,对于灰度img稍微快一些
  • 对于多种平台SIMD,可以使用MIPP。例如x86 SSE AVX, arm neon。为了获得更好的性能,我们将MIPP扩展到uint8_t来执行一些指令。(否则我们只能使用一半特征点来避免int8_t溢出)
  • 直接旋转特征以加速模板提取;
    选择分散特征会更均匀;
    如果特征数不够的话,尽可能选择所有特征,而不是抛弃模板(但是features <= 4将自动丢弃)。

issue 1 如何加快responsemap的创建?

  • 测试中发现整个时间,大部分用于了创建responsemap, 请问这个过程可以有办法加速么?例如我有张130万像素的图片,用了150ms创建的,有办法加快么?

有,还可以加速一个量级。
目前的速度瓶颈在opencv的filter上,我之前研究过,opencv用到的加速技巧有separeble filter, SIMD。还可以用的技巧有parallelism、kernel fusion(sobel phase pyrdown大部分都能fuse起来)。
其实这个要写的可读性好、速度最快还挺难的。不过有一帮大神有专门为这个设计了个DSL(domain specified language) halide talk, halide github,非常不错,不直接用也可以参考下思路。

  • opencv里面算高斯 sobel是用可分离卷积算的。fusion这个问题halide talk里面讲的非常好。
    halide talk里讲的方法我总结一下,请你看看大致是不是这样:
    1)locality。实际上和linearize的思想差不多,就是将内存的读取做成cache-friendly,并且减少重复读取。具体的做法就是用当前读取到的内存做尽可能多的计算,这应该也就是fusion的意思。
    2)parallel。这个和使用cpu向量指令集和openmp是一样的,但难点在于同时要照顾到locality。
    halide会通过它的方法帮我们实现locality和parallel的优化,但代价就是要使用它的语法将计算组成pipeline。
    但说实话,这个代价还挺大的,因为它的资料感觉挺少的,即使是opencv中常用kernel的组合,网上都找不到现成的例子。我自己尝试了halide的官方的例子,连编译都通不过。。。
    另外,opencv似乎想要实现一个叫mini-halide的东西,但还只是在draft阶段。

  • SSE优化

  • 本案例对标的是halcon的find_shape_model算子
    在这里插入图片描述

issue 2 请问一下是否抗缩放呢?

  • 目的:想识别很小图的轮廓;
    但是直接拿很小图的训练,好像很难拿到足够的特征;
    直接使用大图训练可以拿到足够多的特征,但是不能直接使用训练的结果去识别小图,我该怎么做呢?

一般能拿到10个点左右,在不复杂的背景下也还好。如果背景复杂导致太多误匹配,可以试试把stride放小点,就是第二个参数{4, 8}改成{2, 4}之类的。这样虽然多费点时间,但是方向扩散也会变小。
当然也可以试试把小图也放大再识别。

issue 3 匹配准确

  • NVlab的DOPE,跟这个算法相比,孰优孰劣?
    我觉得模板匹配优点是比较可靠。深度学习这种可能不会这么稳定,虽然靠生成大量样本来提升可靠性,但比如一个零件沾了点灰,颜色变,有阴影了等等,识别不识别就不确定了。模板匹配是有理论保障的,只要能提到边缘方向就能识别。当然缺点也很明显,适用范围很窄,纹理多了,不是固定形状(比如识别个人)等等就不行。刚好工业上识别固定形状的场景比较多,所以这个算法是halcon定位模块里面比较核心的一个。
    有纹理的话,SIFT之类的一般就行了。而且如果segmentation可靠的话,后面加一些处理也能很快得到pose,比如super4pcs,global registration,也可以就在mask范围内模版匹配。

定位精度还能再提高吗?

小目标当然层数少点好,我试了下,用一层也没问题呀 {4, 8} --> {4} / {2} 都行。最好不要用{1},扩散一格等于不扩散。
也不一定层数少好,一般保证最上层至少8个点左右就行,能选出candidates快速筛选。
扩散也是,用扩散的好处是能像金字塔一样降低分辨率加速,但不会像金字塔一样边缘都没了;所以扩散大小也需要tradeoff,扩散大cnadidates多,但背景不是很杂乱的话扩散大可以帮助我们快速筛掉纯色背景的位置。
一般来说,两到三层金字塔,2 / 4 / 8的扩散可以应对绝大多数情况,小目标就往小调点。

branch有些多了,能否写个文档介绍一下各branch的功能

  • icp2D没用亚像素
  • sbupixel是亚像素
  • sim3是亚像素同时加入了尺度优化。这些没有改master里的东西,只要把icp的folder加进来就能用。
  • rotate_templ已经merge到master,跟master一致;
  • inv_light是把角度相差180度也纳入考虑,跑noise_test可以看到最后一种白变黑的情况没有匹配。
  • fusion_by_hand是尝试用fusion加速整个过程,

response map fusion implementation

Halide的论文指出,融合可以极大地改善响应图的生成,但配置 Halide 并不是一件容易的事,而且我们的响应图也不需要 Halide 的很多特征。因此,最好实现一个简单版本的 tile-based fusion method (基于tile的融合方法)。这也是opencv4正在做的事情。

目前,一个简单的 基于tile的融合 管道被实现,gaussian/ sobel / mag / phase / hist / spread…已完成并经过测试。更多信息请参考 fusion_by_hand 。基本的想法是只实现基于tile的融合,手工完成Halide的编译工作……虽然它看起来不像Halide那么迷人,但它大大简化了工作,也很容易使用。

速度大约比使用opencv快10倍。我们将在将来使用它来创建响应映射。
更多示例请参见test_fusion.cpp。此外,欢迎任何讨论、测试或改进!

现在我们通过了所有的测试,匹配函数就可以正常使用了! 对于创建响应映射的完整管道来说,它大约快了6倍,而且不需要像以前那样将图像裁剪到16n。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

meiqua / shape_based_matching(issue记录) 的相关文章

随机推荐

  • mmap的使用

    参考资料 mmap 函数 xff1a 原理与使用 含代码 mmap函数使用与实例详解 Linux系统编程 xff1a mmap使用技巧 mmap和普通文件读写的区别和比较 amp mmap的注意点 认真分析mmap xff1a 是什么 为什
  • LED高效恒流驱动电源的设计指导书

    参考链接 LED高效恒流驱动电源的设计指导书 LED灯驱动电源设计 LED恒流驱动电路 精 LED恒流驱动电路 led灯驱动电源电路图 led灯的驱动原理电路图方案详解 KIA MOS管 一 LED驱动电源原理 1 由于LED的光特性通常都
  • 恒流源驱动电路 随笔一

    方案一 参考论文 LED光源驱动电路研究 华科 硕士 08 06 采用恒流源控制的原因 1 LED的PN结的温度系数为负 温度升高时LED的势垒电势降低 由于这个特点 所以LED不能直接用电压源供电 必须采用限流措施 否则LED随着工作时温
  • 恒流源驱动电路 随笔二

    参考论文 LED的驱动电路研究 大理 硕士 07 06 三个简单方案 电荷泵驱动的典型电路 CAT3604是一个工作在1x 1 5x分数模式下的电荷泵 可调节每只LED白光管脚 xff08 共4只LED管脚 xff09 的电流 使背光的亮度
  • gcc编译c文件常用命令参数解释

    gcc编译c文件 gcc是常用来编译c语言程序的编译器 xff0c 了解它编译c语言的命令参数 xff0c 对c c 43 43 语言的学习是有一定好处的 gcc编译文件一步到位的命令格式 gcc main c o main exe 设置了
  • 恒流源驱动电路 随笔三

    参考论文一 LED蓝绿光黄疸光疗系统的研究与设计 天工 硕士 15 12 AMC7150是一种仅需 xff15 个外部零件的高功率LED驱动IC AMC7150内建P xff37 xff2d 和功率晶体管 xff0c 工作频率可达200kH
  • 光源系统厂商、结构

    参考论文 基于PWM的LED机器视觉光源技术的研究 哈工大 硕士 span class token number 2009 span fpga 前言 机器视觉系统包括 xff1a 照明 镜头 相机 图像采集卡 视觉处理器 led光源分为两大
  • LED驱动IC厂家

    厂家芯片类别 世微半导体 英飞凌Infineon 壹芯半导体科技 xff08 深圳 xff09 有限公司 欧司朗OSRAM xff1a 汽车照明 深圳天微电子有限公司 中铭电子 深圳市华芯光电有限公司 宁波欧特电子科技有限公司 芯片介绍 l
  • 2D/3D模板匹配

    2D 对象 正交视图 物体的组成部分之间的角度和距离可以改变 xff0c 不需要缩放 需要缩放 存在遮挡 杂乱或颜色 物体的特征是具有特定的纹理 xff0c 而不是清晰可见的轮廓 图像高度散焦 对象变化显著 期望物体轮廓的局部变形 xff0
  • linux基础操作之三

    文章目录 10 命令执行顺序控制与管道命令执行顺序的控制1 顺序执行多条命令2 有选择的执行命令 管道3 1 试用3 2 cut 命令 xff0c 打印每一行的某一字段3 3 grep 命令 xff0c 在文本中或 stdin 中查找匹配字
  • 2020华为软挑总结——baseline

    span class token macro property span class token directive keyword include span span class token string lt bits stdc 43
  • 2020华为软挑总结——复赛方案一code

    span class token macro property span class token directive keyword include span span class token string lt iostream gt s
  • 2020华为软挑总结——方案二code

    span class token macro property span class token directive keyword include span span class token string lt iostream gt s
  • 机器视觉照明技术与装置实验研究(论文纪要)

    参考文献 机器视觉照明技术与装置实验研究 中原 硕士 2016 有用 摘要 图片质量很大程度上是由目标周围的照明环境和目标物体表面材质 物体摆放位置所决定的 1 首先 xff0c 对照明系统主要技术进行了研究 研究内容包括光源的参数与选择
  • Affine Transformations(仿射变换)

    英文版原文链接 先修教程 xff1a Remapping 重映射 下一教程 xff1a Histogram Equalization 直方图均衡化 文章目录 结果目标原理什么是仿射变换 我们如何得到一个仿射变换 代码这个程序是做什么的 代码
  • Linux 网桥功能使用

    Linux 网桥功能使用 网桥是在数据链路层 xff0c 将两个LAN连接起来 xff0c 根据MAC地质来转发帧 xff0c 可以看作是低层的路由器 安装网桥配置工具 检测系统中是否有有bridge 工具 xff1a rpm qa gre
  • Remapping(重映射)

    英文版原文链接 上一教程 xff1a Hough Circle Transform Hough圆变换 下一教程 xff1a Affine Transformations 仿射变换 文章目录 结果目标原理什么是重映射 xff1f 代码这个程序
  • 机器视觉(Robot Vision)——1

    参考书籍 Robot Vision MIT机器视觉课程指定教材 机器视觉探究两个基本问题 xff1a 成像过程的基本原理是什么 xff1f 如何探索对成像过程 求逆 的基本知识和方法 所谓 求逆 xff1a 具体来说 xff0c 就是从一张
  • 机器视觉实验架套装选型

    文章目录 0 机器视觉集成商0 1 上海热驰自动化1 海康威视2 集云誉创3 深圳新次元4 机器视觉光源控制器厂5 恒视科技6 小厂商6 机器视觉检测配套商 0 机器视觉集成商 购买链接 基础款 xff1a 580 970 加强款 xff1
  • meiqua / shape_based_matching(issue记录)

    文章目录 readmeissue 1 如何加快responsemap的创建 issue 2 请问一下是否抗缩放呢 xff1f issue 3 匹配准确定位精度还能再提高吗 xff1f branch有些多了 xff0c 能否写个文档介绍一下各