ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

158、YOLOv8改进实战:SlimNeck轻量级Neck设计——深度可分离卷积与通道剪枝

158、YOLOv8改进实战:SlimNeck轻量级Neck设计——深度可分离卷积与通道剪枝 158、YOLOv8改进实战:SlimNeck轻量级Neck设计——深度可分离卷积与通道剪枝从一次线上事故说起去年有个项目,模型在1080Ti上跑得挺欢,一上Jetson Orin就卡成PPT。客户那边摄像头是30fps的流,我们模型推理只能跑到12fps,还时不时掉帧。排查了一圈,发现瓶颈不在Backbone,不在Head,偏偏卡在Neck这个看起来人畜无害的模块上。YOLOv8默认的Neck结构——C2f + Conv + Upsample那一套,参数量虽然不算离谱,但深度可分离卷积的缺失让它在边缘设备上吃尽了苦头。那段时间我盯着TensorRT的profile结果,发现Neck部分的计算密度远高于Backbone的浅层。说白了,Backbone的卷积还能吃满CUDA core,Neck里的普通卷积因为通道数大、空间尺寸小,反而成了访存瓶颈。这就是典型的“算力没吃满,带宽先爆了”的尴尬局面。SlimNeck到底在解决什么问题SlimNeck这个思路,本质上是对Neck做两件事:一是把普通卷积换成深度可分离卷积,二是对通道做剪枝。前者降低计算量,后者压缩模型体积。但这里有个坑——很多人以为深度可分离卷积就是直接替换,结果精度掉得一塌糊涂。我踩过的坑是这样的:第一次尝试,把Neck里所有的Conv都换成了Depthwise Separable Conv,训练完mAP掉了3个点。后来仔细分析才发现,深度可分离卷积在通道数较少的层效果还行,但在Neck的高维特征层(比如P5层,通道数512),深度卷积的参数量
返回列表