📑 本页目录(点开跳转)
CV任务类型与模型架构
⏱ 30 分钟 | ⭐ CV 赛的地图
🎯 一句话
CV 竞赛的第一步不是选模型,是看清这道题属于哪种任务——分类、检测、分割、关键点,它们的输出形式、评价指标、后处理链路完全不同。认错任务类型,后面所有工作都会白费。这一章就是那张任务→架构的对照表。
一、CV竞赛任务类型总览
| 任务类型 | 输入 | 输出 | 典型比赛 | 评价指标 |
|---|---|---|---|---|
| 图像分类 | 图像 | 类别标签 | 木薯叶疾病识别、外星信号搜索 | Accuracy、AUC |
| 目标检测 | 图像 | 边界框+类别 | 小麦穗检测、海星检测 | mAP、IoU |
| 语义分割 | 图像 | 像素级类别 | 入侵肾脏(肾小球分割) | IoU、Dice |
| 实例分割 | 图像 | 像素级类别+实例区分 | Open Images Instance Segmentation | mAP |
| 图像检索 | 查询图像 | 相似图像排序 | DIGX | mAP@K |
任务识别与模型选择决策
| 观察到的特征 | 推断的任务类型 | 首选模型族 |
|---|---|---|
| 输出是离散类别 | 图像分类 | ResNet/EfficientNet/ViT |
| 输出是矩形框+类别 | 目标检测 | Faster R-CNN/YOLOv5/EfficientDet |
| 输出是像素级掩码 | 语义分割 | U-Net/DeepLab/Mask R-CNN |
| 输出是框+像素掩码 | 实例分割 | Mask R-CNN/Cascade R-CNN |
| 输出是相似度排序 | 图像检索 | 孪生网络/Triple Network |
非典型CV数据的处理
| 场景 | 处理方式 | 案例 |
|---|---|---|
| 信号频谱图 | 直接当作图像输入CNN | 外星信号搜索(频谱图→2D矩阵→图像分类) |
| 医学TIF大图 | 裁剪为小图后训练,预测时拼接 | 入侵肾脏(几万像素TIF→1024x1024切片) |
| 表情识别 | 先人脸检测裁剪,再分类 | 神经网络表情识别(face_recognition→CNN) |
二、CNN基础架构演进
卷积核心概念
| 概念 | 说明 | 与全连接的区别 |
|---|---|---|
| 局部感受野 | 每个神经元只关注局部区域 | 全连接假设所有像素相关 |
| 权重共享 | 同一卷积核在整张图上滑动 | 全连接每对连接独立参数 |
| 步长(Stride) | 卷积核每次移动的像素数 | 步长>1可降维 |
| 填充(Padding) | 输入周围补零保持尺寸 | SAME填充保持尺寸,VALID不填充 |
| 池化(Pooling) | 降维+平移不变性 | Max Pooling/Avg Pooling |
经典模型演进路线
| 模型 | 核心创新 | 参数量级 | 竞赛适用性 |
|---|---|---|---|
| AlexNet | ReLU激活、Dropout、GPU训练 | 60M | 已过时 |
| VGG | 小卷积核(3x3)堆叠替代大卷积核 | 138M | 特征提取backbone |
| ResNet | 残差连接解决梯度消失 | 25M(ResNet50) | 通用baseline首选 |
| DenseNet | 密集连接,特征复用 | 8M(DenseNet121) | 显存受限时 |
| EfficientNet | 复合缩放(深度+宽度+分辨率) | 5M~66M | 竞赛主力,性价比最高 |
| ViT | Transformer替代CNN,Patch Embedding | 86M | 数据量大时有效 |
| Swin Transformer | 层级式窗口注意力 | 88M | 检测/分割backbone |
模型选择实战建议
| 场景 | 推荐模型 | 理由 |
|---|---|---|
| 首次baseline | ResNet18/34 | 快速验证流程,训练快 |
| 分类冲分 | EfficientNet-B3~B7 | 精度与速度的最佳平衡 |
| 检测baseline | EfficientDet-D0~D5 | 检测专用,自带FPN |
| 检测冲分 | YOLOv5 + EfficientDet双路 | 跨架构融合收益大 |
| 分割baseline | U-Net + ResNet34 backbone | 医学分割经典组合 |
| 分割冲分 | U-Net + EfficientNet backbone + Attention | 更强特征提取+注意力 |
| 数据量极大(>50K) | ViT/Swin Transformer | Transformer需要大数据量 |
| 数据量小(<5K) | ResNet/EfficientNet | CNN的归纳偏置更适合小数据 |
新一代模型架构
| 模型 | 核心改进 | 参数量级 | 竞赛适用性 |
|---|---|---|---|
| ConvNeXt | 纯CNN架构借鉴ViT设计(大卷积核7x7、LayerNorm、GELU) | 28M~350M | 分类/检测/分割通用,ViT的CNN替代 |
| EfficientNetV2 | 渐进式训练 + Fused-MBConv + 更小缩放 | 21M~120M | 比V1训练快5~11倍,竞赛首选 |
| Swin Transformer V2 | 后归一化 + 缩放余弦注意力 + 连续位置偏置 | 88M~197M | 更稳定的训练,检测/分割backbone |
| CoAtNet | CNN+Transformer混合,浅层卷积深层Transformer | 25M~240M | 兼顾CNN归纳偏置和Transformer全局建模 |
| ConvNeXt V2 | 全局响应归一化(GRN),MAE预训练 | 28M~350M | 自监督预训练+微调范式 |
模型选型升级建议
| 场景 | 传统选择 | 升级选择 | 理由 |
|---|---|---|---|
| 分类冲分 | EfficientNet-B5 | EfficientNetV2-M/L | 更快训练,同等精度 |
| 分类冲分 | ViT | ConvNeXt | CNN归纳偏置,小数据更稳定 |
| 检测backbone | ResNet50 | ConvNeXt-T/S | 更强特征提取 |
| 分割backbone | ResNet34 | Swin Transformer | 层级特征更适合分割 |
| 快速验证 | ResNet18 | EfficientNetV2-S | 更快收敛 |
三、目标检测模型详解
两阶段检测器
| 模型 | 流程 | 优势 | 劣势 |
|---|---|---|---|
| Faster R-CNN | RPN生成候选框→RoI Pooling→分类+回归 | 精度高 | 速度慢 |
| Cascade R-CNN | 多级IoU阈值级联精炼 | 对高质量框更准 | 更慢 |
| Mask R-CNN | Faster R-CNN + 分割分支 | 同时做检测和分割 | 显存消耗大 |
单阶段检测器
| 模型 | 流程 | 优势 | 劣势 |
|---|---|---|---|
| YOLOv5 | Backbone→Neck→Head直接预测 | 速度快,社区活跃 | 小目标检测弱 |
| EfficientDet | EfficientNet + BiFPN + Head | 精度效率平衡好 | 超参敏感 |
| RetinaNet | ResNet + FPN + Focal Loss | 解决正负样本不均衡 | 中等速度 |
检测模型关键组件
| 组件 | 作用 | 常见选择 |
|---|---|---|
| Backbone | 特征提取 | ResNet/EfficientNet/Swin Transformer |
| Neck | 多尺度特征融合 | FPN/BiFPN/PANet |
| Head | 预测框+类别 | 分类分支+回归分支 |
| Anchor | 候选框先验 | 预设Anchor/Anchor-Free |
FPN(特征金字塔网络)
| 维度 | 说明 |
|---|---|
| 问题 | 单一尺度特征无法同时检测大小目标 |
| 方案 | 自顶向下融合多尺度特征 |
| 流程 | 深层低分辨率特征上采样→与浅层高分辨率特征相加 |
| 效果 | 小目标检测显著提升 |
| 变体 | BiFPN(加权融合)、PANet(双向传播) |
四、语义分割模型详解
U-Net架构
| 维度 | 说明 |
|---|---|
| 编码器 | 逐步下采样提取高层语义特征 |
| 解码器 | 逐步上采样恢复空间分辨率 |
| 跳跃连接 | 将编码器特征与解码器对应层拼接,保留细节信息 |
| 输入输出 | 输入HxWxN,输出HxWxC(C=类别数) |
| 二分类简化 | 肾小球分割中C=1,即前景/背景二分类 |
U-Net改进方向
| 改进点 | 方法 | 效果 |
|---|---|---|
| Backbone替换 | ResNet34→EfficientNet | 更强特征提取 |
| 注意力机制 | Attention Gate/SE Block/CBAM | 聚焦关键区域 |
| 多尺度 | ASPP/SPP/PPM | 捕获不同尺度上下文 |
| 深度监督 | 中间层也计算Loss | 加速收敛,提升梯度流 |
| 残差连接 | 编码器-解码器间加残差 | 缓解梯度消失 |
分割模型选型
| 场景 | 推荐模型 | 理由 |
|---|---|---|
| 医学图像 | U-Net + ResNet/EfficientNet | 数据量小,U-Net跳跃连接保留细节 |
| 自然场景 | DeepLabV3+ | ASPP处理多尺度 |
| 实例级需求 | Mask R-CNN / Cascade Mask R-CNN | 同时做检测和分割 |
| 实时需求 | BiSeNet / Fast-SCNN | 速度优先 |
五、图像分类模型详解
EfficientNet核心思想
| 维度 | 说明 |
|---|---|
| 复合缩放 | 同时缩放深度(d)、宽度(w)、分辨率(r) |
| 缩放公式 | d = alpha^phi, w = beta^phi, r = gamma^phi, 约束 alphabeta^2gamma^2 ≈ 2 |
| phi值 | B0(phi=0)到B7(phi=7),越大越强越慢 |
| 竞赛建议 | B3~B5性价比最高,B7显存消耗大 |
Vision Transformer (ViT)
| 维度 | 说明 |
|---|---|
| 核心思想 | 将图像切为Patch,当作序列输入Transformer |
| Patch大小 | 典型16x16,越小计算量越大 |
| 位置编码 | 可学习位置嵌入,保留空间信息 |
| 数据需求 | 需要大数据量(>50K)才能超越CNN |
| 竞赛经验 | 小数据集上效果不如EfficientNet,大数据集上可尝试 |
| Swin改进 | 层级式窗口注意力,更适合检测/分割 |
六、CV竞赛通用框架选择
| 框架 | 适用任务 | 优势 | 劣势 |
|---|---|---|---|
| MMDetection | 检测/分割 | 模型齐全,社区活跃 | 学习曲线陡 |
| Detectron2 | 检测/分割 | Facebook出品,质量高 | 文档较少 |
| YOLOv5官方 | 检测 | 易上手,训练快 | 定制化困难 |
| PyTorch + timm | 分类 | 灵活,预训练模型丰富 | 需自己写训练循环 |
| Albumentations | 数据增强 | 增强方法全面,速度快 | 仅做增强 |
七、赛题类型与Baseline模型速查
| 赛题 | 类型 | Baseline模型 | 冲分模型 |
|---|---|---|---|
| 木薯叶疾病识别 | 图像分类(5类) | EfficientNet-B3 | EfficientNet-B5 + ViT融合 |
| 外星信号搜索 | 图像分类(二分类) | ResNet18 | EfficientNet-B0 + Swin Transformer |
| 小麦穗检测 | 目标检测 | EfficientDet-D5 | EfficientDet + YOLOv5 + Faster R-CNN |
| 海星检测 | 目标检测 | Faster R-CNN | EfficientDet + Cascade R-CNN |
| 入侵肾脏 | 语义分割(二分类) | U-Net + ResNet34 | U-Net + EfficientNet + Attention |
🔗 这一章连到哪里
| 去哪 | 为什么 |
|---|---|
| ML基础 12 CNN | 卷积、池化、感受野、残差——CV 主干网络演进的原理线 |
| ML基础 14 通往 Transformer | ⭐ Transformer 凭什么能替掉 CNN:归纳偏置强弱 vs 数据量的权衡,拐点在 14M 数据附近——⚠️ 决定了你这次该不该拿 Swin 当 Backbone(⚠️ 那一章不拆 ViT/Swin/DETR 的内部机制,只讲这个权衡) |
✅ 检查点
- CV 竞赛主要有哪几类任务?它们的输出形式有什么根本不同?
- 选 backbone 时,除了「哪个最强」还要看什么?
- 检测和分割任务在评价指标上有什么本质区别?
- 为什么说「先跑通一个 baseline 再换更强的 backbone」比反过来好?
- 什么情况下应该用更大的输入分辨率而不是更强的模型?
👀 答案
- 分类(输出一个类别/概率向量)、检测(输出一组框+类别+置信度)、分割(输出逐像素的掩码)、关键点(输出一组坐标)。根本不同在于输出的结构复杂度——越往后输出越结构化,后处理链路越长,能出错的环节越多。
- ①预训练权重的可得性(有没有匹配你输入尺寸和领域的权重)②显存和速度(能不能在你的卡上跑到合理的 batch size)③和其他模型的多样性(融合时不要全是同一家族)④社区实现的成熟度——竞赛里没时间debug一个冷门实现。
- 分类看的是「判对没有」,检测/分割看的是「位置对不对」。检测用 mAP(依赖 IoU 阈值和置信度阈值),分割用 Dice/IoU。关键后果:它们的分数对后处理极其敏感——同一个模型,NMS 阈值和置信度阈值调一调,mAP 可能差好几个点。
- 因为换 backbone 是最容易的一步,而 baseline 里的其他环节才是坑的来源:数据读取、增强是否同步变换了框/掩码、评估口径对不对、提交格式对不对。先用最小的 backbone 把这条链路跑通,之后换模型就只是改一行。
- 当目标物体在图像中很小时(小目标检测、医学影像的微小病灶、遥感)。此时分辨率带来的信息量增益远大于模型容量——目标只有十几个像素,再强的模型也看不清。经验上这类赛题里提高分辨率的收益常常排第一。
🛑 可以停在这里
⚡ 走神救援
CV 赛第一步是看清任务类型(分类/检测/分割/关键点),它们的输出结构复杂度递增,后处理链路越长能出错的环节越多,认错就全白费。选 backbone 除了「哪个最强」还要看:预训练权重可得性、显存与速度、和其他模型的多样性(融合时别全同一家族)、社区实现成熟度(竞赛没时间 debug 冷门实现)。⚠️检测/分割的分数对后处理极其敏感——同一模型调 NMS 和置信度阈值能差好几个点。⭐先用最小 backbone 把链路跑通再换强的:坑在数据读取、增强有没有同步变换框/掩码、评估口径、提交格式,而换 backbone 只是改一行。⭐目标很小时(小目标检测/医学微小病灶/遥感),提高分辨率的收益常常排第一,因为目标只有十几个像素,再强的模型也看不清。