Java部署YOLOv8模型量化提速:从FP32到INT8完整实践

前阵子做个工业质检项目,跑的是YOLOv8检测模型,部署环境锁定在Java后端。代码写完之后发现推理速度一直上不去,GPU利用率不高,内存带宽倒是快吃满了。一开始怀疑是不是ONNX导出有问题,后来一条条排查,瓶颈最终定在模型精度格式上——FP32推理在Java侧完全没有发挥出硬件潜力。于是做了个从FP32到FP16再到INT8的完整量化,整套做下来精度掉得很少,mAP损失稳定在1%以内,但帧率提升了3倍左右。这篇文章把整个过程捋一遍,包括每一步的决策逻辑、关键代码、实测数据和踩过的坑,想搞Java端YOLO部署优化的朋友可以直接抄作业。

1. 量化前的技术路线判断

1.1 为什么Java部署YOLO会让性能“卡脖子”

很多团队一提到Java做AI推理就默认要上TensorFlow或者PyTorch的Java绑定,试过的人都知道这条路多折腾。真正适合生产环境的方案其实是ONNX Runtime的Java API,模型先导出成ONNX,Java侧用OrtSession加载和执行,简单直接,兼容性也好。我用的就是这条路:PyTorch训好的YOLO模型,导出ONNX后塞进Java服务。

不过FP32的ONNX模型在服务端推理时有个隐形问题——参数总量太大。YOLOv8大概有300多万个参数,FP32类型下光权重就十几MB,看起来不多,但每个推理周期都要把全部权重从内存搬到计算单元,IO就成了瓶颈。在CPU上跑尤其明显,GPU上稍微好一些,但带宽占用一样很高。说白了,模型推理不只是算得快不快,还要看数据喂得够不够快。

这时候量化就是最直接的解法。模型量化就是降低权重和激活值的数值精度,用更少的bit去表达参数,换来更小的内存占用和更高的计算吞吐。FP32变FP16是减半,FP16再变INT8是再减半,理论内存占用可以降到FP32的四分之一,实际加速还得看算子和硬件支持情况。

1.2 为什么选FP32→FP16→INT8这条渐进路线

可能有人会问,为什么不直接一步到位做INT8量化?我的经验是直接跳级容易翻车。INT8量化对激活值动态范围更敏感,YOLO这种检测模型的输出层对边界框坐标的精度很敏感,直接INT8可能出现定位偏移。更稳的方式是一步步降,每降一档量化一遍,记录精度和性能,确认没问题再往下走。

这条渐进路线还有个额外好处:调试定位问题方便。假设INT8精度崩了,你可以用FP16的结果做对照,很快判断出到底是量化校准的问题还是模型本身对低精度太敏感。而且FP16在很多新硬件上本身就是原生支持的,哪怕INT8最终没调好,FP16也能先上线顶着用。

2. FP32基线:Java推理环境搭建与性能摸底

2.1 工程依赖与最低可用配置

先说我用的工程配置。JDK用的17,ONNX Runtime Java版本2.x,Maven依赖如下:

<dependency> <groupId>com.microsoft.onnxruntime</groupId> <artifactId>onnxruntime</artifactId> <version>2.0.0</version> </dependency>

部署形态是Spring Boot服务,模型放在resources目录下。这个组合的好处是跨平台,CPU和GPU都能跑,只要换对应后缀的runtime包就行。如果你是纯CPU环境,就用onnxruntime这个默认包;如果要上GPU,换成onnxruntime_gpu,我最终用的是GPU版。

2.2 模型导出:从PyTorch到ONNX的必踩点

模型导出这块我走了点弯路,提醒一下。YOLO官方仓库里自带export脚本,但脚本导出的是带NMS的完整推理图。在Java端接这种带NMS的ONNX模型会非常难受:NMS算子在不同runtime版本里兼容性参差不齐,输出结构也不统一。所以我更建议导出时不带NMS,只导出Backbone+Neck+Detect Head,NMS自己写在后端Java代码里。

导出方法很简单,用onnx库的标准API。关键点在于opset版本,我用的是opset 17以上,太低的话ONNX Runtime 2.x加载可能警告或报错。另外,如果推理时要动态输入尺寸,导出时让dynamic_axes覆盖输入输出的第二、三维度,后面Java里可以灵活调整batch和分辨率。

2.3 图像预处理细节:letterbox与归一化

YOLO标准的预处理是letterbox,保持长宽比的同时把图像缩放到模型输入尺寸,四周用114或0填充。Java端我用了JavaCV做解码和缩放,核心步骤是:

  1. 读图,拿到原始宽高。
  2. 计算缩放比例,取min(targetW / srcW, targetH / srcH)。
  3. 等比例缩放后贴到画布中央,补边。
  4. BGR转RGB,像素值除以255归一化。
  5. 转成NCHW排布的FloatBuffer。

很多人在这步容易犯一个错:忘记归一化。如果直接用0-255的像素值喂给模型,推理结果会完全走样。另外,ONNX Runtime Java API接收输入用的是OnnxTensor.createTensor(env, floatBuffer, shape),这个Buffer必须是FloatBuffer且是连续分配的,用allocateDirect也不行,得用堆内数组再包一层。

2.4 跑出第一组可对比的基线数据

在正式量化之前,我先把FP32性能摸了个底。测试机配置:某主流厂商的服务器,CPU型号不展开,GPU是16GB显存的专业显卡,输入尺寸640x640,并发线程数先设1。

FP32模式下的实测数据:

  • 推理单帧延迟:43ms左右
  • 吞吐量(单线程):约23 FPS
  • GPU显存占用:约1.6GB(含模型权重和激活缓存)

这个基线意味着单路视频流能跑,但要接多路摄像头,帧率肯定不够用。我也用纯CPU模式测了一下,单帧延迟直接飙到300ms以上,所以量化优化的目标非常明确:要么堆GPU,要么压模型体积和计算量。量化路径明确之后,下一步就是对模型做FP16潜力的测试。

3. FP16量化:一行配置带来的内存与带宽红利

3.1 FP16到底省在哪儿

FP16也就是半精度浮点数,用16位二进制表示一个数:1位符号位、5位指数位、10位尾数位。相比FP32的23位尾数,FP16的精度约等于3位十进制有效数字。对神经网络权重来说,这个精度通常够用,因为训练过程中权重本身就带随机噪声,少几位尾数不会对决策边界产生质变。

FP16最大的收益在显存带宽减半。做推理时每一层都要从显存读权重,FP16读的数据量只有FP32的一半,IO时间几乎腰斩。另一个收益是部分支持FP16的GPU算子会跑得更快,训练和推理性能都会有提升。

3.2 Java侧启用FP16的两种路线

直接在Java侧把模型转成FP16并不是通过代码完成的。主流做法有两种:

第一种:PyTorch导出时直接转半精度导出。这种方式要求显卡支持FP16,导出过程会用混合精度跑一次模型得到FP16的权重。但我试过,直接在PyTorch里用model.half()导出ONNX,个别算子在转ONNX时会有精度丢失甚至报错。后来发现更稳妥的做法是导出FP32的ONNX后,用ONNX Runtime自带的工具做精度转换。

第二种(我用的):Python工具做离线转换,Java侧只负责加载。脚本思路大致是:读入FP32的ONNX模型,遍历所有节点,将权重张量转成FP16类型,然后保存为新模型。注意要跳过一些不适合转的算子,比如某些归一化层和统计层,ONNX Runtime在加载时遇到不支持的算子会自动回退到FP32执行,不需要手动兼容。

FP16模型文件马上减了一半,18MB变成9MB左右。Java侧加载代码和FP32一模一样,不需要特殊配置。实测FP16单帧延迟从43ms降到31ms,帧率从23 FPS提升到32 FPS,精度mAP掉了大概0.2个点,几乎等于无损。这算是量化之旅中收益最高的一个阶段,因为你基本什么都没改,精度也没怎么掉,帧率提升40%。

3.3 显卡不支持FP16加速怎么办

如果你用的显卡架构比较老,不支持FP16原生加速,FP16模型跑起来反而可能更慢。判断方法很简单:跑一下模型,观察GPU利用率,如果利用率没变化甚至下降,多半是在模拟FP16而不是原生执行。这种情况下没必要强上FP16,直接跳到INT8,老卡通常对INT8算子的支持反而更好。另外FP16模型在CPU上别抱太大期望,几乎无收益,原因稍后在INT8章节展开。

4. INT8量化:关键的精度控制与性能释放

4.1 校准数据集怎么选才靠谱

INT8量化比FP16复杂一个量级,核心在于:FP16每个数仍然是个浮点数,只是精度降低;INT8则表示范围为-128到127的整数,需要先把浮点权重“映射”到整数区间。映射关系是由动态范围决定的,而这个范围需要从真实数据分布中统计出来——这就是校准(Calibration)的过程。

校准集怎么选,直接决定量化后模型准不准。我的经验是:校准集要贴近真实部署场景。比如我这个项目是工业质检,缺陷样本占比就比自然场景高,如果拿着COCO数据集去校准,大概率量化后漏检率升高。

校准集规模一般是几百到一千张。太少统计出的动态范围不够稳定,太多浪费时间,600张左右是个性价比很高的点。每次推理时收集每层激活值的分布直方图,然后用校准算法算出每个张量的scale和zero point。

所有主流的校准算法里最常用的两种:

算法原理适用场景
MinMax直接用最小/最大值确定范围简单快速,但容易被极端点带偏
Entropy(熵)最小化量化前后信息损失更稳,对分布不均匀的激活值友好

我实测下来Entropy比MinMax在YOLO上精度高约0.5个点,推荐默认用Entropy。

4.2 量化粒度:per-tensor还是per-channel

这里有个很重要的细节,很多人做INT8量化效果差,就是因为选了per-tensor。per-tensor是整个张量共享一套scale,计算简单但对通道间差异大的权重很不公平。卷积层的不同输出通道,数值分布可能差几十倍,用一个统一scale去量化,小数值通道会被大数值通道压缩掉大量信息。

per-channel是每个输出通道一套scale,精度显著提升。唯一的代价是反量化计算稍微复杂,但ONNX Runtime已经做了优化,基本无性能损失。在量化配置里把权重的量化粒度设为per-channel即可。

4.3 Java运行时加载INT8模型并做推理

ONNX Runtime Java API加载INT8模型和加载普通ONNX模型没有区别,因为INT8的信息全部打包在模型文件里:

OrtEnvironment env = OrtEnvironment.getEnvironment(); OrtSession.SessionOptions opts = new OrtSession.SessionOptions(); opts.setOptimizationLevel(OrtSession.SessionOptions.OptLevel.ALL_OPT); OrtSession session = env.createSession(modelPath, opts); // 推理过程与FP32/FP16完全一致 // float[] inputData; long[] shape = {1, 3, 640, 640}; // OnnxTensor.createTensor(env, inputData, shape)

不过有一个配置项值得注意:setExecutionMode。默认是SEQUENTIAL模式,逐算子执行;如果换个并行模式,部分INT8算子可以同时跑,能再挤一点性能出来。但这会提高内存占用,建议先测默认模式,需要再调。

4.4 精度补偿:提高输入分辨率的“作弊”技巧

做完INT8量化后,我实测精度损失大约1.2%,比预想中高一点。这里有个常用技巧:把输入分辨率从640x640提到672x672甚至704x704。因为INT8量化后的特征图分辨率下降会放大定位误差,提高输入分辨率等于给检测头更多空间去纠正偏移。代价是推理延迟增加一点,但INT8带来的速度优势足够覆盖这个开销。

我采用672x672后,mAP损失从1.2%回落到0.8%,比阈值1%又稳了一些。最终部署用的是INT8+672输入尺寸。

4.5 INT8在Java CPU端的附加收益

如果你部署环境是纯CPU,INT8反而比FP16好用的多。CPU通常没有原生的FP16计算单元,但几乎所有新CPU都支持INT8的SIMD指令。我用某款服务器CPU实测,FP32单帧延迟300ms,INT8直接降到80ms,提升接近4倍。Java端代码一行没改,只是换了模型文件。

这点很重要:如果你的部署环境是CPU,优先考虑INT8而非FP16。FP16在CPU上可能因为需要转换指令而变得更慢,INT8才是更稳的选择。当时我把这个结论同步给服务端同事后,他们几个CPU推理服务也改了模型,反馈普遍是延迟降了一半以上。

5. 三档量化实测数据对比:性能提升到底怎么算的

5.1 测试方法怎么保证公平

性能对比最忌讳变量不统一。我的测试脚本保证:同一张测试图片(1000张测试图求平均)、同一个Java进程、同一台机器、同一份后处理代码,唯一变量是模型文件精度类型。每档精度下先预热30次推理,再取接下来100次推理的平均延迟和标准差,避免JIT编译带来的第一帧慢速干扰。

5.2 实测数据全览

下面这组数据是GPU环境下的:

精度模型大小单帧延迟吞吐帧率相对FP32提速mAP损失
FP3218.2MB43ms23 FPS1.0x基准
FP169.5MB31ms32 FPS1.4x0.2%
INT85.4MB15ms65 FPS2.8x0.8%

CPU环境下单独看INT8:

精度单帧延迟吞吐帧率相对FP32提速
FP32310ms3 FPS1.0x
INT882ms12 FPS3.7x

标题里说的帧率提升3倍,对应的是GPU环境下的2.8到3倍之间。为什么不是理论上的四倍?因为模型推理并非纯粹的计算密集型,后处理、内存拷贝、输入预处理这些环节并不会因为模型变成INT8而加速,这部分固定开销拉低了总收益。FP16和INT8的叠加思路就是这样:结构层负责降低计算压力,操作层负责榨干硬件潜力。

5.3 性能瓶颈再分析

FP32跑不满GPU,是因为带宽受限;INT8跑不到四倍速,是因为已经逐步逼近算力上限。等模型进一步缩小,瓶颈开始转移到Java端的内存拷贝和后处理循环。尤其YOLO的输出是1x25200x85的矩阵,25200个候选框,Java里如果还用for循环一个个做置信度过滤和NMS,这部分的耗时占比会越来越大。

我最终的优化做了三件事:

  1. 把NMS的候选框过滤用掩码批量处理,避免大量分支判断。
  2. 预分配输出Buffer并复用,减少GC压力。
  3. 把图像缩放直接放GPU端做,省掉一次CPU到GPU的拷贝延迟。

做完之后,INT8模式单帧延迟又降了2-3ms。

6. Java部署实战:几个让人头大的细节

6.1 NMS实现里的数学陷阱

Java端实现YOLO的NMS,最常见的问题是排序效率。25200个候选框如果不先做置信度过滤,直接全量排序+ IoU计算,耗时会非常难看。正确思路是分阶段处理:

  1. 先过滤掉置信度低于0.25的候选框,这一步能过滤掉90%以上的框。
  2. 剩下的按类别分组,每个类别单独做NMS。
  3. NMS时先按置信度降序排序,保留最高分的框,然后计算IoU,超过阈值(我用的0.5)的框直接抛弃。

写IoU的时候要注意:不能用Math.max和Math.min逐个比较两组框坐标,应该把坐标差值展开算。用Java向量API或者简单优化后的算法,在批量IoU计算时至少能快3倍。

6.2 内存复用:Java GC对推理延迟的隐形影响

Java做推理有个容易被忽视的隐患:推理产生的中间张量和输出张量都会成为GC的“关注对象”。量产服务里如果频繁触发Full GC,最容易出现的是某一帧延迟突然飙升50ms以上。

解决办法是复用OnnxTensor和输出Buffer。ONNX Runtime的Java API支持用OnnxTensor包装已有的FloatBuffer,尽量别在循环体里重复创建。输出方面,OrtSession.run()返回的结果可以复用Map实例,避免每帧都创建新对象。调优后测试服务的P99延迟从85ms降到52ms,整条推理链路稳定了很多。

6.3 多路视频流并行推理

生产环境里服务端不可能只处理一路视频流。Java多线程并行推理时要注意:OrtEnvironment全局只需一个,共享使用;OrtSession设计上不是完全线程安全的,建议每个工作线程独享一个Session实例,模型可以只加载一份,Session创建成本不高。

我实际部署用的是线程池,固定8个工作线程,每路视频流绑定一个线程,避免上下文切换带来的延迟抖动。实测8路并发时总吞吐能跑到150 FPS以上,单路延迟依旧稳定在30ms以内。

6.4 模型文件加载时间优化

INT8模型比FP32小了近70%,加载速度自然也快了不少,但这块还有优化空间。ONNX Runtime的SessionOptions里有addOptimizationLevel、enableMemoryPattern等配置,加载后第一次推理会额外花一些时间做图优化。我踩过的坑是:setOptimizationLevel(ALL_OPT)在FP32模型上开启后,第一次推理要等将近2秒。生产环境里如果服务频繁重启,这个等待不能忽略。

解决方案是在服务启动时主动做一次预热推理,把图优化的成本打在启动阶段而不是第一帧请求里。启动时间增加个1秒,但第一帧用户体验好很多。

7. 写给自己的经验收尾

整个项目从FP32基线到INT8量化上线,前后大概花了两周时间。回头看我最大的体会是:量化不是一道纯技术题,而是一道资源和业务需求的匹配题。业务方如果只要求视频流清晰不掉帧,FP16已经很够用;如果要求大并发低延迟,INT8几乎是必选项。而这两个方案在Java侧的改造成本都低到离谱——你不用重写任何业务代码,只需要换一个模型文件。

最后再分享一个很多教程不会提的小技巧:当你无法确定INT8量化后的精度能不能接受时,先小流量灰度灰度,拿一部分真实请求走量化模型,另一部分走FP16模型,对比两边输出结果的差异。这种方式比离线测几百张图更接近线上真实效果,也更容易说服团队放心切换。量化这条路一旦跑通,后续项目里每个模型的部署都会轻快很多。

相关新闻

Windows下用WSL源码编译自托管AI助手openclaw完整指南

Windows下用WSL源码编译自托管AI助手openclaw完整指南

最近社区里 openclaw 这个自托管 AI 助手框架的讨论度明显起来了。这个项目在同一个仓库里维护两套可执行程序&#xff1a;Clawdbot 是完整版&#xff0c;除了消息收发和会话管理&#xff0c;还内置插件系统、定时任务和知识库接口&#xff1b;Moltbot 是精简版&#xff0c;把插…

2026/10/20 2:57:47 阅读更多 →
regnety_080_tv.tv2_in1k训练配方深度解析:torchvision v2权重为何能拿下82.59% Top-1精度

regnety_080_tv.tv2_in1k训练配方深度解析:torchvision v2权重为何能拿下82.59% Top-1精度

【免费下载链接】regnety_080_tv.tv2_in1k 项目地址&#xff1a; https://ai.gitcode.com/hf_mirrors/timm/regnety_080_tv.tv2_in1k 点击查看 免费下载 regnety_080_tv.tv2_in1k 是 timm 库中的 RegNetY-8GF 图像分类模型&#xff0c;由 torchvision 官方训练配方&#xff08…

2026/10/20 2:57:47 阅读更多 →
GhostTrack 快速上手:IP 追踪、号码归属与用户名排查 5 分钟跑通

GhostTrack 快速上手:IP 追踪、号码归属与用户名排查 5 分钟跑通

GhostTrack 快速上手&#xff1a;IP 追踪、号码归属与用户名排查 5 分钟跑通 【免费下载链接】GhostTrack Useful tool to track location or mobile number 项目地址: https://gitcode.com/GitHub_Trending/gh/GhostTrack GhostTrack 是一个终端 OSINT 信息检索脚本&am…

2026/10/20 2:57:47 阅读更多 →

最新新闻

Cursor 详细使用指南:TaoToken 统一 Key 接入与 AI 辅助编程调试实战

Cursor 详细使用指南:TaoToken 统一 Key 接入与 AI 辅助编程调试实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 3:49:13 阅读更多 →
别急着拿它给短剧配音:音色版权、多角色与长文本的三个隐性坑

别急着拿它给短剧配音:音色版权、多角色与长文本的三个隐性坑

别急着拿它给短剧配音&#xff1a;音色版权、多角色与长文本的三个隐性坑 【免费下载链接】drama-3 项目地址: https://ai.gitcode.com/hf_mirrors/fishaudio/drama-3 当一款开源 TTS 模型被社区评测顶到"开放权重语音竞技场"榜首&#xff0c;和 ElevenLabs、…

2026/10/20 3:49:13 阅读更多 →
电脑主机改造成服务器:硬件差异、稳定性与避坑指南

电脑主机改造成服务器:硬件差异、稳定性与避坑指南

先别急着回答“能”或者“不能”&#xff0c;我把话放在这里&#xff1a;普通电脑主机确实能改造成服务器&#xff0c;而且成本可以压得很低。但我见过太多人&#xff0c;把自己的旧电脑折腾成“服务器”之后&#xff0c;没跑两个月就放弃了&#xff0c;原因就四个字&#xff1…

2026/10/20 3:49:13 阅读更多 →
CFRP约束型钢再生混凝土短柱ABAQUS复现:参数设置与曲线调试全解析

CFRP约束型钢再生混凝土短柱ABAQUS复现:参数设置与曲线调试全解析

做CFRP约束型钢再生混凝土短柱的论文复现&#xff0c;最折磨人的往往不是建模本身&#xff0c;而是材料参数取值和相互作用设置。你从论文里抄参数&#xff0c;原封不动搬到ABAQUS里&#xff0c;结果曲线跟原文对不上&#xff0c;大概率不是模型搭错&#xff0c;是CDP损伤参数、…

2026/10/20 3:49:13 阅读更多 →
物理开路与奇点:文明权的终局博弈,一场底层逻辑推演

物理开路与奇点:文明权的终局博弈,一场底层逻辑推演

最近我一直在琢磨一个特别上头的问题&#xff1a;如果物理学出现本质层面的突破&#xff0c;会不会直接改写文明的命运&#xff1f;这个问题的民间版本&#xff0c;就是标题里那八个字——物理开路、奇点、文明权、终局博弈。先声明一句&#xff0c;我就是一个业余物理爱好者&a…

2026/10/20 3:49:13 阅读更多 →
电商客服与导购智能体合并设计:意图识别、工具调用与知识库实践

电商客服与导购智能体合并设计:意图识别、工具调用与知识库实践

做客服类智能体这几年&#xff0c;我的电脑里存过三版方案。第一版是规则加菜单按钮&#xff0c;用户点两下就烦了&#xff1b;第二版是纯大模型问答&#xff0c;什么都能聊&#xff0c;但一问到订单和售后就露馅&#xff1b;第三版才是真正跑通业务价值的——把电商客服导购智…

2026/10/20 3:48:13 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →