YOLO11改进实战:注意力机制、P2检测层与损失函数调优指南
简介YOLO11改进教程源码包面向具备一定YOLO框架使用经验、想通过RFAConv感受野注意力卷积提升检测精度的开发者与算法学习者可解决模型在复杂场景下特征提取能力不足的问题适用于算法调优、课程设计或论文复现等场景。压缩包共13个文件其中7个Python脚本覆盖网络结构定义、模型验证与训练调用2个YAML文件用于调整网络配置另含项目说明、依赖清单与演示脚本整包仅18KB便于快速定位核心代码。项目已有249人学习下载教程按“原理分析→源码修改→效果对比”组织清楚演示如何新建RFAConv模块、修改task.py与配置文件并提供训练代码示例读者可一边阅读一边运行。借助这份代码既能掌握将注意力卷积嵌入YOLO11的完整流程也能为后续继续集成其他增强模块打下基础。1. YOLO11改进教程改哪、怎么改、如何验证一份源码工程讲透YOLO11 改进教程核心是把官方模型当成半成品在 backbone、neck、head 或损失函数上动刀让它更贴合你的数据集。最常见的困境是官方权重在公开数据上跑得不错换到自家数据 mAP 卡在 0.6于是到处找“加个注意力就涨点”的魔改方案结果不是报错就是掉点。这套教程适合已经能跑通 YOLO 训练、想系统做消融改进的开发者也适合不想只做调参选手的新手。最稳的路线是掌握三类改动插入注意力模块、增加小目标检测层、更换损失函数它们覆盖了大多数工业场景的提点需求。阅读顺序应该是先定位网络结构里的改动入口再复现一条干净基线然后逐项改进最后用同一套验证流程确认涨点是否真实。顺序比技巧重要很多人翻车不是代码写错而是基线没跑稳就叠加改动出了问题也不知道怪谁。2. 改动前先定位YOLO11 的 backbone、neck、head 哪里最值得下手2.1 C3k2 与 C2PSAbackbone 里两个最常替换的模块YOLO11 的 backbone 主干由 Conv、C3k2、SPPF 组成最深层还有一个 C2PSA 模块。C3k2 是 CSP 风格的瓶颈结构内部是若干小卷积瓶颈加残差连接负责提取不同尺度的特征C2PSA 可以理解为在 C2f 骨架上叠加了一个轻量自注意力让深层特征在做全局关系建模时更充分。这两个模块占掉了骨干里大部分参数量和计算量所以天然是改进的入口想降参数量就把 C3k2 里的瓶颈替换成深度可分离卷积想提特征表达能力就在 C2PSA 里或它的输出后面挂注意力。我一般不会去动 SPPF。这个池化金字塔结构简单稳定改它收益低、风险高属于典型的白忙活位置。真正高频的改法有两类一是把 C3k2 的瓶颈替换成更轻或更强的结构比如加入注意力、换成重参数化卷积二是在 backbone 的 P3/P4/P5 输出位置插入即插即用的注意力模块像 SE、EMA、CA 这类。这类模块只重标定特征权重不改通道数改动面小出了错也好排查。需要留意的是C3k2 在 neck 里也有两处。很多教程说“替换 C3k2”但没讲清是 backbone 里的还是 neck 里的两个位置对涨点和推理速度的影响完全不同。backbone 里的改动更多影响深层语义表达neck 里的改动更多影响多尺度融合质量。建议第一次只改 backbone 里最深的那一个 C3k2改动面最小跑通整个流程后再考虑扩展位置避免第一次就把整个网络结构搅乱。2.2 PAN-FPN 与解耦检测头Neck 与 Head 的改动位置YOLO11 的 neck 是 PAN-FPN 结构自顶向下传递语义信息自底向上补回细节信息中间靠拼接操作和 C3k2 做跨尺度融合。改动 neck 时最常见的做法是在某个拼接节点之后、进入下一层 C3k2 之前插入一个注意力或轻量融合模块。原因是这个位置的特征已经完成了跨尺度对齐再做一次通道或空间权重标定对遮挡和背景干扰场景更有效。检测头是 anchor-free 的解耦头分类和回归各走一支。直接拆 head 的风险比较高因为每个分支的通道数、输出尺寸都是固定的动不好就是形状对不上或者梯度传不回来。我会优先在 head 前面加东西而不是打开 head 做手术。真正需要动 head 的场景只有一个主流方向增加检测层。比如小目标项目要加一个 stride4 的 P2 头这属于结构性改动第 4 章会专门讲。2.3 按任务选改进方向小目标、遮挡、背景干扰分别改哪接到项目后我会先做一个粗分类不同病下不同的药。这里给出我常用的选型对照表也方便你照着判断自己的场景任务痛点优先改法次选改法小目标漏检多加 P2 检测层、imgsz 提到 960WIoU 损失、加强 Mosaic 增强目标互相遮挡neck 中加注意力、试 SIoUNMS 的 IoU 阈值调高、针对性增强背景纹理干扰backbone 输出加注意力增加负样本、调整 cls 损失权重模型太大部署不下替换 C3k2 瓶颈为轻量卷积通道剪枝、蒸馏这套对应关系不是绝对的但是按“机制匹配”来的。小目标吃亏在特征图分辨率太低所以优先改结构遮挡吃亏在定位精度所以优先改损失和注意力背景干扰吃亏在特征判别性所以优先加注意力或调整数据构成。第一次做改进别贪多先选中表里的一行去做做扎实了再回头看其他痛点。3. 复现基线源码结构、环境搭建与最小训练命令3.1 带源码的改进工程一般长什么样“带项目源码”的改进教程工程通常是一个改了分支的官方 YOLO 库外加一个自己整理的新模块目录。常见布局是根目录下是经典的 ultralytics 包结构新增模块集中在ultralytics/nn/modules/下每个新模块单独一个文件ultralytics/nn/tasks.py里做了模块注册这样模型 yaml 里写模块名就能被解析cfg/models/11/下放着多个模型配置比如原始 yolo11.yaml 和改好的 yolo11-se.yaml、yolo11-p2.yaml。训练和验证脚本通常在scripts/下实验结果统一输出到runs/。拿到这样的工程第一件事不是改代码而是读tasks.py的 parse_model 函数搞清楚 yaml 里的参数是怎么传到模块构造函数里的。这个函数是整个工程的“黑匣子”出口绝大多数 shape mismatch 报错都指向这里。你只要把它的解析逻辑读通后面写新模块才会顺利不会在形状问题上反复折腾。3.2 创建虚拟环境并安装依赖# 创建 Python 3.10 环境3.10 对 PyTorch 生态兼容最稳 conda create -n yolo11 python3.10 -y conda activate yolo11 # 安装官方 YOLO 库会连带着装 torch、torchvision、opencv 等 pip install ultralytics # 确认 GPU 可用CPU 跑改进实验会慢到怀疑人生 nvidia-smi python -c import torch; print(torch.cuda.is_available())装完别急着装一堆花哨依赖库。改进实验最怕依赖漂移建议把pip list里 torch、torchvision、ultralytics 的版本记下来写进工程根目录的 requirements 文件。torch 版本要和显卡驱动匹配如果torch.cuda.is_available()返回 False常见原因有两个一是驱动太老二是 pip 装的是 CPU 版 torch。后者需要重装对应 CUDA 版本的 torch别在环境上硬耗时间。3.3 准备数据集与模型配置 yamlYOLO 格式数据集按 images 和 labels 分目录标签是归一化后的class x_center y_center width height。至少要分 train 和 val测试集可以后补。数据配置文件如下# datasets/steel_defect/data.yaml path: /home/user/datasets/steel_defect # 改成你的实际路径 train: images/train val: images/val nc: 3 names: 0: scratch 1: hole 2: stain模型配置就是网络结构 yaml。改进前先打开cfg/models/11/yolo11.yaml完整看一遍重点盯backbone:和head:里每个节点的from索引。这个索引表示当前层引用前面哪一层的输出负数是倒数第几层方括号是多个输入。后面加 P2 头、改拼接全靠改这些索引接线索引错了形状立刻崩。3.4 跑通最小训练命令并记录基线yolo train \ modelyolo11n.pt \ datadatasets/steel_defect/data.yaml \ epochs50 \ imgsz640 \ batch16 \ seed0 \ projectruns/base \ nameexp1参数含义model 用预训练权重做起点收敛快imgsz 是训练边长小目标多就设 960但显存和耗时一起涨batch 按显存调一般取 8 到 32seed 固定为 0这是消融实验能否复现的关键project 和 name 组织实验目录每个实验单独一份后面不互相覆盖。训练完立刻验证yolo val \ modelruns/base/exp1/weights/best.pt \ datadatasets/steel_defect/data.yaml把输出的 mAP50、mAP50-95、precision、recall 全部记成一张表。这张基线表是后面所有改进的参照系。我做改进项目的第一条原则就是没有干净基线任何涨点都是错觉。4. 三个能直接抄的改进注意力、P2 小目标头、WIoU 损失4.1 给 backbone 加 SE 注意力模块定义与注册SESqueeze-and-Excitation是最稳的入门级改动。它用全局平均池化压缩空间信息再用两个卷积层学习通道权重最后按通道加权。整个过程不改变特征图宽高只改通道权重所以插到任何位置都不会破坏后续张量形状非常适合当第一个练手改动。# ultralytics/nn/modules/attention.py新建文件内容如下 import torch import torch.nn as nn class SE(nn.Module): Squeeze-and-Excitation 通道注意力。 def __init__(self, c1, c2, r16): super().__init__() hidden max(c1 // r, 8) # 中间通道数防止小模型被压过头 self.avg_pool nn.AdaptiveAvgPool2d(1) self.fc nn.Sequential( nn.Conv2d(c2, hidden, 1, biasFalse), nn.ReLU(inplaceTrue), nn.Conv2d(hidden, c2, 1, biasFalse), nn.Sigmoid(), ) def forward(self, x): b, c, _, _ x.shape # 全局池化压缩成 1x1再恢复出通道权重 y self.avg_pool(x).view(b, c, 1, 1) y self.fc(y) return x * y代码逻辑c1 是输入通道c2 是输出通道SE 保持两者相等r 是压缩比r 越大中间层越窄、额外参数量越少一般取 8 或 16。实现里用两个 Conv2d 而不是 Linear是为了让模块适配任意输入尺寸后面导出 ONNX 时也更省事。注册分两步。先在ultralytics/nn/modules/__init__.py里加from .attention import SE让 SE 进入模块命名空间再到ultralytics/nn/tasks.py的 parse_model 里加一个特殊分支# ultralytics/nn/tasks.pyparse_model 函数内 if m in {SE}: # 输入输出通道都取上一层通道数yaml 里只写压缩比 r args [ch[f], ch[f], args[0]]这里的 ch[f] 是上一层输出通道数。这样写之后模型 yaml 里只需要写压缩比。然后在cfg/models/11/下建 yolo11-se.yaml在 backbone 某个 C3k2 的输出后面插入# yolo11-se.yaml 片段只展示改动位置 backbone: # ... 原有结构保持不动 ... - [-1, 1, C3k2, [256, 3, 2]] # 原 P3 输出 - [-1, 1, SE, [16]] # 新插入 SEr16注意 yaml 方括号里只放压缩比通道数由 parse_model 自动补全。不同版本源码的解析逻辑有细节差异接入时以你手里源码为准如果版本不同直接按SE(c1, c2, r)的签名去适配即可。建议第一个实验插在 P3 或 P4 输出处。P5 太深特征高度语义化SE 收益不明显P2 太浅算力翻倍但信息量不足。插好后训练脚本不用改yaml 指向新文件直接训。第一次跑建议 batch 减半SE 虽然轻但也会引入少量额外显存。4.2 增加 P2 小目标检测层改 yaml 与检测头小目标漏检的根因是特征图分辨率不够。YOLO11 默认在 stride 8、16、32 三个尺度上检测目标只有十几个像素时stride 8 特征图上往往只剩一两个点很难学。加 P2 层就是新增一个 stride 4 的检测头让模型直接看到更高分辨率的特征。这一步的动作几乎全在 yaml 里但需要先读清楚原始 yaml 的索引。常见做法是在 head 部分最前面加一个上采样分支把骨干的浅层特征stride 4拉上来与上采样后的深层特征拼接经过一个 C3k2 后作为第四个检测头的输入# yolo11-p2.yaml 的 head 部分 head: # 原有 PAN-FPN 保持不动在头部之前插入 P2 分支 - [-1, 1, nn.Upsample, [None, 2, nearest]] # 先上采样 - [[-1, 2], 1, Concat, [1]] # 与 backbone 的 stride 4 特征拼接 - [-1, 1, C3k2, [128, 1, 2]] # 融合并压缩通道到 128 # 原有 head 结构继续... - [-1, 1, Detect, [nc, [128, 256, 512, 1024]]] # 检测头从 3 输出变 4 输出上面的索引号是示意不同规模的 YOLO11 变体里backbone 浅层特征的索引不一样直接抄会崩。正确姿势是打开原始 yaml找到 stride 4 那一层的输出索引把[[-1, 2]]里的 2 换成真实索引。改完建议先导出模型做 shape 校验不必直接开训。P2 头的代价要心里有数新增高分辨率分支后参数量和 FLOPs 上升明显小模型训练速度掉 20% 以上。我的建议是只有数据里确实存在一批小目标且基线里小目标类别 AP 明显低于其他类才值得上 P2。如果只是“感觉小目标多”先试 imgsz960 的对比实验很多时候只改输入分辨率就能解决一半问题。4.3 损失函数换成 WIoU改 loss 文件CIoU 在 YOLO 系列里用了很久它在重叠、中心距离、宽高比上都做了约束但对小目标和低质量样本不够宽容。WIoU 的思路是给远离目标中心的预测框加大惩罚同时用动态权重削弱低质量样本的梯度贡献相当于让模型更关注“差得离谱的框”。# ultralytics/utils/loss.py 中新增 WIoU 函数 def wiou_loss(pred, target, eps1e-7): WIoU v1 简化实现距离感知的 IoU 损失。pred/target 均为 xyxy 格式。 # 交集面积 ix1 torch.max(pred[..., 0], target[..., 0]) iy1 torch.max(pred[..., 1], target[..., 1]) ix2 torch.min(pred[..., 2], target[..., 2]) iy2 torch.min(pred[..., 3], target[..., 3]) inter (ix2 - ix1).clamp(0) * (iy2 - iy1).clamp(0) # 并集与 IoUeps 防止除零 area_p (pred[..., 2] - pred[..., 0]) * (pred[..., 3] - pred[..., 1]) area_t (target[..., 2] - target[..., 0]) * (target[..., 3] - target[..., 1]) union area_p area_t - inter eps iou inter / union # 中心点距离用外包框对角线归一化 pcx (pred[..., 0] pred[..., 2]) / 2 pcy (pred[..., 1] pred[..., 3]) / 2 tcx (target[..., 0] target[..., 2]) / 2 tcy (target[..., 1] target[..., 3]) / 2 d2 (pcx - tcx).pow(2) (pcy - tcy).pow(2) wg torch.max(pred[..., 2], target[..., 2]) - torch.min(pred[..., 0], target[..., 0]) eps hg torch.max(pred[..., 3], target[..., 3]) - torch.min(pred[..., 1], target[..., 1]) eps r torch.exp(d2 / (wg.pow(2) hg.pow(2) eps)) # WIoU v1给远离中心的框附加指数级惩罚 return ((1 - iou) * r).mean()使用位置在损失计算处找到原来调用 CIoU 的地方把CIoUTrue换成调用wiou_loss。改完后第一件事不是看 mAP而是盯前 10 轮的 loss 曲线。如果出现 NaN 或剧烈震荡多半是 r 项在训练初期偏大可以把指数部分乘一个 0.5 的衰减系数或者对 d2 做 clamp很快能试出稳定组合。WIoU 的参数敏感度比 CIoU 高同一个改动在不同数据集上差异很大。我有一次在某数据集上涨了 1.8 个点换到另一个数据集完全持平。所以损失类改动必须和基线在完全相同的训练配置下对比不要凭一次实验就下结论这是最容易把改进做成“玄学”的位置。5. 改进的高频翻车与排查收敛、涨点、显存与兼容问题5.1 训练 loss 出现 NaN 或剧烈震荡现象改动后前 10 轮 loss 出现 inf 或 NaN或者 loss 在正常值附近大幅跳动mAP 始终起不来。原因最常见的是新模块里的除法或指数在极端输入下溢出。WIoU 的 r 项在预测框离目标极远时指数爆炸自己写的注意力里如果用 Softmax要注意温度系数另一个常见原因是学习率对新模块来说太大梯度尺度变了之后原来的默认 lr 不再合适。解决先用随机输入单独跑一遍新模块的前向和反向如果梯度是 NaN问题就在模块内部。常见修法是给分母加 eps、对指数部分做 clamp。模块没问题的话把 lr 降到默认值的 0.01 倍看能否稳住稳定后再逐步加回来找到能稳住的最大 lr。5.2 改完 mAP 反而掉了现象加了注意力或换了损失后mAP50 比 baseline 掉了 2 个点以上。原因先别急着否定方案大概率是位置或参数不对。SE 插在 P5 可能挤占深层通道表达WIoU 在目标稀疏数据集上会让模型过度关注难样本扰乱正常框的学习。还有一种可能是 epoch 不够新模块需要比原模型更多轮次才能收敛到更好的点。解决把“改动位置”当成超参来调。注意力模块在 P3、P4、P5 各做一轮 30 epoch 的短实验哪个涨用哪个损失函数按数据集特性选小目标密集选 WIoU遮挡严重先试 SIoU。每次只改一个变量记录完整别让多个改动互相掩盖。5.3 显存溢出现象训练刚开始就报 CUDA out of memory或者跑到一半溢出。原因加 P2 检测层后特征图分辨率翻倍激活值显存明显增大有些注意力模块内含大卷积或全连接也会推高显存占用。原来 batch 16 能跑现在跑不动是正常现象不是代码写错了。解决优先把 batch 降到 8 或 4配合梯度累积保持等效 batch其次把 imgsz 从 640 降到 512 做功能验证确认逻辑跑通再调回去。另一个容易被忽略的点默认开了 AMP部分自定义算子在半精度下会报错或显存占用异常如果用了新模块建议先用 fp32 跑通一轮再开 AMP 验证。5.4 改动后预训练权重加载失败现象加载 yolo11n.pt 时报 shape mismatch 或 key 缺失模型结构和权重对不上。原因你改了 yaml 结构预训练权重的 state_dict 自然对不上。SE 这类不改通道数的模块前面的层还能复用P2 这种结构性改动会新增检测头新层没有对应权重报错是必然的。解决在训练代码里把strictFalse打开让模型加载能对上的层、跳过新层。推荐分阶段处理只加头不改骨干时用官方权重初始化新头从零学骨干也改了的话就冻结部分参数微调或者干脆从头训。注意一个坑开了strictFalse后还要读加载日志确认跳过的 key 里没有骨干结构错位不然会静默训练一个坏模型。另一个常见误用是直接把 yaml 里的 nc 从 80 改成自己的类别数还硬加载原权重最后一层必然崩正确做法是让代码按 nc 重建头再加载骨干权重。5.5 验证集涨点但测试集没涨现象验证集 mAP 涨了 1 个点信心满满去跑测试集结果和 baseline 持平甚至略低。原因一是过拟合验证集新模块容量大而数据增强没跟上它在验证集上记住了分布二是涨的点集中在个别类别整体均值被拉平了看起来像没涨。解决看每一类的 AP 表不要只看均值。用验证脚本输出逐类 AP确认涨的是不是你想解决的那类目标。如果是说明方向对了只是泛化不足加强 Mosaic 和 mixup 再训一轮。如果涨点分散在无关类别上大概率是随机波动换两个 seed 各跑一次验证。单次实验永远不作数这是这个领域最贵的教训。6. 让改进可复现消融实验的顺序与验证技巧做消融实验我习惯按成本从低到高排先换损失函数只改几行代码最快出结果再加轻量注意力参数增幅小最后才动 P2 这种结构性改动时间和显存成本最高。每个改动跑一轮完整训练记录 mAP50、mAP50-95、params、FLOPs 和单张推理耗时。不要在同一轮里叠加两个改动一旦涨了你分不清是谁的功劳后面复现不出来就成了纯玄学。验证阶段要固定一切能固定的东西。随机种子固定数据集的 train/val 划分固定不要每次重新切分训练超参除了被测试的那一个其余全部不动。推理耗时要在同一张卡上测先跑 20 次 warmup 再计时取 50 次平均。吞吐量和延迟混在一起对比是常见的误用如果改进模块增大了计算量要么接受速度换精度要么换一个更轻量的替代方案。最后是部署验证。改完的模型先用验证脚本确认 mAP再导出 ONNX检查新增算子是否在目标推理框架的支持列表里。SE 这类标准模块通常没问题但 P2 分支如果用了动态上采样或非常规拼接有些推理框架会直接不支持提前导出一次能省掉部署阶段的大麻烦。我做改进项目沉淀下来的习惯是每个实验目录里留一份改完的 yaml、一份改动的 diff 日志、一张结果表三个月后回来看还能清楚知道当时做了什么。这个习惯救过我很多次也希望帮到你。祝你涨点顺利别再被同一块石头绊倒。本文还有配套的精品资源点击获取

相关新闻

Agent工程栈从演示到生产:编排、可观测性与成本控制实战

Agent工程栈从演示到生产:编排、可观测性与成本控制实战

1. 从五条动态里读出的信号:Agent 工程栈不再是概念演示10 月 7 日那天,我刷到五条动态,来自不同背景的开发者,有做基础设施的,有做应用层的,也有偏研究的。五条内容表面上各说各的,但放在一起看…

2026/10/14 4:59:00 阅读更多 →
VectorCAST覆盖率分析实战:从MC/DC到集成覆盖的完整流程

VectorCAST覆盖率分析实战:从MC/DC到集成覆盖的完整流程

做嵌入式软件测试的同行大概都清楚,覆盖率分析是个绕不开的话题。平时单元测试、集成测试里,大家都习惯看“测了多少”,但真正到安全关键领域——比如汽车电子、医疗设备、航空航天——客户或者认证机构可不只看你有没有执行测试用例&#xf…

2026/10/14 4:59:00 阅读更多 →
嵌入式选型效率翻倍:MiBee‘s百宝箱工具全解析

嵌入式选型效率翻倍:MiBee‘s百宝箱工具全解析

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

2026/10/14 4:57:59 阅读更多 →

最新新闻

学术AI工具怎么选更划算?六款科研工具按环节搭配的性价比盘点

学术AI工具怎么选更划算?六款科研工具按环节搭配的性价比盘点

一、工具越多,性价比这笔账越算越乱1、行业背景。 近几年大模型能力快速落地,学术场景成了试验田。检索、翻译、改写、润色、绘图,几乎每个环节都冒出专门工具,订阅方式从免费额度到按年付费各有不同。选择变多了,判断成本也跟着涨,同一笔预算怎么分配成了新问题。2、不同人群的…

2026/10/14 17:01:19 阅读更多 →
仓颉语言服务 LSPServer 使用指南:启动参数、运行环境与源码级原理解析

仓颉语言服务 LSPServer 使用指南:启动参数、运行环境与源码级原理解析

开发工具CLI代码质量 【免费下载链接】cangjie_tools 仓颉编程语言命令行工具,包括仓颉包管理工具、仓颉格式化工具、仓颉多语言桥接工具及仓颉语言服务。 项目地址: https://gitcode.com/Cangjie/cangjie_tools 点击查看 免费下载 本文以 cangjie-lang…

2026/10/14 17:01:19 阅读更多 →
openJiuwen MemoryCrypto 解析:记忆引擎 AES-256-GCM 加解密实战指南

openJiuwen MemoryCrypto 解析:记忆引擎 AES-256-GCM 加解密实战指南

人工智能AI AgentAgent 框架工具调用Agent 工作流RAGMCP Clients强化学习 【免费下载链接】agent-core-java openJiuwen agent core Java是 openJiuwen Core的 Java版本,提供AI Agent开发、运行、调优与演进相关的全套SDK能力。 项目地址: https://gitco…

2026/10/14 17:01:19 阅读更多 →
树莓派还是Arduino?跑系统还是跑裸机?从真实项目谈选型

树莓派还是Arduino?跑系统还是跑裸机?从真实项目谈选型

很多刚开始搞硬件开发的朋友,总会拿着一块树莓派和一块 Arduino 问我:“到底买哪个?”几乎所有社区里都会有人甩出一句经典老话:“一个跑系统,一个跑裸机。”听起来很合理,选型好像一下子就清楚了。但这几年…

2026/10/14 17:01:19 阅读更多 →
手动搭建MySQL MHA高可用架构:从主库宕机到自动切换实战

手动搭建MySQL MHA高可用架构:从主库宕机到自动切换实战

1. 为什么手动搭建MHA依然值得学1.1 从一次主库宕机说起凌晨两点,监控告警响了,主库连接数直接掉零。当时我们那套业务用的是单点MySQL,没有做任何高可用。运维同学从被窝里爬起来,手动切从库、改配置、重启服务,前后折…

2026/10/14 17:01:19 阅读更多 →
Oracle 19c RAC on Linux 7.6 安装实战:从环境检查到静默建库

Oracle 19c RAC on Linux 7.6 安装实战:从环境检查到静默建库

简介:面向需要在Red Hat Enterprise Linux 7.6上部署Oracle 19c RAC的DBA与运维工程师,这份安装手册将环境准备与集群配置拆分为可逐步跟做的阶段,涵盖OS环境检查、关闭THP并开启Hugepages、依赖包与内核参数设置、时钟同步等前置任务&#x…

2026/10/14 17:00:18 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/14 7:53:34 阅读更多 →