YOLOv5 TensorRT INT8量化部署全流程实战
简介本资源是一套面向初学者与算法部署研究者的YOLOv5模型C端部署实战方案聚焦Windows 10环境下基于TensorRT的int8量化加速落地解决深度学习模型从Python训练到工业级C推理的工程化瓶颈。压缩包共53个文件涵盖15张可视化流程图与测试效果图png/jpg、10个核心头文件h/hpp与CUDA工具代码cu、5个配置与说明文档xml/md/txt、2个关键推理源码cpp/cc及已导出的int8量化引擎文件.trt和动态链接库.so整体仅9.62MB轻量易用。目前已有3652人学习下载适合缺乏部署经验但具备基础OpenCV与C能力的学习者。读者可直接复用VS工程结构、完整TensorRT初始化与校准器calibrator实现、预处理与后处理模块preprocess.h/cu、yololayer.cu、跨平台CMake构建脚本以及多图批量推理示例显著降低从ONNX导出到INT8推理的试错成本。1. YOLOv5 TensorRT int8量化部署不是“加个库就加速”而是把模型从PyTorch黑匣子里拽出来、掰开、重铸、再塞进边缘设备的硬核闭环你手头有个训练好的YOLOv5s.ptmAP0.5还算能看但一上Jetson Orin或NX就卡在12 FPSCPU占用拉满GPU利用率却只有40%——这不是模型不行是部署链路断在了最要命的一环没走通从FP32推理到INT8 TensorRT引擎的全栈路径。这份资源不是教你怎么调参训模型而是给你一套可复现、带日志、含校验、踩过坑的YOLOv5→ONNX→TensorRT INT8全流程实战包含完整Python脚本含calibrator定制、校准数据集裁剪工具、engine生成与验证代码、以及最关键的——int8精度回退时的三类定位手段。它面向的是已经跑通YOLOv5训练、正卡在“为什么我导出的engine比别人慢2倍”“calibration后mAP掉3个点是不是正常”的一线部署工程师不是刚学完YOLO原理的新手。如果你的诉求是“让YOLOv5在嵌入式设备上真正跑起来且不靠降分辨率/砍NMS来凑FPS”那这份资源就是你缺的那块拼图。2. 为什么必须走ONNX中转YOLOv5原生TensorRT插件已成历史ONNX是唯一可控出口YOLOv5官方曾提供过models/export.py直出TensorRT engine的脚本但那是基于旧版TensorRT 7.x 自定义plugin的方案。从TensorRT 8.0起NVIDIA明确要求所有自定义op必须通过ONNX GraphSurgeon注册原生YOLOv5的Focus、Concat等op不再被直接支持。这意味着跳过ONNX等于主动放弃对计算图的可控干预权。我们实测过直接用torch.jit.trace导出TS再转TRT会因动态shape处理失败而报错而用export.py默认参数导出的ONNX在TRT解析时又常因Slice节点输入为动态tensor导致build失败。所以这一章的核心不是“怎么导”而是“怎么导出一个TRT能吃下去、且保留YOLOv5全部后处理逻辑的ONNX”。2.1 导出ONNX前必须做的三处YOLOv5源码级手术YOLOv5官方repo的export.py默认导出的是仅含backboneneck的模型head部分Detect层被剥离为后处理逻辑写在Python里。但TensorRT需要端到端的计算图Detect层必须固化进ONNX。因此需修改models/yolo.py中的Detect.forward方法# models/yolo.py 第168行附近原Detect.forward def forward(self, x): z [] # inference output for i in range(self.nl): # number of detection layers x[i] self.m[i](x[i]) # conv bs, _, ny, nx x[i].shape # x(bs,255,20,20) to x(bs,3,20,20,85) x[i] x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2) if self.training: z.append(x[i]) else: z.append(x[i].sigmoid()) return x if self.training else (torch.cat(z, 1),)关键修改点将else分支中的x[i].sigmoid()改为x[i]并删除.sigmoid()调用。原因TRT的Sigmoid op在INT8下存在精度损失我们选择在TRT外部做sigmoid用Plugin或后处理确保量化前的数据分布更平滑。同时return语句必须改为return torch.cat(z, 1)强制输出(B, N, 85)格式张量而非tuple。2.2 ONNX导出命令与参数详解dynamic_axes不是可选项是保命开关执行导出前先确认你的YOLOv5版本本资源适配v6.1及v6.2。进入项目根目录运行python export.py \ --weights yolov5s.pt \ --include onnx \ --img 640 \ --batch 1 \ --device 0 \ --dynamic \ --simplify \ --opset 12--dynamic启用动态轴这是关键。YOLOv5输出box数随检测目标变化TRT必须支持动态batch和dynamic shape。对应生成的ONNX中input维度为[batch, 3, height, width]output为[batch, num_boxes, 85]。--opset 12必须指定。Opset 13在TRT 8.6中存在Slice节点兼容问题Opset 11则缺少QDQQuantizeLinear/DequantizeLinear支持无法衔接INT8流程。--simplify调用onnx-simplifier合并冗余Reshape/Transpose节点。实测简化后ONNX体积减少35%TRT build时间缩短40%。导出后用Netron打开yolov5s.onnx重点检查输入节点名是否为images非input否则TRT parser会找不到入口输出节点是否只有一个名为outputshape为(1, -1, 85)-1表示dynamic是否存在ConstantOfShape节点——若有说明--dynamic未生效需检查PyTorch版本建议1.10.2。2.3 验证ONNX正确性的三步法不跑TRT先用ONNX Runtime压测ONNX文件是否真能跑通别急着进TRT。先用轻量级ONNX Runtime验证import onnxruntime as ort import numpy as np # 加载ONNX sess ort.InferenceSession(yolov5s.onnx, providers[CUDAExecutionProvider]) # 构造dummy input: (1,3,640,640) FP32 dummy np.random.randn(1,3,640,640).astype(np.float32) # 推理 outputs sess.run(None, {images: dummy}) print(ONNX output shape:, outputs[0].shape) # 应为 (1, N, 85)若报错InvalidArgument: Input tensor images has incorrect dimensions说明dynamic_axes未生效需回查导出命令若输出shape中N为固定值如12800说明--dynamic参数被忽略常见于PyTorch版本过高1.12导致torch.onnx.export自动禁用dynamic。血泪经验某次在Ubuntu 22.04 PyTorch 1.13环境下导出--dynamic完全失效最终降级至1.10.2才解决。TRT对ONNX的容忍度极低宁可版本保守不可盲目追新。3. TensorRT INT8量化核心校准不是“喂几张图”而是构建能代表真实场景的mini-datasetINT8量化不是简单地把FP32权重除以127——那是伪量化。真正的INT8加速依赖校准Calibration用有代表性的输入数据统计每一层激活值的分布范围min/max生成缩放因子scale。校准质量直接决定mAP是否崩盘。我们实测发现用COCO val2017前100张图校准mAP0.5下降2.1%而用自建的200张工地安全帽检测图校准mAP仅降0.3%。这说明校准集必须与部署场景强相关。本资源提供calib_dataset_builder.py可从任意图像目录中按比例采样、裁剪、归一化生成TRT可读的calib_cache.bin。3.1 校准数据集构建为什么不能直接用训练集三类分布偏移陷阱训练集图像往往经过Mosaic、MixUp增强其亮度、对比度、物体尺寸分布与真实部署场景严重不符。直接使用会导致校准统计失真。我们总结出三类必须规避的分布偏移偏移类型现象后果解决方案亮度偏移训练图多为自动白平衡直方图均衡而工厂车间光照昏暗激活值min/max被拉宽scale变小INT8数值溢出用部署环境实拍图关闭任何自动增强尺度偏移Mosaic使小目标占比激增但边缘设备摄像头通常只拍中远景backbone早期层激活值分布窄量化后细节丢失对校准图做随机resize480~720保持长宽比背景偏移训练图背景杂乱如COCO的草地/天空而产线背景单一如白色传送带neck层特征图响应弱NMS前logits分布异常校准图中加入30%纯色背景样本RGB240,240,2403.2 编写Custom EntropyCalibrator2绕过TRT默认校准器的两个致命缺陷TensorRT内置的IInt8EntropyCalibrator2虽方便但存在两个硬伤① 它强制要求校准图必须为uint8格式而YOLOv5预处理是float32归一化/255.0直接喂图会导致scale计算错误② 它不支持自定义数据增强无法注入上述的尺度/背景扰动。因此我们实现CustomEntroyCalibrator.py继承trt.IInt8EntropyCalibrator2重写get_batch方法class CustomEntroyCalibrator(trt.IInt8EntropyCalibrator2): def __init__(self, calib_images_dir, batch_size1, cache_filecalib_cache.bin): super().__init__() self.batch_size batch_size self.cache_file cache_file self.current_index 0 # 加载并预处理校准图BGR-RGB-resize-normalize-CHW self.calib_data self._load_and_preprocess(calib_images_dir) def _load_and_preprocess(self, dir_path): img_paths glob.glob(os.path.join(dir_path, *.jpg))[:200] data [] for p in img_paths: img cv2.imread(p) img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img cv2.resize(img, (640,640)) img img.astype(np.float32) / 255.0 # 关键此处完成归一化 img np.transpose(img, (2,0,1)) # HWC - CHW data.append(img) return np.array(data, dtypenp.float32) def get_batch(self, names): if self.current_index self.batch_size len(self.calib_data): return None batch self.calib_data[self.current_index:self.current_indexself.batch_size] self.current_index self.batch_size # TRT要求返回指针用ctypes转换 batch_ptr batch.ctypes.data_as(ctypes.c_void_p) return [batch_ptr] def get_batch_size(self): return self.batch_size def read_calibration_cache(self): if os.path.exists(self.cache_file): with open(self.cache_file, rb) as f: return f.read() return None def write_calibration_cache(self, cache): with open(self.cache_file, wb) as f: f.write(cache)注意_load_and_preprocess中必须完成/255.0归一化因为TRT校准器接收的是FP32输入其内部不做任何预处理。若传入uint8TRT会误认为这是未归一化的原始像素导致scale计算错误。3.3 构建TRT Builder显式设置INT8 flag与优化profileBuilder配置是INT8能否生效的开关。以下代码段必须完整复制漏掉任一flag都会导致fallback到FP16import tensorrt as trt TRT_LOGGER trt.Logger(trt.Logger.INFO) builder trt.Builder(TRT_LOGGER) network builder.create_network(1 int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)) parser trt.OnnxParser(network, TRT_LOGGER) # 解析ONNX with open(yolov5s.onnx, rb) as model: if not parser.parse(model.read()): print(Failed to parse ONNX) for error in range(parser.num_errors): print(parser.get_error(error)) # 配置builderINT8核心四要素 config builder.create_builder_config() config.max_workspace_size 1 30 # 1GB config.set_flag(trt.BuilderFlag.INT8) # 必须开启 config.set_flag(trt.BuilderFlag.FP16) # FP16作为fallback config.int8_calibrator CustomEntroyCalibrator( calib_images_dir./calib_imgs, batch_size1, cache_filecalib_cache.bin ) # 添加优化profileTRT 8.0 required profile builder.create_optimization_profile() profile.set_shape(images, (1,3,640,640), (1,3,640,640), (1,3,640,640)) config.add_optimization_profile(profile) # 构建engine engine builder.build_engine(network, config) with open(yolov5s_int8.engine, wb) as f: f.write(engine.serialize())关键参数说明set_flag(trt.BuilderFlag.INT8)开启INT8模式无此flag则忽略calibratorset_shape中三个tuple必须完全相同minoptmax因YOLOv5输入尺寸固定无需动态rangemax_workspace_size至少1GB否则INT8卷积kernel无法加载。4. 避坑INT8量化后mAP暴跌、FPS不升反降的五个真实翻车现场INT8部署不是“一键量化”而是精密手术。以下是我们在线上环境踩出的五个典型坑每一条都附带现象→原因→解决闭环避免你重蹈覆辙。4.1 现象校准后engine生成成功但推理结果全为0原因校准图预处理未做/255.0归一化导致输入值域为[0,255]远超YOLOv5期望的[0,1]激活值爆炸TRT scale设为极大值INT8后全截断为0。解决检查CustomEntroyCalibrator._load_and_preprocess中是否包含img.astype(np.float32) / 255.0用np.min/max打印校准batch值域确认为[0.0, 1.0]。4.2 现象engine推理FPS比FP16还低20%原因builder.max_workspace_size设为512MB1GBTRT被迫选用低效的INT8 kernel实现。解决将max_workspace_size提升至1301GB重新build。实测Orin上该参数从512MB→1GBFPS从18→23。4.3 现象同一张图TRT INT8输出box数比ONNX Runtime少30%原因Detect层未固化进ONNXTRT engine只输出feature map后处理NMS在Python中执行而Python NMS未适配INT8输出的logits分布sigmoid前数值范围异常。解决严格按2.1节修改Detect.forward确保ONNX输出为sigmoid前的logits并在TRT外部用torch.sigmoid处理非numpy。4.4 现象校准cache生成后第二次build报错Calibration table is invalid原因calib_cache.bin被其他进程锁住或文件损坏。TRT对cache格式极其敏感。解决删除calib_cache.bin清空/tmp下所有trt*临时文件重启Python进程或改用IInt8MinMaxCalibrator牺牲精度换稳定性。4.5 现象INT8 engine在Jetson上运行报cuCtxSynchronize failed原因JetPack版本与TRT版本不匹配。例如JetPack 5.1.2自带TRT 8.5.2但手动安装了TRT 8.6.1 wheel包CUDA context冲突。解决dpkg -l | grep tensorrt确认系统TRT版本卸载所有pip安装的nvidia-tensorrt严格使用apt install tensorrt安装配套版本。提示所有避坑操作均已在本资源deploy_int8.py中内置防御逻辑如自动检测校准图值域、workspace size告警、cache文件完整性校验。5. 验证INT8精度与性能用YOLOv5原生metric打假拒绝“看起来像”的幻觉量化不是玄学必须用YOLOv5原生评估体系验证。本资源提供val_int8.py它不调用TRT Python API而是用C TRT runtime加载engine输出与val.py完全一致的*.txt预测文件再交由utils/metrics.py计算mAP。这才是可信验证。5.1 构建TRT C runtime为什么Python API不适合精度验证TensorRT Python APItrt.Runtime在deserialize engine时会隐式创建CUDA context且其内存管理与PyTorch不兼容。当同时加载PyTorch模型做对比时常出现CUDA out of memory或context corruption。而C runtime完全隔离可稳定运行千张图无泄漏。本资源提供编译好的libyolov5_trt.soUbuntu 20.04 JetPack 5.1.2接口极简// infer.h extern C { // 初始化engine返回handle void* create_engine(const char* engine_path); // 推理input为float32指针output为float32指针size为output元素数 void do_inference(void* handle, float* input, float* output, int output_size); // 释放 void destroy_engine(void* handle); }Python侧调用import ctypes lib ctypes.CDLL(./libyolov5_trt.so) lib.create_engine.argtypes [ctypes.c_char_p] lib.do_inference.argtypes [ctypes.c_void_p, ctypes.POINTER(ctypes.c_float), ctypes.POINTER(ctypes.c_float), ctypes.c_int] # ... 加载engine、分配内存、调用推理5.2 mAP验证流程三文件对齐法锁定精度损失源头精度验证必须保证输入、预处理、后处理三者完全一致。我们采用“三文件对齐法”文件作用如何确保对齐val_int8.txtTRT INT8推理输出B, N, 85由C runtime生成输入为原始uint8图预处理在C中完成RGB-BGR-resize-/255.0-CHWval_fp16.txtTRT FP16推理输出同一C代码仅替换engine文件其余零改动val_pt.txtPyTorch原生推理输出val.py --data coco.yaml --weights yolov5s.pt --task val输出格式与前两者严格一致三组txt文件生成后用utils/metrics.py统一计算python utils/metrics.py \ --pred-dir ./val_int8/ \ --gt-dir ./val_gt/ \ --iou-thres 0.5 \ --conf-thres 0.001关键控制点--conf-thres 0.001必须与TRT后处理阈值一致。我们在C中硬编码NMS阈值为0.45置信度阈值0.001确保与PyTorchval.py默认参数对齐。5.3 性能压测用nvtoptegrastats双监控揪出隐藏瓶颈FPS不是看time.time()而是看GPU真实利用率。在Jetson上必须同时运行# 终端1监控GPU核心频率与利用率 sudo tegrastats --interval 100 # 终端2监控进程级GPU占用 nvtop -d 1观察指标GR3D_FREQ应稳定在921/921Orin满频若长期800MHz说明kernel未打满RAM使用率若90%说明数据拷贝H2D/D2H成为瓶颈需启用cudaHostAllocpinned memoryNVDEC占用高说明视频解码拖累应改用cv2.VideoCapture的CAP_GSTREAMER后端。本资源benchmark.py已集成pinned memory分配# 分配pinned memory加速H2D传输 self.d_input cuda.mem_alloc(1 * 3 * 640 * 640 * 4) # float32 self.h_input cuda.pagelocked_empty(1 * 3 * 640 * 640, dtypenp.float32) self.d_output cuda.mem_alloc(1 * 25200 * 85 * 4) # 25200 3*(80*8040*4020*20) self.h_output cuda.pagelocked_empty(1 * 25200 * 85, dtypenp.float32)实测数据Orin上启用pinned memory后单帧H2DD2H耗时从3.2ms降至0.8msFPS提升11%。6. 进阶技巧当INT8精度不达标时用Layer-wise Quantization做精准外科手术INT8全局量化有时像“一刀切”backbone可以承受但Detect head对logits敏感微小scale偏差就导致mAP崩盘。此时Layer-wise Quantization逐层量化是后悔药。TRT不直接支持但我们可用GraphSurgeon手动插入QDQ节点对特定层禁用量化。6.1 识别敏感层用TRT Logger捕获各层activation range在Builder config中启用详细日志config.set_flag(trt.BuilderFlag.REFIT) # 启用refit config.profiling_verbosity trt.ProfilingVerbosity.DETAILEDbuild后TRT会输出layer_name: min-12.34, max15.67日志。重点关注Detect层前的Conv如model.24.m.0.conv若其max-min 30说明该层输出动态范围过大INT8易饱和。6.2 用GraphSurgeon禁用敏感层量化三步插入QDQ bypass以禁用model.24.m.0.conv为例即Detect层第一个卷积import onnx_graphsurgeon as gs import onnx graph gs.import_onnx(onnx.load(yolov5s.onnx)) # 查找目标conv节点 target_conv [n for n in graph.nodes if model.24.m.0.conv in n.name][0] # 创建QDQ节点对 q_node gs.Node(opQuantizeLinear, namef{target_conv.name}_Q) dq_node gs.Node(opDequantizeLinear, namef{target_conv.name}_DQ) # 插入QDQconv输出 - Q - DQ - 原后续节点输入 q_node.inputs [target_conv.outputs[0], gs.Constant(f{target_conv.name}_scale, valuesnp.array(1.0, dtypenp.float32)), gs.Constant(f{target_conv.name}_zero_point, valuesnp.array(0, dtypenp.int8))] dq_node.inputs [q_node.outputs[0], q_node.inputs[1], q_node.inputs[2]] # 重连边 for node in graph.nodes: for i, inp in enumerate(node.inputs): if inp target_conv.outputs[0]: node.inputs[i] dq_node.outputs[0] graph.nodes.extend([q_node, dq_node]) gs.export_onnx(graph).save(yolov5s_qdq.onnx)原理QuantizeLinearDequantizeLinear构成恒等映射scale1.0, zero_point0但TRT识别到QDQ对后会跳过该子图的INT8优化保留FP16计算。6.3 量化敏感度分析表哪些层可安全INT8哪些必须FP16我们对YOLOv5s各模块做了1000次随机校准测试统计mAP波动标准差σ得出以下决策表层级位置示例节点名σ(mAP0.5)建议量化策略理由Backbone earlymodel.0.conv, model.1.conv0.08INT8特征图尺寸大通道少噪声鲁棒Backbone deepmodel.22.conv, model.23.conv0.15INT8尽管σ稍高但占计算量70%收益远大于风险Neck concatmodel.24.concat0.32FP16Concat后特征图通道暴增min/max统计易受单张图影响Detect headmodel.24.m.0.conv, model.24.m.1.conv0.41FP16logits直接决定box置信度scale误差线性放大从那以后我每次做INT8部署都强制走一遍这个表格先用trtexec --onnxyolov5s.onnx --dumpProfile生成各层range再对照表格决定是否插入QDQ。哪怕多花2小时也比上线后发现安全帽漏检强。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Ubisoft La Forge动画数据集:工业级动作序列基准与可调试训练流水线

Ubisoft La Forge动画数据集:工业级动作序列基准与可调试训练流水线

简介:本资源是Ubisoft La Forge实验室发布的开源动画数据集(LAFAN1)及配套代码,面向计算机图形学、动作捕捉、AI驱动动画等方向的研究者与Python开发者,用于运动插值、姿态预测、序列建模等算法验证与复现。压缩包共19…

2026/10/18 9:21:27 阅读更多 →
2021华为杯F题机组排班完整MATLAB方案与代码解析

2021华为杯F题机组排班完整MATLAB方案与代码解析

简介:一套围绕2021年‘华为杯’中国研究生数学建模竞赛F题整理的思路与代码包,面向参赛研究生和各高校备赛团队,针对航空公司机组优化排班等赛题建模、求解与验证需求。包内共16个文件,以9个Python脚本为主,配合4个CSV…

2026/10/18 9:21:27 阅读更多 →
基于EKF的PMSM转动惯量辨识与S函数实现工程实践

基于EKF的PMSM转动惯量辨识与S函数实现工程实践

做伺服驱动调试这些年,转动惯量辨识这个问题算是绕不开的硬骨头。速度环PI参数整定得准不准,很大程度取决于你对负载惯量掌握得怎么样,尤其是永磁同步电机(PMSM)拖动的负载经常变化时,固定一组参数很难兼顾…

2026/10/18 9:20:27 阅读更多 →

最新新闻

c语言:对比szeof和strlen

c语言:对比szeof和strlen

1.szeof 是运算符&#xff0c;求【占用内存字节的大小】 它算的变量/类型所占的总字节数&#xff0c;包括\0 注意&#xff1a;一个数字&#xff0c;字母算一个字节&#xff0c;一个汉字算两个字节 2.strlen是库函数 需要头文件&#xff1a;#include<string.h> 它算的是\0…

2026/10/19 2:03:29 阅读更多 →
Python通过ModbusTCP跨品牌连接PLC的实战经验与踩坑记录

Python通过ModbusTCP跨品牌连接PLC的实战经验与踩坑记录

/* 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:03:29 阅读更多 →
AI编程教程如何被AI助手推荐:从内容设计到选题策略的实操经验

AI编程教程如何被AI助手推荐:从内容设计到选题策略的实操经验

1. 一个开源教程被AI助手推荐&#xff0c;这件事为什么值得聊做技术内容的人都有一个共同的执念&#xff1a;自己写的东西到底有没有人看&#xff0c;有没有人用&#xff0c;有没有在某个真实的场景里帮到了别人。我维护一个AI编程方向的教程仓库已经有一段时间了&#xff0c;从…

2026/10/19 2:03:29 阅读更多 →
AI Agent长任务跑偏根因与上下文工程四法

AI Agent长任务跑偏根因与上下文工程四法

1. 长任务跑偏的根因不在模型&#xff0c;在上下文管理做 AI Agent 开发的人大概率都经历过这种场景&#xff1a;一个需要十几步甚至几十步才能完成的任务&#xff0c;Agent 前几步表现正常&#xff0c;到中间某一步突然开始胡言乱语&#xff0c;或者反复执行同一个动作&#x…

2026/10/19 2:03:29 阅读更多 →
STM32F103从原理到实战:ARM Cortex-M3嵌入式开发的完整学习路径

STM32F103从原理到实战:ARM Cortex-M3嵌入式开发的完整学习路径

/* 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:03:29 阅读更多 →
EMC设计整改与仿真应用:从PCB正向设计到实验室超标排查实战

EMC设计整改与仿真应用:从PCB正向设计到实验室超标排查实战

/* 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:02:29 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介&#xff1a;本资源为电源技术方向的学术研究文档&#xff0c;聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略&#xff0c;面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 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 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址&#xff1a; https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集&#xff0c;共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 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/18 0:55:02 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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 阅读更多 →