087、零售货架商品检测:密集排列、遮挡严重、类别极多的 SKU 检测方案
087、零售货架商品检测:密集排列、遮挡严重、类别极多的 SKU 检测方案
一、从一次线上事故说起
去年双十一前夜,我盯着监控面板上那条直线下降的mAP曲线,后背发凉。零售货架商品检测模型在测试集上表现完美,一上线就崩了——密集堆叠的饮料瓶互相遮挡,同系列不同口味的SKU(比如“可乐原味”和“可乐零度”)几乎无法区分,更别提那些被促销标签遮挡了一半的包装袋。甲方运维在群里连发三个问号,我默默把训练好的YOLOv8模型拖进了回收站。
那次事故让我明白:零售货架场景不是简单的“目标检测”,而是密集排列+严重遮挡+细粒度分类的三重地狱。今天这篇笔记,就聊聊我们后来怎么用YOLOv8+改进方案啃下这块硬骨头。
二、问题拆解:为什么通用检测器会翻车
先看数据特点。一张货架图里可能有200+个商品,每个商品占几十到几百像素,互相挨着像多米诺骨牌。YOLOv8的默认anchor设计针对的是COCO那种“一个物体占画面1/3”的场景,放到这里直接水土不服。
更致命的是遮挡。两个相邻的洗发水瓶,一个瓶身被另一个完全挡住,只剩瓶盖露在外面。模型会把它当成背景,或者错误地预测成“瓶盖”这个类别——但我们的SKU列表里根本没有“瓶盖”这个标签。
还有类别极多的问题。一个中型超市的SKU数量在5000-10000之间,远超COCO的80类。YOLOv8的分类头在这么多类别上训练,很容易出现类别混淆,尤其是那些外观相似的SKU(比如不同口味的薯片包装)。
