当前位置: 首页 > news >正文

果蔬识别系统性能优化之路(三)

目录

    • 前情提要
      • 遗留问题
    • 解决方案
      • 优化查询速度
      • 优化ivf初始化的速度
    • 下一步

前情提要

果蔬识别系统性能优化之路(二)

遗留问题

  1. 优化同步速度,目前大约30秒,不是一个生产速度
    这次来解决遗留问题

通过console,发现两个地方特别耗时,一个是查询数据,另一个是初始化ivf

 /*** 同步redis* @param storeCode*/async syncRedis(storeCode: string) {let s = Date.now();const featureDatabase = await this.findAll(storeCode);let e = Date.now();console.log(`查询耗时1:${e - s}ms`);const ids = featureDatabase.map(({ id }) => id);await this.redisService.set(`${storeCode}-featureDatabase`, JSON.stringify(ids));s = Date.now();const url = 'http://localhost:5000/sync'; // Python 服务的 URLawait firstValueFrom(this.httpService.post(url, { data: featureDatabase, storeCode }));e = Date.now();console.log(`查询耗时3:${e - s}ms`);}

在这里插入图片描述

解决方案

优化查询速度

之前使用的是FIND_IN_SET方法对类似1,2,3这样的数据进行包含条件的查询,速度太慢了,优化后:

/*** 查询所有* @param storeCode*/async findAll(storeCode: string) {return await this.featureRepository.createQueryBuilder('feature').select(['feature.id', 'feature.features']).where('feature.storeCode REGEXP :storeCode', { storeCode: `(^|,)${storeCode}(,|$)` }).getMany();}

效果提升了一倍:
在这里插入图片描述

优化ivf初始化的速度

当前的初始化方法

 def __init__(self, features, nlist=100, m=16, n_bits=8):d = features.shape[1]# 创建量化器quantizer = faiss.IndexFlatL2(d)  # 使用L2距离进行量化self.index = faiss.IndexIVFPQ(quantizer, d, nlist, m, n_bits)# 训练索引self.index.train(features)self.index.add(features)  # 将特征向量添加到索引中

优化方法:

  1. 增加并行化处理
# 设置线程数,例如使用所有可用的CPU核心
faiss.omp_set_num_threads(num_threads)  # num_threads 是你希望使用的线程数量
  1. 减少索引的复杂度
    减少nlist和m的值,但这样会损失精度,先不采用
  2. 使用增量添加数据
    分批处理可以分散压力,同时利用数据流式处理的优势。
batch_size = 1000  # 每次处理1000个特征
for i in range(0, len(features), batch_size):self.index.add(features[i:i+batch_size])
  1. 更换其他索引类型
self.index = faiss.IndexIVFFlat(quantizer, d, nlist)

下一步

  1. 新建store_feature表,关联storeCode和featureId表,对数据库进行规范化,创建一个新的表来映射storeCode与feature的关系,从而可以使用简单的WHERE条件来充分利用索引
  2. 实现对特征向量ivf的增删改查

相关文章:

果蔬识别系统性能优化之路(三)

目录 前情提要遗留问题 解决方案优化查询速度优化ivf初始化的速度 下一步 前情提要 果蔬识别系统性能优化之路(二) 遗留问题 优化同步速度,目前大约30秒,不是一个生产速度 这次来解决遗留问题 通过console,发现两个…...

时序预测|基于小龙虾优化高斯过程GPR数据回归预测Matlab程序COA-GPR 多特征输入单输出 附赠基础GPR

时序预测|基于小龙虾优化高斯过程GPR数据回归预测Matlab程序COA-GPR 多特征输入单输出 附赠基础GPR 文章目录 一、基本原理二、实验结果三、核心代码四、代码获取五、总结 时序预测|基于小龙虾优化高斯过程GPR数据回归预测Matlab程序COA-GPR 多特征输入单输出 附赠基础GPR 一、…...

C#进阶-快速了解IOC控制反转及相关框架的使用

目录 一、了解IOC 1、概念 2、生命周期 二、IOC服务示例 1、定义服务接口 2、实现服务 三、扩展-CommunityToolkit.Mvvm工具包 Messenger信使 方式一(收发消息) 方式二(收发消息) 方式三(请求消息&#xf…...

C++内存布局

文章目录 C内存布局1.文字介绍2.图片介绍3.代码介绍 C内存布局 1.文字介绍 1.内核态空间 2.用户态空间 (1)栈区:存储局部变量和函数调用的相关信息,栈的特点是自动分配和释放,由操作系统管理。栈由高地址向低地址生长,通常为0x…...

【Linux 19】线程概念

文章目录 🌈 一、线程的概念⭐ 1. 线程是什么⭐ 2. 线程的优点⭐ 3. 线程的缺点⭐ 4. 线程的异常⭐ 5. 线程的用途 🌈 二、进程和线程⭐ 1. 进程和线程的区别⭐ 2. 进程的多线程共享⭐ 3. 进程和线程的关系⭐ 3. 进程和线程的关系 🌈 一、线程…...

[区间dp]添加括号

题目描述 有一个 n n n 个元素的数组 a a a。不改变序列中每个元素在序列中的位置,把它们相加,并用括号记每次加法所得的和,称为中间和。现在要添上 n − 1 n - 1 n−1 对括号,加法运算依括号顺序进行,得到 n − …...

jenkins流水线+k8s部署springcloud微服务架构项目

文章目录 1.k8s安装2.jenkins安装3.k8s重要知识1.简介2.核心概念3.重要命令1.查看集群消息2.命名空间3.资源创建/更新4.资源查看5.描述某个资源的详细信息6.资源编辑7.资源删除8.资源重启9.查看资源日志10.资源标签 4.k8s控制台1.登录2.界面基本操作1.选择命名空间2.查看命名空…...

安卓开发板_联发科MTK开发评估套件串口调试

串口调试 如果正在进行lk(little kernel ) 或内核开发,USB 串口适配器( USB 转串口 TTL 适配器的简称)对于检查系统启动日志非常有用,特别是在没有图形桌面显示的情况下。 1.选购适配器 常用的许多 USB 转串口的适配器&#xf…...

vue+el-table 可输入表格使用上下键进行input框切换

使用上下键进行完工数量这一列的切换 <el-table :data"form.detailList" selection-change"handleChildSelection" ref"bChangeOrderChild" max-height"500"><!-- <el-table-column type"selection" width&quo…...

中国书法——孙溟㠭浅析碑帖《三希堂法帖》

孙溟㠭浅析碑帖《三希堂法帖》 全称是《三希堂石渠宝笈法帖》&#xff0c;是中国清代宫廷刻帖&#xff0c;一共三十二册。 清朝高宗弘历收藏了晋王羲之《快雪时晴帖》&#xff0c;王献之的《中秋帖》&#xff0c;王珣的《伯远帖》三种王氏原墨迹。故而把所藏法书之所…...

深入探讨生成对抗网络(GANs):颠覆传统的AI创作方式

在人工智能的快速发展中&#xff0c;生成对抗网络&#xff08;Generative Adversarial Networks, GANs&#xff09;无疑是一个引人注目的技术。自2014年由Ian Goodfellow等人首次提出以来&#xff0c;GANs已经在图像生成、文本生成、视频生成等多个领域展现出了惊人的能力。本文…...

vmware Vnet8虚拟网卡丢失的找回问题

vmware Vnet8虚拟网卡丢失的找回问题 1.打开VMware Workstation 2.然后点击Edit --> Virtual Network Edit --> 打开Virtual Network Edit框 &#xff0c; 3.点击最下面的的Restore Default 按钮&#xff0c; 3.恢复默认设置&#xff0c;这会在网络连接那块可以看到丢失…...

Python 从入门到实战13(字符串简介)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们通过举例学习了流程控制语句中的循环语句。今天继续讨…...

Redis_RDB持久化

基于RDB的持久化方式会把当前内存中所有的redis键值对数据以快照的方式写入硬盘文件中&#xff0c;如果需要恢复数据&#xff0c;就把快照文件读到内存中。 RDB快照文件是经压缩的二进制格式的文件&#xff0c;它的储存路径不仅可以在redis服务器启动前通过配置参数来设置&…...

SOP流程制定:vioovi ECRS工时分析软件的智慧引领

在现代制造业中&#xff0c;标准化操作流程&#xff08;SOP&#xff09;已成为提升生产效率、确保产品质量、降低运营成本的关键要素。SOP不仅为生产活动提供了明确的指导&#xff0c;还促进了企业管理的规范化和精细化。然而&#xff0c;如何科学、高效地制定SOP流程&#xff…...

并发编程-synchronized解决原子性问题

并发编程-synchronized解决原子性问题 文章目录 并发编程-synchronized解决原子性问题零、说在前面一、线程安全问题1.1 什么是线程安全问题1.2 自增运算不是线程安全的1.3 临界区资源与临界区代码段 二、synchronized 关键字的使用2.1 synchronized 关键字作用2.2 synchronize…...

CSS之我不会

非常推荐html-css学习视频&#xff1a;尚硅谷html-css 一、选择器 作用&#xff1a;选择页面上的某一个后者某一类元素 基本选择器 1.标签选择器 格式&#xff1a;标签{} <h1>666</h1><style>h1{css语法} </style>2.类选择器 格式&#xff1a;.类…...

AI绘画:SD打光神器!(Stable Diffusion进阶篇:Imposing Consistent Light)

前言 在上一篇笔记中学习了如何简单地下载以及使用IC-Light&#xff0c;今天的内容会稍微有点不一样。 对于学过stable diffusion的小伙伴来说&#xff0c;forge UI和Comfy UI会更加熟悉一些。在IC-Light发布后&#xff0c;Openpose editor的开发者将其制作成了一个Forge UI上…...

QQ频道机器人零基础开发详解(基于QQ官方机器人文档)[第二期]

QQ频道机器人零基础开发详解(基于QQ官方机器人文档)[第二期] 第二期介绍&#xff1a;频道模块之频道管理 目录 QQ频道机器人零基础开发详解(基于QQ官方机器人文档)[第二期]第二期介绍&#xff1a;频道模块之频道管理获取用户详情获取用户频道列表获取频道详情获取子频道列表获…...

参赛心得和思路分享:2021第二届云原生编程挑战赛2: 实现一个柔性集群调度机制

关联比赛: 2021第二届云原生编程挑战赛2&#xff1a;实现一个柔性集群调度机制 参赛心得 历时快两个月的第二届云原生编程挑战赛结束了&#xff0c;作为第一次参赛的萌新&#xff0c;拿下了28名的成绩&#xff0c;与第一名差了19万分&#xff0c;因为赛制时间太长&#xff0c…...

STM32CubeIDE新手避坑:如何正确添加自定义文件夹(以OLED驱动为例)

STM32CubeIDE工程管理实战&#xff1a;从零构建模块化OLED驱动框架 第一次在STM32CubeIDE中引入第三方驱动时&#xff0c;90%的开发者都会在头文件引用环节卡壳。那些看似简单的"../BSP/oled.h"路径背后&#xff0c;隐藏着嵌入式工程管理的核心逻辑。本文将用真实的O…...

ThingsBoard共享属性实战:从MQTT订阅到规则链触发的完整数据流解析

ThingsBoard共享属性实战&#xff1a;从MQTT订阅到规则链触发的完整数据流解析 在物联网平台开发中&#xff0c;数据流的清晰理解和精确控制是构建可靠系统的关键。ThingsBoard作为一款开源的物联网平台&#xff0c;其共享属性机制和规则链引擎为开发者提供了强大的数据流转能力…...

从0到1:企业级AI项目迭代日记 Vol.29|自然语言变工作流:Agent 自动拼装子图的实现路径

把一件复杂的事做简单&#xff0c;有两种方式&#xff1a;降低门槛&#xff0c;或者让别人替你做。团队选择了后者。那个“别人”&#xff0c;是我们自己的 AI。一、工作流太难配&#xff0c;所以让 Agent 来配昨天上线了工作流初版&#xff0c;可视化节点编排&#xff0c;支持…...

给AI模型选‘口粮’:MIT-BIH、CPSC、PTB-XL,哪个ECG数据集更适合你的项目?

给AI模型选‘口粮’&#xff1a;三大ECG数据集深度评测与实战指南 当心电图&#xff08;ECG&#xff09;分析遇上人工智能&#xff0c;数据质量直接决定模型性能天花板。PhysioNet作为全球最大的生物医学信号开放平台&#xff0c;其收录的MIT-BIH、CPSC-2018和PTB-XL三大经典EC…...

别急着加内存!PyTorch报错‘DefaultCPUAllocator: not enough memory’的另类解法(附一键修复脚本)

别急着加内存&#xff01;PyTorch报错‘DefaultCPUAllocator: not enough memory’的另类解法 当你看到PyTorch抛出RuntimeError: DefaultCPUAllocator: not enough memory时&#xff0c;第一反应可能是检查任务管理器——然后发现物理内存明明还剩大半&#xff0c;这个报错就显…...

超导量子比特控制技术:DRAG与神经网络优化

1. 超导量子比特控制技术概述在超导量子计算系统中&#xff0c;精确的量子态操控是实现高保真度量子门操作的基础。传统微波脉冲控制面临两大核心挑战&#xff1a;非绝热跃迁导致的能级泄漏和频率失谐引起的操作误差。DRAG&#xff08;Derivative Removal by Adiabatic Gate&am…...

【网络安全】Web安全防护:从XSS到CSRF的攻防实战

【网络安全】Web安全防护&#xff1a;从XSS到CSRF的攻防实战 引言 Web安全是现代应用开发中不可忽视的重要环节。随着Web应用的普及&#xff0c;各种安全威胁也日益增多。本文将详细介绍常见的Web安全漏洞及其防护方法。 一、XSS攻击与防护 1.1 XSS类型 类型说明攻击方式存储型…...

模电数电不再怕:用甘晴void的三本笔记法,搞定HNU电路与电子学课堂测验与作业

模电数电不再怕&#xff1a;用甘晴void的三本笔记法&#xff0c;搞定HNU电路与电子学课堂测验与作业 电路与电子学这门课&#xff0c;对很多计算机专业的学生来说就像一座难以逾越的高山。模电的抽象概念、数电的逻辑设计&#xff0c;加上频繁的课堂测验和课后作业&#xff0c;…...

统信UOS/麒麟KYLINOS用户看过来:除了Termius,这款开源免费的SSH工具electerm更香!

国产操作系统用户的SSH工具新选择&#xff1a;electerm深度体验报告 对于统信UOS和麒麟KYLINOS用户而言&#xff0c;远程服务器管理是日常工作中的高频需求。Termius作为老牌SSH工具确实表现不俗&#xff0c;但今天我们要探讨的electerm&#xff0c;或许能给你带来意想不到的惊…...

MATLAB图像处理实战:用strel函数玩转膨胀腐蚀,5分钟搞定车牌去噪

MATLAB车牌去噪实战&#xff1a;形态学操作中的结构元素艺术 车牌识别系统在智能交通、停车场管理等场景中应用广泛&#xff0c;但实际采集的车牌图像常因环境干扰出现噪声、污渍或字符粘连问题。形态学处理作为图像预处理的关键步骤&#xff0c;其效果高度依赖结构元素的选择与…...