-
实现一个AI Agent
导入Agent是什么?这段时间deepseek R1爆火,当大家使用deepseek R1进行聊天的时候,我们是一问一答的形式,和之前的chat GPT一样。这样的对话形式的AI有一个缺点,那就是不能和电脑本地环境进行交互。比如你让它们生成一段代码,它们直接给你代码,无法帮你在本地建立文件,然后写入,甚至运行测试,你只能拷贝它们给出的代码然后自己建立文件然后粘贴进去,并且编译或者解释运行。而Agent就是能够做到这一点,你可能想到了cursor,同样大火的一款IDE,没错,Cursor I...…
-
实现一个RAG系统,构建专属客服
导入RAG(Retrieval-Augmented Generation,检索增强生成) 是一种将信息检索(Information Retrieval)与文本生成(Text Generation)相结合的架构,通过动态检索外部知识库,将相关文档作为上下文输入给 LLM,从而生成更准确、可靠、可追溯的回答。简单来说,就是将自己专属的技术文档,比如公司产品介绍,产品技术文档等汇集在一起,然后当用户对公司以及产品进行提问时,大语言模型可以从这些技术文档中找到最准确的答案来回答你,这相当于一个精通...…
-
目标检测安卓部署
导入主要是今年的最新yolo模型,也就是yolo v8在安卓手机上的部署,利用了腾讯的ncnn高性能推理框架。ncnn链接。ncnn是用纯C++编写的推理框架,虽然是跨平台的,但是主要用途还是手机端,针对手机端加强优化,支持IOS和安卓。demo简单的demo演示:…
-
如何提高YOLO帧率
导入YOLO系列目标检测发展到现在已经是v8版本了,而我们使用YOLO也不像以前那样麻烦了,ultralytics库可以非常方便的使用所有版本的YOLO,不管是自定义数据集,自己训练,还是使用官方权重,都很方便。但是很多开发者可能会发现使用YOLO的帧率不高。这篇博客简单介绍下如何提高本地运行YOLO的帧率。正文首先先给出使用YOLO的基本样例from ultralytics import YOLOimport cv2import mathimport timecap = cv2.Vide...…
-
实现一个简化版的stable diffusion
导入相信大家最近都被stable diffusion刷屏了,无论是不是研究AI的,不如说更大部分都是AI领域之外的人,都多少体验过了,相信也为这个强大的生成模型的效果所震惊。从名字也可以看出stable diffusion自然是基于diffusion扩散技术的,关于扩散模型,我之前也写过一篇文章从头开始实现扩散模型,也在文章中简单说明了扩散模型的一些数学原理和公式情况,感兴趣的可以先去看看。其实在stable diffusion存在另一个和扩散模型同样重要的模型,只不过运气不好,没出现在标...…
-
AI产品级部署
导入几年前写过一篇博客讲的是如何发布产品,提到了docker的基本用法,也用一个简单的例子讲解了docker的多阶段构建。今天就详细展开说说如何利用docker产品级,工业级的部署一个AI项目。我个人其实对AI的工程研究程度进行了简单的分级,入门阶段是使用非常干净的数据集,比如机器学习入门可能接触的第一个数据集,iris鸢尾花数据集,直接拿来用,利用最基本的机器模型或者自己定义的稍微复杂一点的机器模型来学习,这个阶段还称不上工程。稍微深入一点的阶段,是有一定的数据工程能力,能够对现实的总是...…
-
从零开始实现LoRA微调
目标 从零实现 LoRA 层 支持动态注入/卸载 LoRA 支持多个 LoRA 适配器热插拔切换 适配 HuggingFace Transformers 模型(以 facebook/opt-125m 为例)第一部分:手动实现 LoRA 核心模块LoRA Linear 层(替换原生 nn.Linear)# lora_layer.pyimport torchimport torch.nn as nnimport torch.nn.functional as Ffrom typing i...…
-
联机游戏热更新发布原理
导入之前发布了两篇讲联机游戏原理的博客,然后最近在邮箱收到一个读者的邮件,向我请教联机游戏中更新的问题,因此我就写了一个例子,通过这篇博客简单进行说明。联机游戏更新作者觉得主要有两类: 热补丁更新:无需重新下载和退出客户端,实时就生效的补丁更新,一般包括UI界面资源(比如音效、图片等资源文件),脚本逻辑,游戏配置数据,非核心的游戏逻辑等 版本更新和冷补丁:安全性修复,核心游戏内容更新,关键数据结构重构,改变了二进制文件,需要退出游戏,重新下载,当然一般是增量下载,才...…
-
联机游戏机制--续
导入上一篇博客简单介绍了联机游戏机制,这篇直接找一个简单的单机游戏改成联机,希望对读者理解联机游戏机制有帮助。油管一搜pygame就找到了这个游戏,链接,一个经典的雷电游戏的简单python实现,一共只有300多行代码。那就这个了。正文一个简单的联机游戏我习惯用下面这种简单的框架: 客户端 建立连接,处理玩家输入 利用tcp或者可靠udp协议发送输入到服务器端。同时本地利用玩家输入进行本地的预测 ...…
-
联机游戏机制
导入联机游戏和单机游戏其实区别很大,有不少开发者单机游戏开发熟练,但是接触联机游戏的时候还是无从下手,问题颇多,这里我就想写篇博客说下我的一些个人看法。联机游戏机制单机和联机的最本质区别自然就是一个需要联网一个不需要联网,这看起来是废话,但是背后带来的问题却是很多。联网意味着数据需要网络交互,就带来一个任何游戏玩家都知道的东西,ping或者叫延迟。我们可以想象一个场景,假设我们在玩一个联机游戏,我本地按下方向键移动,然后我的输入会通过网络传输到服务器,接着服务器对我们的输入进行处理或者直接...…
-
diffusion扩散模型
导入去年提出的扩散模型(也就是DDPM(Denoising Diffusion Probabilistic Models))确实是生成模型中的一大突破,个人觉得比GAN更有前途。我不想仔细讲解扩散模型的原理和公式推导,而是希望直接通过代码给出更加直观清晰的视角,然后再配合简单的说明。正文扩散模型最核心的步骤就是2步,正向加噪和反向扩散。所谓正向加噪,就是拿一个清晰的原图,然后不断加入均值0方差1的高斯分布噪声(以特定的系数),重复T次之后,图像就几乎完全变成了噪声图像,分辨不出任何的原图信...…
-
从头开始实现一个transformer
导入2017年,Google 在论文《Attention Is All You Need》中提出 Transformer,完全基于注意力机制,摒弃循环与卷积,实现并行化训练,建模长距离依赖,核心优势: 特性 说明 并行计算 不像 RNN 需顺序计算,可并行处理整个序列 长距离依赖 注意力机制直接建模任意位置间关系 可扩展性强 易堆叠、易扩展到更...…
-
实现一个简单的“动捕”
导入现在国内的动画很多都走向3D了,而3D技术一个非常方便的地方就是可以用真人进行动作捕获,然后导入到建模系统中,形成骨骼动画,不仅效率提升很多,效果也非常逼真。不过这其实和这篇博客关系不大,虽然我会实现一个简单的“动捕”效果,但是和传统意义上动捕不一样,传统是全身绑满传感设备,然后捕获动作,这里只是用视觉的算法来捕获。这篇博客的主要目的是向大家介绍一个视觉库,那就是google的mediapipe库,这个库有很多模块,涉及是视觉的多个任务,其中一个就是手势识别,也是本文中会用到的模块。关...…
-
鸟群算法
导入集群算法是游戏编程中,经常会用到的一个算法,比如群体怪物的移动逻辑。而鸟群算法,又称为boids算法,是集群算法中一个十分优雅的算法,它不依赖集群中leader的移动逻辑,而是一种去中心化的集群算法。正文Boids鸟群算法只依赖于3个基本原则: 分离原则:计算附近Boids的排斥力,避免碰撞 对齐原则:计算附近Boids的平均速度方向,使群体运动一致 聚集原则:计算附近Boids的中心位置,产生向心力 分离原则分离原则就是不让鸟群个体之间靠的太近...…
-
GIF录制程序
导入之前使用的GIF录制工具,发现自定义区域选择和实际录制区域总有偏移,当时意识到是DPI的问题,用多了发现实在还是不方便,所以想着就自己写一个简单的GIF录制程序吧,也不想网上找那些都是广告的软件了,毕竟只是一个小程序。正文主要就实现3个基本功能: 窗口录制 自定义区域录制 设置录制的帧间隔 功能不算复杂,所以就简单说下几个关键点,就不详细说明了: 利用wind32 API的SetProcessDPIAware开启DPI感知模式,这样就不...…
-
流体仿真-基础篇
前言主要是根据Robert Bridson著名的Course Notes,个人写的笔记整理,补充上一些我认为不够清晰的地方。可能分成几个部分,首先先整理基础篇, 从基本的流体力学方程入手,解释每一项的具体含义,以及原理,然后针对不同的流体特性对方程进行简化,而且NS方程目前还没有人能够求出解析解, 只有100多个特解,因此只能采用数值上的近似方法,所以接下来会进入数值分析该方程的步骤,近似求解方程,解出速度场,然后进行流体的模拟仿真。 需要有一定的数学基础:微积分,向量分析,微分方程...…
-
从蒙特卡洛到阿尔法元
蒙特卡洛搜索树对于围棋,象棋,五子棋,黑白棋,井字棋这类游戏来说,都属于有限两人零和回合制游戏,这种游戏都可以用博弈树来解决,以井字棋为例,如下图所示:这就是一棵井字棋的博弈树,当然节点没有完全的展开,我们现在关注显示棋盘的这条路径,从上到下我们可以看到这就是完整的一局游戏,每个分支就代表我们的落子。而且相邻树的层次是对应不同的玩家,这一层是圈,则相邻层都是叉。那么我们可以把所有的状态都列出来,这样根据当前棋面,我们可以找到最优的路径。但是井字棋我们的确可以这样做,象棋和围棋这类空间很大的...…
-
QT表盘和折线图控件
导入上篇博客分享了一个QT的带进度条的球型按键的控件模块,可以直接复制到你的QT UI项目下import导入,简单的几个API函数即可调用,兼容你的项目。这篇博客再分享2个最近写的美化控件模块,同样直接import,然后简单的API调用即可。分别是折线图和汽车表盘的美化控件,效果如下: API折线图控件API: create_dynamic_line_chart函数 """ @brief 创建动态折线图控件的公共API接口...…
-
实现一个美化QT进度条球体按键
导入主要是分享一个美化的QT进度条球体按键,因为不复杂,所以没必要做成包,直接设计成模块的形式,哪里需要粘贴到哪里用即可。大概效果就是这样:API主要接口函数有5个: create_circular_button 创建按键 """@brief 创建按键@param parent_window,表示依赖的父窗口@param callback_func,表示实际执行程序@param initial_text,表示按键初始显示文本@param theme,球体主题颜色 有'blu...…
-
车牌检测
介绍上一篇博客中介绍了如何利用TensorFlow目标检测API检测自己的数据集,并且随便用了20张百度的图片来做了一个实例,最后训练的效果也当然很差,所以这一次我打算好好的训练一次车牌检测。没有看上一篇博客的建议先去看,这篇博客不涉及具体细节,都在上篇博客中说到。模型鉴于上一次选择的模型相对简单,这次选择了一个稍微复杂的模型,faster_rcnn_inception_v2,并且不从头开始训练了,下载了官方的预训练模型,是在coco数据集上训练好的模型,链接,我也给出链接,可以自行下载解...…