开篇故事
上个月,我接到一个电商客户的紧急需求:他们的商品图里经常出现“标签文字”和“商品本身”的混合场景,比如一张T恤上印着“限量版”字样,或者包装盒上的产品名称与实物重叠。
传统YOLO模型能检测出T恤和包装盒,但无法理解“限量版”这三个字是否属于商品的一部分。
最头疼的是,当文字和商品边界模糊时,模型要么漏检,要么把文字区域误判为商品。
客户给我看了一个典型case:一张图里,白色马克杯上印着黑色“2024限定”字样,YOLOv8的检测框把整个杯身框住了,但文字区域被当作背景过滤掉。
而另一张图里,一张海报上的“促销”二字被模型误检为“矩形物体”。这种图文混淆的问题,在电商、广告、文档分析场景里比比皆是。
痛点拆解
很多同学遇到这种问题,第一反应是:给YOLO加一个OCR分支。但这么做有两个致命误区:
误区1:把OCR当作后处理
常见做法是先用YOLO检测物体,再用OCR识别文字区域。但这样两个模型独立运行,物体和文字的空间关系完全丢失。比如“杯子上的文字”和“背景海报上的文字”在语义上完全不同,但后处理无法区分。
误区2:简单拼接特征
有人尝试把YOLO的视觉特征和OCR的文本特征直接拼接,然后输入分类头。但这样做忽略了模态间的对齐——视觉特征关注形状、颜色,文本特征关注笔画、语义,两者维度不匹配,训练时容易梯度震荡。
反例代码(典型的错误实现):