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记录) 的相关文章

  • 【文献导读】XPBD: Position-Based Simulation of Compliant Constrained Dynamics

    作者 xff1a Miles Macklin amp Matthias Muller 单位 xff1a NVIDIA 时间 xff1a 2016 前言 本文要解决的主要问题是PBD中的刚度系数的迭代次数依赖问题 具体来说 xff0c 仿真效
  • 【文献笔记】【部分精读】【CIR】Angle of Arrival Estimation based on Channel Impulse Response Measurements

    文章地址 xff1a https ieeexplore ieee org document 8967562 机器人顶会iros的一篇文章 xff0c 我主要关注其关于CIR估计的部分 文章目录 我的理解CIR估计与AOA估计的关系CIR测量
  • sealos issue #2157 debug 思路流程记录

    sealos issues 2157 debug思路流程 前言分析issue剖析源码解决方案总结 前言 这个项目蛮有意思的 xff0c sealos 是以 kubernetes 为内核的云操作系统发行版 boss上看到 gt 沟通 gt 解
  • numpy 中 shape 与 size 属性

    因为需要生成一个和现有矩阵大小相等的矩阵 xff0c 故查找了相关资料 span class token operator gt gt span span class token operator gt span span class to
  • Numpy中花式索引和shape用法

    原文转载自我的博客benym cn 总结一下最近学习中容易出现问题的地方 代码 from numpy import randMat random randint 0 10 4 3 print 原矩阵 n randMat 索引从0开始计数 p
  • Perl:匹配时空 $1 正则表达式值?

    读者们 我有以下正则表达式问题 code usr bin perl w use 5 010 use warnings my filename input txt open my FILE lt filename or die while m
  • 将 ORB 特征与阈值进行匹配

    我的项目是基于android的草药识别 我使用 ORB 来获取关键点 特征并匹配特征 我想使用这个算法 我使用 4 个参考图像 并将它们的特征 image1 与 image1 1 2 1 3 1 4 2 3 3 4 进行匹配 然后我将到数据
  • 以容差匹配两个非常非常大的向量(快速!但节省工作空间)

    考虑我有两个向量 一种是参考向量 列表 其中包括所有感兴趣的值和一个可能包含任何可能值的样本向量 现在我想在参考列表中找到我的样本的匹配项 该匹配项具有一定的容差 该容差不是固定的并且取决于向量内的比较值 matches abs refer
  • 匹配名称的好算法?

    我正在开发一款手机应用程序 用于将联系人与 Facebook 帐户同步 所以基本上我有一个我的联系人姓名列表和我的 Facebook 好友列表 我希望获得两个列表之间的最佳匹配 当然 我可以自己写一些基本的东西 但也许有一种已知的算法可以得
  • 使用 sed 在第 N 个匹配模式后插入一些文本

    我怎样才能这样做呢 我有多个例如我的文件中存在 foobar 模式 如何在例如之后添加第四个 some text 以下内容对您有用吗 sed a N ba s foobar 1 nsome text 4 inputfile 对于输入 cat
  • 检查给定字符串是否有效匹配一组前缀

    使用什么算法来检查给定字符串是否与一组前缀匹配 以及该组中的哪个前缀 其他变体 给定路径和一组目录 如何检查路径是否在一组目录中 假设没有符号链接 或者它们不重要 我对算法的描述或名称感兴趣 或者解决这个问题的 Perl 模块 或者可以用来
  • mysql - 在分页中查找结果记录的页面

    想象一下我们使用分页来分割并显示这样的mysql结果 按自动增量 ID 和日期排序 SELECT name FROM members ORDER BY id DESC date DESC LIMIT start len 我们使用 php 显
  • 没有匹配的函数用于调用构造函数(c ++)[重复]

    这个问题在这里已经有答案了 EDIT 好吧 我又花了几个小时阅读了一些内容 我想我终于更好地理解了 C OOP 至少是基础知识 我决定一次重写整个程序和代码并进行更多测试 我想这次我缩小了错误的范围 命名风暴 h include
  • SQL 模式匹配

    我有一个与 SQL 相关的问题 我想匹配两个字段的相似性并返回相似程度的百分比 例如 如果我有一个名为 doc 的字段 其中包含以下内容 This is my first assignment in SQL 在另一个领域我有类似的东西 My
  • 何时使用 Rabin-Karp 或 KMP 算法?

    我使用以下字母生成了一个字符串 A C G T 我的字符串包含超过 10000 个字符 我正在其中搜索以下模式 ATGGA TGGAC CCGT 我要求使用字符串匹配算法O m n 运行时间 m pattern length n text
  • 根据相似度匹配 2 个字符串列表

    Problem 我有 2 个字符串列表 我想从我的列表中找到最匹配的对 例如 我有这两个列表 list1 a1 b1 c1 list2 a2 b2 c2 我想得到以下结果 results a1 a2 b1 b2 c1 c2 附加信息 为了比
  • 允许共享起始/结束顶点的定向最大加权二分匹配

    令 G U u V E 为加权有向二分图 即 U 和 V 是二分图的两组节点 E 包含从 U 到 V 或从 V 到 U 的有向加权边 这是一个例子 在这种情况下 U A B C V D E F E A gt E 7 B gt D 1 C g
  • 如何为 r 中两个数据帧之间的匹配观察值分配相同的唯一 ID?

    当我有两个 或更多 数据框并希望为每个数据集中和跨两个数据集的每个匹配观察分配唯一的 ID 时 我有一个实际问题 例如 1 Create dataframe df1 a1 lt c 1 1 1 1 2 2 2 2 1 1 b1 lt c 1
  • 在 R 中匹配多个日期值

    我有以下数据框 DF 描述在特定日期从事项目的人员 ID ProjectName StartDate 1 Health 3 1 06 18 20 2 Education 2 1 07 15 30 1 Education 5 3 09 9 0
  • Oracle SQL Regexp_replace 匹配

    这是我需要完成的一个时髦的匹配 A5 1 9 11 2 需要成为 A05 01 09 11 02 DOT 部分的数量从没有到很多不等 字母 A 将始终存在并且始终为 1 个字符 我想使用 regexp replace 函数 以便将其用作排序

随机推荐

  • 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 能否写个文档介绍一下各