资讯动态

YOLOv8-AFPN-P2345:火箭发射小目标检测的工程实践

发布时间:2026/10/22 14:51:08 来源:尧图企业网站定制
做火箭发射影像自动跟踪的人应该都有同感画面里那枚运载火箭从塔架上点火到穿入云层尺度变化能差出两个数量级。起飞阶段它在画面里占了几百个像素十几秒后往往只剩二三十个像素还拖着一条亮度失控的尾焰。用常规检测模型去盯这样的目标结果不是漏检就是把尾焰和箭体一起框成一个长条看着很热闹实际精度很差。我最近完成了一套针对这个场景的检测方案以YOLOv8为骨架把颈部网络替换成AFPN渐进特征金字塔扩展出P2到P5四个特征检测层再配合专门为“细长目标尾焰干扰”设计的标注与训练策略。组合下来我叫它YOLOv8-AFPN-P2345。这篇文章不打算堆理论主要是把选型逻辑、结构改动、数据构建、训练调参、评测结果和部署细节一次说清楚。如果你正在做火箭、飞机、船舶这类长条目标的检测或者在YOLOv8上尝试自定义结构改动这篇内容应该能给你省不少弯路。适合谁看也顺便说明白一是想改进特定场景检测精度的工程同学二是拿YOLOv8练手做结构改进的学生三是对多尺度小目标检测有需求、想了解AFPN到底怎么落地的人。我默认你有基础的目标检测和PyTorch使用经验但关键概念我会尽量用大白话补齐。1. 火箭目标检测为什么比普通目标检测更棘手很多人觉得火箭目标就是一个“框住就行”的普通任务真正做起来才发现它不是难在“看不看得见”而是难在“怎么定义这个目标”。1.1 极端尺度跨度同一个目标两种极端形态火箭从点火到入轨在固定机位画面里的尺度变化极为夸张。起飞阶段一枚重型火箭的箭体可以横跨画面大半几百甚至上千像素到了高空弹道拉远之后箭体加尾焰可能只剩几十个像素甚至小于常规目标检测里“小目标”的阈值。现代检测模型普遍依赖特征金字塔在多个下采样倍率上产出特征图。常规YOLOv8系列默认在P3、P4、P5三个层级做检测对应输入图像的8倍、16倍、32倍下采样。对大多数场景足够但火箭这种尺度跨度极大的目标P3层对高空段的小目标依然吃力。想要真正捕捉到远距离火箭就必须把特征金字塔往更浅的P2层扩展也就是4倍下采样特征图。尺度问题里还有一个容易忽视的细节火箭尾焰很长单看尾焰的像素面积很大但箭体头部一旦进入云层只剩一个亮点时它的“有效语义”又非常小。这种同一目标内部不同部位尺度差异悬殊的特性让金字塔特征的每一层都承担了重要角色哪一层都不能省。1.2 极端长宽比水平框的本质局限火箭的箭体长宽比通常在10:1到20:1之间加上尾焰甚至可以到25:1以上。目标检测里的常规回归头输出的是水平矩形框用水平框去框一个20:1的长条目标会出现一个很尴尬的局面框内大量区域是背景真正属于目标的像素只占一小部分。这对检测器训练非常不友好。分类分支大概率会学到“框内有一小条亮色物体大量天空背景”的组合特征而不是学到“火箭本体”的纯粹特征。我在初期的完整框标注实验里模型在塔架阶段的检测分数很高一到高空段就明显退化原因就在这里。后面我会讲这个问题最终是靠部件化标注绕过去的而不是硬扛。1.3 尾焰让目标边界变得模糊火箭尾焰有两个特性让检测器很难受一是亮度极高很容易让箭体周围的像素过曝变成一片纯白二是长度和形态变化大随着推进剂流量、飞行速度、空气密度变化尾焰可以比箭体本身还要长两三倍。如果检测框试图把尾焰完整包进去框的长宽比进一步恶化而且尾焰的边缘是渐变的标注人员很难稳定地画出边界。更麻烦的是一旦尾焰过曝箭体尾部会被“亮光淹没”模型在靠近尾焰的区域提取不到稳定的边框信息回归分支的损失也很容易被极亮像素带偏。我的处理方式不是去“抑制”尾焰而是把尾焰当作一个独立的检测部件——它虽然是干扰源但同时也是火箭目标最强的视觉特征之一。与其让一个框去包含所有内容不如让不同部件各司其职。1.4 高速运动带来的帧间模糊火箭飞行速度极快在1080P视频里单帧位移可以达到几十像素。普通监控摄像头或者光学跟踪设备的曝光时间一旦稍长箭体边缘就会出现明显的运动模糊。运动模糊会让目标边缘在相邻帧之间“漂移”训练时手工标注的边界框本身就有较大噪声。这三四个问题叠加在一起常规的“YOLOv8开箱即用”方案基本撑不住。我试过直接拿原版YOLOv8s在高空段视频上跑漏检率非常高偶尔检测出来置信度也只有0.3到0.5根本没到能用的级别。这也是我决定动结构、动数据、动标注方案的直接原因。2. 技术选型为什么是YOLOv8 AFPN P2345这条路线确定了要自研组合方案之后模型底座、特征融合方式、检测层设计这三件事都要有明确理由。下面逐个拆。2.1 以YOLOv8为主干模型的原因选择YOLOv8作为底座倒不是因为它有多么不可替代而是因为它这个架构非常适合做外科手术式的修改。首先YOLOv8是anchor-free的解耦头把分类和回归分支分开训练时损失函数更干净后续替换颈部网络时头部基本不需要大改。其次YOLOv8的backbone采用CSP结构天然方便从不同层级引出多尺度特征这对扩展P2层非常友好。最后官方开源的工程实现和训练管线相当成熟预训练权重齐全我可以把有限精力放在脖子和训练策略上不用从零造轮子。在模型规模上我以YOLOv8s为主做实验后期验证YOLOv8m方案。选择s而不是n或l是因为n的容量不足以应付小目标l在改动AFPN和P2分支后训练成本和部署延迟都会明显上升收益却没那么大。2.2 用AFPN替换PANet的出发点YOLOv8原版的颈部网络是PANet结构基本思路是“先自顶向下传递语义再自底向上传递位置信息最后做多尺度融合”。PANet在实际工程里非常成熟但它有一个底层弱点不同层级特征图之间的语义差距是真实存在的而PANet在融合时采用简单的通道拼接或加法相当于把“高层强语义”和“低层强细节”直接相加没有充分考虑它们之间的冲突。AFPN的核心思路是“渐进融合”不让浅层特征直接跨很多层跳到深层而是先融合相邻层再把融合结果逐级往远处传递。以P3到P5的路径为例AFPN会先融合P2和P3生成新的P3特征再用这个新P3与P4融合生成新P4最后让新P4与P5融合每一级都只处理“相邻层融合”而非直接跨大尺度叠加。这个渐进过程还有一个关键补充每次融合的权重不是手工设定的常数而是由一个小型卷积网络根据输入特征自动计算。相当于模型自己判断“这次融合浅层的边缘细节应该占多少深层的语义应该占多少”。对于火箭这类既有强语义整体轮廓又有强细节箭体边缘纹理的目标这种自适应权重确实更合适。我在后面第4章会给出具体的模块实现。2.3 P2345四个检测层到底解决了什么问题常规YOLOv8的检测层是P3、P4、P5分别负责小、中、大目标。这套方案其实已经隐含了一个假设极小目标比如32×32像素以下不是重点关注对象。但火箭目标的高空段恰恰就是这种极小目标。引入P2层之后特征图分辨率翻倍到输入图像的4倍小目标的细节信息大幅增加。代价也直接P2层的特征图尺寸大通道数如果对齐其他层级计算量和显存占用会明显上涨。我的处理办法是P2分支不照搬P3的通道配置而是用轻量化卷积把通道压低只保留最关键的空间细节。P5层则为超大目标服务——火箭在塔架阶段或近端机位时箭体本身足够大P5的深层语义可以帮助区分箭体、塔架和背景建筑。所以P2345不是简单“多一层就更好”而是针对火箭目标从起飞到入轨的完整尺度谱系四层各管一段。把YOLOv8、AFPN、P2345三者组合起来结构上相当于backbone负责提特征P2-P5负责在不同尺度上呈现特征AFPN负责以渐进、自适应的方式把各层特征融合成高质量金字塔最终交给原版的解耦头做分类和回归。整个链路没有引入特别花哨的模块但每一步都是针对火箭目标的具体问题去改的。3. 自制火箭数据集的构建、标注与增强策略模型结构改动只是第一步对于火箭这种目标数据问题不解决再好的结构也白搭。这里的数据构建过程可能对你在稀缺场景下做检测更有参考价值。3.1 数据来源公开影像切片与合成渲染互补火箭发射的公开影像很多但直接用视频抽帧做训练有个大问题——相邻帧高度相关如果随机划分训练集和验证集很容易因为数据泄漏导致指标虚高。我的处理办法是先按视频片段整体划分再在片段内部抽帧保证同一段发射视频的所有帧只出现在同一个数据集里。数据总量方面我从公开影像切片中整理了约1.2万帧经过清晰度筛选去掉严重过曝、严重模糊、机位抖动过大的帧最终留下约8000帧。同时我用3D渲染工具搭建了一个简单的“模拟发射场景”包括箭体模型、尾焰粒子、云层背景、太阳光晕等元素批量合成了约4000帧具有不同光照和天气组合的图片。最终数据集合计约1.2万帧训练集、验证集、测试集按照片段维度划分比例大概是8200、2000、1800。合成数据在这里不是凑数而是刻意的“数据分布插值”。真实发射视频中晴天逆光、大雾、尾焰过曝这些极端情况往往只有极少样本模型很难学全。合成数据可以定向生成这些极端情况让模型提前见到更广的分布。我强烈建议做稀缺场景检测的同学考虑这种“真实影像打底、合成数据补齐长尾”的思路。3.2 三段式部件标注解决长条目标和尾焰干扰这是我整个项目里最关键的工程决策之一。最开始我用一个完整水平框包住整枚火箭含尾焰实验效果非常差小目标和长条目标AP都偏低。后来我把标注方案改为三个部件类别head头锥与箭体前段、body箭体主体、flame尾焰区域。每个部件的长宽比从原来的20:1以上降到了4:1到6:1框内的背景面积大幅减少分类网络可以学到更集中的目标特征。更重要的是flame类别单独建模之后尾焰的亮度和形态变化不再干扰箭体本身的回归模型对箭体位置的预测稳定了很多。检测器输出三个部件框之后还需要一个合并步骤还原成“火箭目标”。我的合并逻辑不复杂同一帧内如果head框和body框的纵向中心距离小于某一阈值且横向重叠比例足够高就认为属于同一枚火箭body和flame同理。通过这种贪心连通的方式把属于同一目标的部件框合并最终输出火箭的整体包络框。这个后处理逻辑虽然简单但因为火箭飞行姿态基本都是竖直方向实测下来非常稳定。3.3 数据增强比通用目标检测更激进一点火箭目标检测有几个特有的增强需求。首先是尺度抖动因为目标尺度跨度大训练时输入分辨率必须在较大范围内随机变化我在YOLOv8默认多尺度基础上把范围拉到640到1280之间。其次是旋转增强火箭在飞行中会有一定的姿态偏转我加了±30度以内的随机旋转同时配合同心填充避免黑边。第三个也是最有针对性的一点亮度扰动和过曝模拟。火箭尾焰和天空背景的亮度关系是检测的关键我用随机gamma变换模拟不同的曝光条件。低gamma值模拟逆光剪影高gamma值模拟尾焰过曝导致箭体周围泛白的情况。配合合成数据里的太阳光晕样本模型对亮暗变化的鲁棒性提升非常明显。Mosaic和MixUp我也保留了但把Mosaic的触发概率调低了一些。原因很实际火箭目标本来尺寸就极端四张图拼在一起之后目标经常被切得支离破碎尤其是高空段的小目标切完基本没法看。这里有个经验通用检测里的“强增强”不一定适用于你的特殊目标要真实验证不要盲信默认配置。3.4 负样本和难例挖掘除了正样本我也单独准备了一批负样本包括纯天空、发射塔架空景、云层大特写、海面反光等共约2000张。加入负样本的主要目的是压制“把云层高光误判为火箭头锥”这类误检。后期评测里发现误检还是集中出现在太阳周围我就在合成数据里增加了太阳光晕与箭体小目标共存的样本让模型学会区分“亮点”和“目标”。难例挖掘同样有效。每训练一段时间我会用当前模型对训练集做一次预测把漏检和误检的样本挑出来在下一轮增强中提高采样权重。这个方法做起来不复杂但对小目标AP的提升非常直接。4. YOLOv8-AFPN-P2345的落地实现细节这一章讲结构改动的具体位置和代码实现。我不把整个工程代码贴出来只聚焦最关键的两个部分AFPN融合模块和P2分支接入方式。4.1 整体结构改动说明原版YOLOv8的backbone有多个stage输出分别标记为C2、C3、C4、C5对应输入图像的4倍、8倍、16倍、32倍下采样。原版neck只取C3、C4、C5作为P3、P4、P5的输入。我的改动归纳为三步第一步把backbone的C2输出也引入neck经过一层轻量C2f和1×1卷积得到P2特征。第二步把原来neck内部的PANet路径整体替换为AFPN渐进融合路径。第三步head部分保持不变仍然从四个特征层P2、P3、P4、P5分别输出预测为了控制计算量P2层在送入head之前会做一次通道压缩。4.2 AFPN核心融合模块的简化实现我用一个简化的PyTorch风格代码来演示AFPN的相邻层融合逻辑。实际工程中还包含BN和激活函数等细节这里保留主干import torch import torch.nn as nn import torch.nn.functional as F class AdjacentFusion(nn.Module): def __init__(self, feat_dim): super().__init__() # 两个输入分支先做通道对齐 self.conv_low nn.Conv2d(feat_dim, feat_dim, 1) self.conv_high nn.Conv2d(feat_dim, feat_dim, 1) # 自适应权重生成器 self.weight_net nn.Sequential( nn.Conv2d(feat_dim * 2, feat_dim, 1), nn.ReLU(inplaceTrue), nn.Conv2d(feat_dim, 2, 1), nn.Softmax(dim1), ) def forward(self, feat_low, feat_high): # feat_low来自较浅层分辨率高feat_high来自较深层分辨率低 f_low self.conv_low(feat_low) f_high F.interpolate(feat_high, sizef_low.shape[-2:], modebilinear, align_cornersFalse) f_high self.conv_high(f_high) # 自适应融合权重 weight self.weight_net(torch.cat([f_low, f_high], dim1)) return weight[:, 0:1] * f_low weight[:, 1:2] * f_high在neck里渐进融合是串联使用的# 输入p2, p3, p4, p5 fusion_1 AdjacentFusion(embed_dim) # 融合 p2 和 p3 fusion_2 AdjacentFusion(embed_dim) # 融合 p3 和 p4 fusion_3 AdjacentFusion(embed_dim) # 融合 p4 和 p5 p3_new fusion_1(p2, p3) p4_new fusion_2(p3_new, p4) p5_new fusion_3(p4_new, p5)这段代码最关键的部分是weight_net。它把两个输入特征拼接起来先压缩再输出两个通道的权重经过Softmax归一化。这样融合权重可以随输入特征的空间位置动态变化——在箭体边缘细节丰富的区域模型可能更信任浅层特征在整体轮廓语义明确的区域模型可能更信任深层特征。必须说明的是AFPN原论文里还有更多花哨的模块比如非局部注意力、跨层环绕连接等。我在这个项目里只保留了最核心的渐进融合和自适应加权因为实验下来其余模块的增长有限反而增加训练难度和过拟合风险。这个“做减法”的决策对数据量不大的项目尤其重要。4.3 P2分支的轻量化接入P2层的计算代价是实打实的。我在输入1280×1280、batch为1时测试过如果P2的通道数完全对齐P3瓶颈层的张量显存占用会接近翻倍。我的做法是P2通道数控制在P3通道数的一半左右并且只在最后送入head之前做通道压缩。另一个容易忽略的细节是P2特征的感受野很小如果直接让它独立预测目标容易产生大量低置信度的误检。我在AFPN路径中的处理是P2首先与P3做一次融合生成P3_new然后再由P3_new一路向上传播。换句话说P2的细节信息不会单独“裸奔”到head而是经过P3语义修正之后再参与预测。这个小设计对减少小目标误检很有帮助。4.4 为什么没有改动损失函数YOLOv8原版的损失组合是分类用BCE、回归用CIoU加DFL分布焦点损失。我在整个项目中没有改动损失函数原因有两个。第一YOLOv8的DFL对目标边界不确定性的建模已经很成熟火箭尾焰边界虽然模糊但被单独建模成flame类别之后回归难度已经降下来。第二改动损失函数会牵动一大堆超参数我必须优先保证实验可对比性。如果后续要优化我可能会考虑在大长宽比回归上加旋转角度分支但那就是另一个项目了。5. 训练策略与调参记录结构和数据定下来之后训练策略基本决定了最终效果的上限。这里记录两段式训练、关键超参数、曲线判读和防过拟合措施。5.1 两段式训练冻结backbone先学neck直接端到端训练一个改动过neck的YOLOv8很容易出现震荡。我采用两段式策略第一阶段冻结backbone的参数只训练neck和head约80轮让AFPN模块先学会在已有特征上进行融合和预测第二阶段解冻全部参数用较小学习率全量微调200轮左右。第一阶段的原理是YOLOv8的backbone有比较强的预训练特征新引入的AFPN和P2分支相对薄弱如果从零开始同步更新backbone会被不稳定的梯度干扰。先让neck“适配”现有特征再让backbone反过来适应neck的需求训练曲线要平滑得多。这个策略在迁移学习里不新鲜但对自定义结构改动尤其有效。5.2 关键超参数选择下面这组参数是我实验后相对稳定的配置输入分辨率1280batch大小16总轮数300优化器用SGDmomentum 0.937、weight decay 5e-4初始学习率1e-3采用余弦退火衰减到1e-4warmup 3轮。EMA权重衰减系数设置为0.9999。混合精度训练开启训练显存占用控制在24GB以内。关于学习率我想多说一句。batch从16换成其他值时学习率需要同步缩放。我试过batch 8时保持学习率1e-3结果验证集AP明显下滑改用0.5e-3之后恢复。很多同学会忽略这种线性缩放关系导致同样的结构在不同机器上结果差异很大。5.3 训练曲线的判读经验两段式训练下loss曲线特征很明显第一阶段neck收敛较快box_loss前20轮快速下降但分类loss下降较慢第二阶段解冻后loss会有一个短期回升这是backbone参数开始更新导致的正常现象别在这时候急着早停。我更关注的指标是验证集mAP50-95而不是训练集loss。第二阶段约80轮以后mAP50-95增长会明显变缓这时候如果强行多训虽然验证集指标可能继续缓慢上升但测试集表现可能反而下降说明模型开始过拟合。我最终选择在第300轮附近停止而不是刻意追求loss曲线的绝对最低点。5.4 小数据量下的过拟合抑制总共约1.2万帧的数据量对YOLOv8s这种规模模型来说并不宽裕。除了常规的EMA和强增强我还做了两件事。一件是在head的分类分支里增加Dropout比例设为0.1。因为火箭目标类别极少本质上只有一类分类分支很容易对背景特征形成“死记硬背”轻度Dropout能明显提升泛化。另一件是动态负样本采样每一轮训练时从负样本池里随机抽取一部分混合进batch而不是每轮都灌入全部负样本。这样能避免模型过度拟合某些特定的天空纹理。6. 评测结果与问题复盘所有改动最终都要用数据说话。我在同等训练配置、同等数据集划分下对比了原版YOLOv8s、仅替换AFPN但保持P3-P5的版本以及完整版YOLOv8-AFPN-P2345。6.1 整体指标对比结果表格如下所有模型输入分辨率均为1280×1280端到端时延在消费级高端显卡上以FP16精度测得模型mAP50mAP50-95小目标AP50 (32px)端到端时延YOLOv8s (P3-P5)0.8430.5120.7245.6msYOLOv8s AFPN (P3-P5)0.8650.5410.7656.0msYOLOv8s-AFPN-P23450.8970.5780.8117.1msYOLOv8m-AFPN-P23450.9120.6130.8389.8ms单独看数据AFPN替换在保持P3-P5时带来约2.2个百分点的mAP50提升说明渐进融合对特征质量确实有正面作用。完整引入P2之后小目标AP50从0.765进一步提升到0.811这个提升主要来自高空段小目标的召回率。mAP50-95从0.512到0.578涨幅主要集中在小目标和中目标的难度样本上。作为参考YOLOv8m版本的完整方案mAP50达到0.912mAP50-95为0.613已经接近我手写标注的一致性上限。考虑到推理时延增加了近40%最终在项目中我优先部署了YOLOv8s版本。6.2 漏检与误检案例分析指标之外我重点复盘了三类问题。第一类是太阳光晕误检。测试集中有一段逆光画面太阳正好在火箭飞行轨迹附近模型在太阳周围连续输出高置信度的假目标。检查之后发现合成数据里的太阳光晕样本不足且负样本中没有单独采集“太阳云层”组合。补了一批数据并加入亮度扰动后这类误检明显下降。第二类是尾焰过曝导致的箭体定位漂移。早期版本中箭体body框在尾焰过曝时会被“拉向”亮斑中心导致整体框偏向下部。三段式标注让flame类别独立承担了亮斑body框的回归不再被极大像素带走。不过在个别极端过曝帧里head和body两个部件框仍有合并失败的情况我后来在合并后处理里加入了时序平滑用上一帧的目标位置修正当前帧的合并结果。第三类是运动模糊帧的低置信度漏检。单帧检测对模糊目标确实无解我的临时方案是降低推理置信度阈值到0.25再利用ByteTrack的时序打分把置信度较低的轨迹段补回来而不是直接信任单帧结果。最终在视频层面的误检率反而比单帧更低。6.3 推理速度与部署开销速度方面P2层的加入确实带来约0.9ms的额外延迟这在我的场景里可以接受。但如果你要在非常低功耗的嵌入式设备上部署P2分支的通道压缩和输入分辨率裁剪可能需要进一步权衡。我在实际部署里把输入分辨率从1280降到960mAP50-95只下降约1.5%但端到端时延降到5.4ms对实时跟踪更友好。7. 部署细节与后续扩展指标好看不算完能稳定跑起来才是真正落地。最后分享部署环节的几个关键点。7.1 模型导出与推理优化我把训练好的YOLOv8s-AFPN-P2345导出为TensorRT FP16引擎。导出过程有一个坑AFPN里的自适应权重网络包含Softmax和双线性插值虽然这两个算子都能被推理引擎支持但动态shape下插值的性能优化并不理想。我的解决办法是固定输入shape为960×960避免动态shape带来的额外开销。固定shape之后推理时延比动态shape下降了约15%。此外自定义neck模块导出前需要检查所有自定义层的算子是否都能被推理引擎的插件库覆盖。torch.nn.functional.interpolate一般没问题但如果用了某些自定义变形算子就可能需要额外写插件。我在项目里刻意避免使用过于复杂的算子就是为部署省事。7.2 多机位并行推理与结果融合实际使用中经常是多路机位同时推流。我采用的做法是每路视频一个独立推理进程互不共享显存GPU利用率注意错峰。如果单卡显存紧张可以采用“主检测辅验证”的模式主机位跑完整模型辅机位跑更快的小模型只输出高置信度结果。多机位结果融合我用了最朴素的做法以坐标转换后的目标中心作为关联依据把不同机位检测框投射到统一坐标系下取置信度加权平均作为最终目标位置。这个方案在目标单一的情况下完全够用没有引入复杂的多目标跟踪算法。7.3 时序跟踪通道从单帧检测到视频检测检测器只能在单帧上给出结果但在视频场景里我们希望输出稳定的轨迹而不是每帧独立的框。我把ByteTrack接在检测器后端用检测框的中心点和外观特征做关联。实测下来加入跟踪通道后单帧漏检可以被前后帧信息补上轨迹的稳定性明显提升。这里有个经验跟踪模块的检测置信度阈值应该比纯单帧检测更低因为跟踪器本身有“延迟确认”机制低置信度检测框可以在连续若干帧确认后再输出反而比单帧高阈值更可靠。我把置信度阈值从0.45降到0.25轨迹中断率降低了近一半。7.4 后续可扩展方向这个项目目前用的是水平框部件合并方案接下来最自然的扩展是旋转框检测。火箭箭体的方向信息对监测分析很有价值YOLOv8社区已经有旋转框检测的支持如果把head和body的检测升级为带角度的Oriented BBox合并逻辑和运动方向估计都会更直接。另一个扩展方向是引入时序模块对火箭轨迹做短期预测。检测器只能回答“当前在哪”如果要在自动跟踪云台这类场景里提前预判目标移动需要把时序预测和检测结果结合起来。这部分我还没做完但方向基本明确。最后说点实际的整个项目做下来我最深的体会是把YOLOv8换成YOLOv8-AFPN-P2345这个结构本身并不是最难的环节。真正让效果起飞的是三件事——把P2层引进来解决高空小目标、把尾焰单独拆成部件解决长条目标和过曝干扰、用合成数据把极端光照补上。结构改动给你的是上限数据和标注方案决定你能不能摸到那个上限。如果你也要在YOLOv8上做类似的自定义结构改动建议先小步验证先在P3-P5上替换AFPN确认收益再引入P2。一次改动太多出了问题都分不清是哪个环节导致的。先跑通再优化最后再谈部署——这条路最稳。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑