说句难听的现在你要是在顶会上投一篇纯图像分类的论文审稿人大概率连摘要都没看完就给你打上“incremental work”的标签然后婉拒。这领域被 ResNet 那一波人搞完之后剩下的肉渣都不多了。但你要是觉得分类已经“死了”那你就大错特错了——分类是整个视觉识别体系的基石你后面搞检测、分割、跟踪哪个不是站在分类的肩膀上你连这个图里是猫是狗都分不清还谈什么检测它在哪儿、它往哪儿跑咱们今天不聊那些花里胡哨的 ViT 变体、MLP-Mixer 那些 fancy 玩意儿咱们从根儿上捋一捋分类这事儿到底在解决什么问题以及为什么它看似简单却依然让人头疼。分类的本质是“判别式特征学习”。说白了就是让网络把一张图映射到一个高维特征空间在这个空间里不同类别的样本分布得越远越好同类样本聚得越紧越好。这事儿听起来简单做起来全是坑。最早的突破是 AlexNet2012 年 ILSVRC 上直接把错误率从 26% 干到了 15%那一年可以说是深度学习的“独立宣言”。之后 VGG 用一堆 3x3 小卷积核堆出了更深的结构告诉世人“深就是牛逼”。但真正奠定现代分类基石的是 2015 年的 ResNet。残差连接这玩意儿看似就是个跳跃连接但它解决了深层网络梯度消失的致命问题。在这之前训练超过 20 层的网络基本靠玄学ResNet 一口气推到 152 层ImageNet top-5 错误率掉到了 3.57%已经低于人类水平了。从那以后分类任务在 ImageNet 上就进入了“神仙打架”的阶段——精度每提升 0.1% 都要付出巨大的算力和参数量代价收益越来越边际。于是大家换了个赛道开始卷效率MobileNet 的深度可分离卷积、ShuffleNet 的分组卷积 Channel Shuffle、EfficientNet 那套 NAS 搜出来的复合缩放——把 FLOPs 和参数量往下压同时尽量保住精度。这方向的现实意义比卷精度大多了毕竟手机端的分类需求远比服务器端多。再后来 ViT 来了彻底颠覆了卷积的统治地位。ViT 直接把图片切成一堆 patch当成序列丢进 Transformer用自注意力机制捕捉全局依赖。当时我刚看到这个工作的时候第一反应是“这帮人疯了”因为 Transformer 在 NLP 里玩得转是因为序列长度可控你把 224x224 的图切成 16x16 的 patch那也有 196 个 token自注意力的复杂度是 O(n²)这算力消耗谁扛得住后来人家用大规模预训练JFT-300M 那个变态数据集硬生生把 ViT 训出来了在 ImageNet 上碾压了所有 CNN。我当时坐在工位上沉默了十分钟然后默默把 DeepLab 的 backbone 换成了 ViT。但我要泼冷水了。分类任务最大的陷阱在于你被 ImageNet 的“虚假繁荣”给骗了。ImageNet 的图片是经过人工筛选的主体清晰、光照正常、遮挡极少、背景相对干净。你在这个上面训出来的模型拉到真实场景里一试——图像模糊一点、光照暗一点、角度刁钻一点立马翻车。这就是所谓的Domain Gap。举个真实的例子。前年做一个安防项目要识别园区里的车辆品牌。我们直接拿了 ImageNet 预训练的 ResNeXt 做 fine-tune在标准数据集上测着精度 92%高高兴兴部署到现场。结果第一天就翻车了——夜间红外摄像头拍出来的车颜色信息基本丢失轮廓也被噪点糊得厉害精度直接掉到 63%。后来我们老老实实在真实夜间数据上重新采集标注做了大量的 Low-light Enhancement 和噪声注入增强折腾了一个多月才把精度拉回 85%。这事儿让我明白了一个道理在分类里数据集的重要性远远大于模型架构。你用 ViT-L 配一个垃圾数据集打不过用 MobileNet 配一个精心清洗、增强、配平的数据集。那些在 Kaggle 上拿金牌的老油条花在数据清洗和增强上的时间至少是模型调参的三倍。什么 CutMix、MixUp、RandAugment这些增强策略带来的收益比把 ResNet-50 换成 ResNet-152 大多了。再说说长尾分布的问题。现实世界的类别分布永远是长尾的——头部的“狗”、“猫”、“车”占了 90% 的样本尾部的“水獭”、“雪貂”、“铲车”总共就几十张。直接用 Softmax Cross-Entropy 训尾部类别的特征根本学不出来因为梯度被头部类别淹没了。解决思路无非三条重采样过采样尾部或者欠采样头部、重加权给尾部类别更高的 loss 权重、迁移学习从头部类别的知识迁移到尾部。我个人最推荐的是Decoupled Training——先正常训一个模型然后冻结 backbone只重新训练分类头并在分类头上做类别平衡采样。这招简单、稳定、有效比那些花里胡哨的 meta-learning 方案靠谱多了。最后聊一个被严重低估的问题——分类的不确定性估计。你输出一个 Softmax 概率说“这张图有 95% 的概率是猫”但模型可能根本没见过类似的图那个 95% 是虚高的。这在医学诊断、自动驾驶等高风险场景下是要命的。Bayesian Neural Network、MC-Dropout、Ensemble 这些方法能给出更好的不确定性估计但计算开销太大了。目前工业界更实用的做法是在部署时加一个OOD 检测模块Out-of-Distribution用 Mahalanobis 距离或者 Energy Score 来判断输入样本是否落在训练分布的 support 之外如果是就直接拒识不瞎猜。结论分类没有死它只是变得“隐形”了。你在手机上解锁、在相册里搜图、在电商平台以图搜图背后全是分类模型在默默工作。它不性感、不花哨、发不了大论文但它是视觉识别最坚实的底座。别看不起分类——把分类做到极致的人做任何视觉任务都不会差。
图像分类——这活儿早就不性感了,但你绕不开它
说句难听的现在你要是在顶会上投一篇纯图像分类的论文审稿人大概率连摘要都没看完就给你打上“incremental work”的标签然后婉拒。这领域被 ResNet 那一波人搞完之后剩下的肉渣都不多了。但你要是觉得分类已经“死了”那你就大错特错了——分类是整个视觉识别体系的基石你后面搞检测、分割、跟踪哪个不是站在分类的肩膀上你连这个图里是猫是狗都分不清还谈什么检测它在哪儿、它往哪儿跑咱们今天不聊那些花里胡哨的 ViT 变体、MLP-Mixer 那些 fancy 玩意儿咱们从根儿上捋一捋分类这事儿到底在解决什么问题以及为什么它看似简单却依然让人头疼。分类的本质是“判别式特征学习”。说白了就是让网络把一张图映射到一个高维特征空间在这个空间里不同类别的样本分布得越远越好同类样本聚得越紧越好。这事儿听起来简单做起来全是坑。最早的突破是 AlexNet2012 年 ILSVRC 上直接把错误率从 26% 干到了 15%那一年可以说是深度学习的“独立宣言”。之后 VGG 用一堆 3x3 小卷积核堆出了更深的结构告诉世人“深就是牛逼”。但真正奠定现代分类基石的是 2015 年的 ResNet。残差连接这玩意儿看似就是个跳跃连接但它解决了深层网络梯度消失的致命问题。在这之前训练超过 20 层的网络基本靠玄学ResNet 一口气推到 152 层ImageNet top-5 错误率掉到了 3.57%已经低于人类水平了。从那以后分类任务在 ImageNet 上就进入了“神仙打架”的阶段——精度每提升 0.1% 都要付出巨大的算力和参数量代价收益越来越边际。于是大家换了个赛道开始卷效率MobileNet 的深度可分离卷积、ShuffleNet 的分组卷积 Channel Shuffle、EfficientNet 那套 NAS 搜出来的复合缩放——把 FLOPs 和参数量往下压同时尽量保住精度。这方向的现实意义比卷精度大多了毕竟手机端的分类需求远比服务器端多。再后来 ViT 来了彻底颠覆了卷积的统治地位。ViT 直接把图片切成一堆 patch当成序列丢进 Transformer用自注意力机制捕捉全局依赖。当时我刚看到这个工作的时候第一反应是“这帮人疯了”因为 Transformer 在 NLP 里玩得转是因为序列长度可控你把 224x224 的图切成 16x16 的 patch那也有 196 个 token自注意力的复杂度是 O(n²)这算力消耗谁扛得住后来人家用大规模预训练JFT-300M 那个变态数据集硬生生把 ViT 训出来了在 ImageNet 上碾压了所有 CNN。我当时坐在工位上沉默了十分钟然后默默把 DeepLab 的 backbone 换成了 ViT。但我要泼冷水了。分类任务最大的陷阱在于你被 ImageNet 的“虚假繁荣”给骗了。ImageNet 的图片是经过人工筛选的主体清晰、光照正常、遮挡极少、背景相对干净。你在这个上面训出来的模型拉到真实场景里一试——图像模糊一点、光照暗一点、角度刁钻一点立马翻车。这就是所谓的Domain Gap。举个真实的例子。前年做一个安防项目要识别园区里的车辆品牌。我们直接拿了 ImageNet 预训练的 ResNeXt 做 fine-tune在标准数据集上测着精度 92%高高兴兴部署到现场。结果第一天就翻车了——夜间红外摄像头拍出来的车颜色信息基本丢失轮廓也被噪点糊得厉害精度直接掉到 63%。后来我们老老实实在真实夜间数据上重新采集标注做了大量的 Low-light Enhancement 和噪声注入增强折腾了一个多月才把精度拉回 85%。这事儿让我明白了一个道理在分类里数据集的重要性远远大于模型架构。你用 ViT-L 配一个垃圾数据集打不过用 MobileNet 配一个精心清洗、增强、配平的数据集。那些在 Kaggle 上拿金牌的老油条花在数据清洗和增强上的时间至少是模型调参的三倍。什么 CutMix、MixUp、RandAugment这些增强策略带来的收益比把 ResNet-50 换成 ResNet-152 大多了。再说说长尾分布的问题。现实世界的类别分布永远是长尾的——头部的“狗”、“猫”、“车”占了 90% 的样本尾部的“水獭”、“雪貂”、“铲车”总共就几十张。直接用 Softmax Cross-Entropy 训尾部类别的特征根本学不出来因为梯度被头部类别淹没了。解决思路无非三条重采样过采样尾部或者欠采样头部、重加权给尾部类别更高的 loss 权重、迁移学习从头部类别的知识迁移到尾部。我个人最推荐的是Decoupled Training——先正常训一个模型然后冻结 backbone只重新训练分类头并在分类头上做类别平衡采样。这招简单、稳定、有效比那些花里胡哨的 meta-learning 方案靠谱多了。最后聊一个被严重低估的问题——分类的不确定性估计。你输出一个 Softmax 概率说“这张图有 95% 的概率是猫”但模型可能根本没见过类似的图那个 95% 是虚高的。这在医学诊断、自动驾驶等高风险场景下是要命的。Bayesian Neural Network、MC-Dropout、Ensemble 这些方法能给出更好的不确定性估计但计算开销太大了。目前工业界更实用的做法是在部署时加一个OOD 检测模块Out-of-Distribution用 Mahalanobis 距离或者 Energy Score 来判断输入样本是否落在训练分布的 support 之外如果是就直接拒识不瞎猜。结论分类没有死它只是变得“隐形”了。你在手机上解锁、在相册里搜图、在电商平台以图搜图背后全是分类模型在默默工作。它不性感、不花哨、发不了大论文但它是视觉识别最坚实的底座。别看不起分类——把分类做到极致的人做任何视觉任务都不会差。