-
目标检测安卓部署
导入主要是今年的最新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...…
-
AI产品级部署
导入几年前写过一篇博客讲的是如何发布产品,提到了docker的基本用法,也用一个简单的例子讲解了docker的多阶段构建。今天就详细展开说说如何利用docker产品级,工业级的部署一个AI项目。我个人其实对AI的工程研究程度进行了简单的分级,入门阶段是使用非常干净的数据集,比如机器学习入门可能接触的第一个数据集,iris鸢尾花数据集,直接拿来用,利用最基本的机器模型或者自己定义的稍微复杂一点的机器模型来学习,这个阶段还称不上工程。稍微深入一点的阶段,是有一定的数据工程能力,能够对现实的总是...…
-
联机游戏机制--续
导入上一篇博客简单介绍了联机游戏机制,这篇直接找一个简单的单机游戏改成联机,希望对读者理解联机游戏机制有帮助。油管一搜pygame就找到了这个游戏,链接,一个经典的雷电游戏的简单python实现,一共只有300多行代码。那就这个了。正文一个简单的联机游戏我习惯用下面这种简单的框架: 客户端 建立连接,处理玩家输入 利用tcp或者可靠udp协议发送输入到服务器端。同时本地利用玩家输入进行本地的预测 ...…
-
联机游戏机制
导入联机游戏和单机游戏其实区别很大,有不少开发者单机游戏开发熟练,但是接触联机游戏的时候还是无从下手,问题颇多,这里我就想写篇博客说下我的一些个人看法。联机游戏机制单机和联机的最本质区别自然就是一个需要联网一个不需要联网,这看起来是废话,但是背后带来的问题却是很多。联网意味着数据需要网络交互,就带来一个任何游戏玩家都知道的东西,ping或者叫延迟。我们可以想象一个场景,假设我们在玩一个联机游戏,我本地按下方向键移动,然后我的输入会通过网络传输到服务器,接着服务器对我们的输入进行处理或者直接...…
-
diffusion扩散模型
导入去年提出的扩散模型(也就是DDPM(Denoising Diffusion Probabilistic Models))确实是生成模型中的一大突破,个人觉得比GAN更有前途。我不想仔细讲解扩散模型的原理和公式推导,而是希望直接通过代码给出更加直观清晰的视角,然后再配合简单的说明。正文扩散模型最核心的步骤就是2步,正向加噪和反向扩散。所谓正向加噪,就是拿一个清晰的原图,然后不断加入均值0方差1的高斯分布噪声(以特定的系数),重复T次之后,图像就几乎完全变成了噪声图像,分辨不出任何的原图信...…
-
鸟群算法
导入集群算法是游戏编程中,经常会用到的一个算法,比如群体怪物的移动逻辑。而鸟群算法,又称为boids算法,是集群算法中一个十分优雅的算法,它不依赖集群中leader的移动逻辑,而是一种去中心化的集群算法。正文Boids鸟群算法只依赖于3个基本原则: 分离原则:计算附近Boids的排斥力,避免碰撞 对齐原则:计算附近Boids的平均速度方向,使群体运动一致 聚集原则:计算附近Boids的中心位置,产生向心力 分离原则分离原则就是不让鸟群个体之间靠的太近...…
-
GIF录制程序
导入之前使用的GIF录制工具,发现自定义区域选择和实际录制区域总有偏移,当时意识到是DPI的问题,用多了发现实在还是不方便,所以想着就自己写一个简单的GIF录制程序吧,也不想网上找那些都是广告的软件了,毕竟只是一个小程序。正文主要就实现3个基本功能: 窗口录制 自定义区域录制 设置录制的帧间隔 功能不算复杂,所以就简单说下几个关键点,就不详细说明了: 利用wind32 API的SetProcessDPIAware开启DPI感知模式,这样就不...…
-
流体仿真-基础篇
前言主要是根据Robert Bridson著名的Course Notes,个人写的笔记整理,补充上一些我认为不够清晰的地方。可能分成几个部分,首先先整理基础篇, 从基本的流体力学方程入手,解释每一项的具体含义,以及原理,然后针对不同的流体特性对方程进行简化,而且NS方程目前还没有人能够求出解析解, 只有100多个特解,因此只能采用数值上的近似方法,所以接下来会进入数值分析该方程的步骤,近似求解方程,解出速度场,然后进行流体的模拟仿真。 需要有一定的数学基础:微积分,向量分析,微分方程...…
-
从蒙特卡洛到阿尔法元
蒙特卡洛搜索树对于围棋,象棋,五子棋,黑白棋,井字棋这类游戏来说,都属于有限两人零和回合制游戏,这种游戏都可以用博弈树来解决,以井字棋为例,如下图所示:这就是一棵井字棋的博弈树,当然节点没有完全的展开,我们现在关注显示棋盘的这条路径,从上到下我们可以看到这就是完整的一局游戏,每个分支就代表我们的落子。而且相邻树的层次是对应不同的玩家,这一层是圈,则相邻层都是叉。那么我们可以把所有的状态都列出来,这样根据当前棋面,我们可以找到最优的路径。但是井字棋我们的确可以这样做,象棋和围棋这类空间很大的...…
-
车牌检测
介绍上一篇博客中介绍了如何利用TensorFlow目标检测API检测自己的数据集,并且随便用了20张百度的图片来做了一个实例,最后训练的效果也当然很差,所以这一次我打算好好的训练一次车牌检测。没有看上一篇博客的建议先去看,这篇博客不涉及具体细节,都在上篇博客中说到。模型鉴于上一次选择的模型相对简单,这次选择了一个稍微复杂的模型,faster_rcnn_inception_v2,并且不从头开始训练了,下载了官方的预训练模型,是在coco数据集上训练好的模型,链接,我也给出链接,可以自行下载解...…
-
Tensorflow目标检测API
简介Tensorflow 目标检测API其实是官方提供的一组样例,里面不仅包含目标检测,还有OCR,GAN,自编码器,img2txt等等,感兴趣的可以自己慢慢研究。链接如下Tensorflow APIs,找到目标检测目录,大致结构如下:├─.ipynb_checkpoints├─card_inference_graph│ └─saved_model│ └─variables├─data├─images│ ├─test│ └─train├─models│ └─__pycac...…
-
emojify系列(二)
模型构建预训练词向量导入上一篇博文里,我们已经完成了数据集的制作,接下来的一个问题就是,模型的构建,第一个问题就是词向量的问题,我们已经有了一个训练好的词向量,那么在keras中很好处理,可以看我的gitghub keras 实现,那么pytorch是怎么实现与训练向量的导入的呢,如果看官方文档,查看完整参数列表,发现似乎没有参数可以实现预训练向量的导入,只有定义好就是随机的初始化向量。查看了源码,发现了存储embeding权重的变量就是weights,然后我尝试直接修改weights的值...…
-
emojify系列(一)
起因前段时间完成了吴恩达的深度学习第五专题序列模型,里面一些作业都很有意思,包括这个Emojify,根据你输入的话语判断你话语的含义,并且用一个表情来表示,并且把表情放在语句后,这样就可以实现说话时自动添加最贴切的表情。具体参考我的github,那是一个keras版本的实现,也是Coursera作业使用的框架,我稍稍改编了一下,里面有些实现的效果以及模型的结构,这里就不多说了,代码也很简单,容易理解。本来这么简单感觉没必要写个博客,但是正好用pytorch复现一遍,此间遇到不少坑,所以我打...…
-
CycleGAN
CycleGAN介绍优势具体介绍之前,首先说说CycleGAN的一些优势,CycleGAN实现的是一类图片到另一类图片的转化,也就是图片域的转变,对于这类问题pix2pix是一种不错的方法,但是pix2pix训练时需要成对的训练样本,也就是比如你要训练图片风景从白天到黑夜的转变,那么你的训练集就是各种风景图片的白天照片以及其对应的黑夜照片,必须一一对应。那么CycleGAN则不需要,所以如果用CycleGAN来做这个问题,只需要收集一些白天的风景图片和一些黑夜的风景图片即可,不需要是同一种...…
-
风格迁移
风格转换风格转换就是将现实的图片转换成带有艺术风格的照片,比如把你自己的照片转换成梵高的星空风格等等这样人人都可以变成梵高了,可以进行你想要的艺术创作。Gatys于2015年提出了一篇论文,A Neural Algorithm of Artistic Style,实现了基于深度学习的艺术风格转换,这是真正意义上的第一篇深度学习实现艺术风格转换的论文,后来又出现了很多更优秀的论文,转换速度更快,效率和质量更好。但是很多都是基于这篇论文的。因此下面我将详细的解读这篇论文,以及在pytorch上...…
-
实时人脸识别
MTCNNMTCNN是中国科学院深圳先进技术研究院发表的一篇论文,入选ECCV2016,是一篇非常优秀的人脸检测和人脸对齐的论文。提出了一种Multi-task的人脸检测框架,将人脸检测和人脸特征点检测同时进行。论文使用3个CNN级联的方式,和Viola-Jones类似,实现了coarse-to-fine的算法结构。算法大概的流程如下:当给定一张照片的时候,将其缩放到不同尺度形成图像金字塔,以达到尺度不变。 Stage 1:使用P-Net是一个全卷积网络,用来生成候选窗和边框回归...…
-
一个简易调试器的实现
调试器利用ptrace实现一个简单的debugger调试器,支持断点,单步调试,continue继续运行,print打印变量。同时依赖于libdwarf库,dwarf是Linux下调试结构,当我们使用gcc -g编译程序时,生成的.debug节的结构就是dwarf格式的,包含一定调试符号信息,行号信息,行号和源代吗对应信息等。使用dwarfdump命令可以查看带有.debug节的ELF可执行文件的格式详情。完整代码#include <stdio.h>#include <s...…
-
doxygen代码文档
导入上篇博客讲到了项目如何发布,虽然隔了好久,还是想讲一下doxygen。doxygen是一个代码文档生成工具,根据特定的注释语法自动生成。相信读者都看过很多的开源项目的API文档,doxygen就可以生成这种在线文档效果,通过浏览器查看,也可以用是LaTeX格式。这是跟项目发布息息相关的,项目发布,尤其是闭源项目的话,API文档是开发者了解项目的最重要途径,因此必须清晰且完善。而对于开源项目,重要性也是一样得,很多开发者发布的开源项目,就一个简单README.md,其他没有任何的文档,让...…
-
项目如何发布
导入近来看了不少python的开源项目,大多是个人项目,所以有个问题比较突出,就是可复现性很多都比较差。虽然很多稍微调试下也都能跑通,但是并不是我懒得调试,而是不能直接运行的项目不能算是一个健全的项目。如果是生产环境下,要求就更高了。我敢说就连他们自己过段时间都不能跑通自己的代码,因为他们的电脑环境也在不断变化,python版本,第三方库版本的变化都可能影响项目的跑通。虚拟环境对于个人python项目,除非是一个文件的简单脚本,只要是稍微有点代码量的项目,我都是建议进入代码阶段之前一定要先...…