简介这份PPT综述面向计算机、人工智能及相关专业的学习者与入门研究者系统梳理图像处理与计算机视觉的基础概念、发展脉络与技术应用帮助读者建立从二维图像分析到三维场景理解的完整知识框架。资源包内含1个PPT文件大小约1.55MB以幻灯片形式组织内容便于课堂讲解、自学梳理与知识复盘。内容涵盖图像与数字图像的定义、像素与灰度/彩色图像分类、低中高级处理的划分以及图像处理与计算机视觉、机器视觉之间的区别与联系同时按时间线回顾从20世纪20年代图像编码与重构、60年代航天图像处理、70年代遥感与医学图像增强到人工智能兴起后由二维向三维空间信息获取转变的历程。此外还涉及系统构成中的传感器、高速图像采集系统与数码相机、扫描仪等输入输出设备并结合工业机器视觉的缺陷检测、尺寸测量与目标识别等场景说明技术落地方式。目前已有89人学习适合作为课程复习、技术综述写作与知识体系搭建的参考材料。1. 图像处理与计算机视觉技术综述从一份PPT大纲到可复现的技术路线图很多人第一次接触图像处理与计算机视觉技术综述是在一份汇报PPT里——可能是课程作业、技术分享或项目立项材料。但真正做过落地的人都知道PPT上的技术综述如果只停留在“卷积神经网络”“目标检测”“图像分割”这些名词堆叠拿给团队看只会换来一句“所以呢”。一份能打的综述必须回答三个问题这条技术路线现在成熟到什么程度、我手头的数据和算力能跑通哪一段、从预处理到部署中间有哪些参数会让人翻车。这篇笔记就按这个思路把图像处理与计算机视觉技术综述拆成一条可执行的技术路线从传统算子讲到深度学习模型选型再到训练调参和部署排错。适合正在做技术调研的算法工程师、需要给团队做技术选型的技术负责人以及刚入门想建立全局视角的开发者。2. 图像处理与计算机视觉的技术版图先分清哪些问题该用哪类方法2.1 传统图像处理与深度学习的边界在哪里图像处理与计算机视觉虽然常被放在一起讲但两者的技术目标有本质区别。图像处理更偏向“输入图像、输出图像”比如去噪、增强、边缘提取、形态学操作核心是像素级变换计算机视觉则是“输入图像、输出语义”比如分类、检测、分割、跟踪核心是理解内容。传统方法在图像处理阶段仍然不可替代——直方图均衡化做光照归一化、高斯滤波去传感器噪声、Canny算子提取边缘这些操作计算量小、可解释性强放在深度学习模型前面做预处理往往比直接端到端训练更稳。我一般建议在技术综述里把 pipeline 拆成三段预处理段用传统算子特征提取段根据数据量决定用 SIFT/HOG 还是 CNN backbone决策段用分类头或检测头。这样拆的好处是每一段都可以独立验证出了问题能快速定位是预处理参数不对还是模型欠拟合。常见做法是先用 OpenCV 把预处理链路跑通确认输入分布稳定后再接入深度学习框架。2.2 计算机视觉四大任务的技术选型对照在写综述时任务类型决定了后续所有技术选型。下面这张表是我在多个项目里总结的对照关系可以直接作为PPT里的选型依据任务类型输入输出典型模型数据量要求算力门槛图像分类单张图像类别标签ResNet / EfficientNet每类500单卡可训目标检测单张图像边界框类别YOLO系列 / Faster R-CNN每类1000单卡到多卡语义分割单张图像像素级类别U-Net / DeepLab标注成本高多卡更稳实例分割单张图像像素级实例IDMask R-CNN标注成本极高多卡选型时最容易翻车的地方是低估标注成本。分类任务可以用众包快速标但分割任务一张图可能要标十几分钟综述里如果不把标注成本写清楚后续排期一定出问题。另一个坑是算力预估——YOLO系列在单卡上能跑通训练但分割模型如果输入分辨率到1024×1024显存占用会直接翻倍这些细节在技术综述里必须体现。2.3 用OpenCV跑通预处理链路的最小代码下面这段代码是我在多个项目里复用的预处理模板包含去噪、光照归一化和尺寸对齐三个步骤。先跑通它再往上叠深度学习模型能省掉大量调试时间。import cv2 import numpy as np def preprocess_image(img_path, target_size(640, 640)): # 读取图像兼容中文路径 img cv2.imdecode(np.fromfile(img_path, dtypenp.uint8), cv2.IMREAD_COLOR) if img is None: raise ValueError(f无法读取图像: {img_path}) # 高斯滤波去噪kernel_size根据噪声水平调整 # 一般3×3适合轻度噪声5×5适合传感器噪声明显的情况 img cv2.GaussianBlur(img, (3, 3), sigmaX0) # 转LAB空间做光照归一化只对L通道做CLAHE lab cv2.cvtColor(img, cv2.COLOR_BGR2LAB) l, a, b cv2.split(lab) clahe cv2.createCLAHE(clipLimit2.0, tileGridSize(8, 8)) l clahe.apply(l) img cv2.cvtColor(cv2.merge((l, a, b)), cv2.COLOR_LAB2BGR) # 保持宽高比的resize短边对齐target_size长边padding h, w img.shape[:2] scale target_size[0] / min(h, w) new_h, new_w int(h * scale), int(w * scale) img cv2.resize(img, (new_w, new_h), interpolationcv2.INTER_LINEAR) # padding到目标尺寸用灰色填充避免边缘伪影 pad_h target_size[0] - new_h pad_w target_size[1] - new_w img cv2.copyMakeBorder(img, 0, pad_h, 0, pad_w, cv2.BORDER_CONSTANT, value(114, 114, 114)) return img这段代码里三个参数最需要关注GaussianBlur的 kernel_size 决定去噪强度太大糊边缘、太小没效果clipLimit控制 CLAHE 的对比度增强上限设成 2.0 是经验值超过 4.0 容易放大噪声padding 的填充值用 114 而不是 0是因为后续归一化时 0 值会引入人工边缘114 接近 ImageNet 均值对预训练模型更友好。跑通这段之后可以把输出直接喂给任意 CNN backbone输入分布基本稳定。3. 从传统算子到CNN特征提取环节的选型与实现3.1 SIFT、HOG与CNN特征的适用场景对比特征提取是图像处理与计算机视觉综述里最容易被一笔带过的环节但实际项目里选错特征提取方式后面调参调到怀疑人生。SIFT 的优点是尺度不变、旋转不变适合做图像拼接、匹配这类几何任务缺点是计算慢、对纹理少的区域提取不出足够关键点。HOG 适合行人检测这类有固定结构的任务特征维度可控但泛化能力有限。CNN 特征则是数据驱动只要有足够标注分类和检测任务上基本全面碾压传统方法。我的经验是如果标注数据少于每类200张先用 SIFT/HOG SVM 跑一个 baseline确认任务本身可解如果数据量够直接上 CNN 微调。综述里可以把这条决策线写清楚避免团队在数据不足时硬上深度学习最后模型不收敛还找不到原因。3.2 用PyTorch搭建一个可复现的分类baseline下面这个训练脚本是我常用的分类 baseline结构简单但包含了数据增强、学习率调度和验证集监控三个关键模块。直接替换数据集路径就能跑。import torch import torch.nn as nn from torch.utils.data import DataLoader from torchvision import datasets, transforms, models # 数据增强训练集用随机裁剪和翻转验证集只做中心裁剪 train_tf transforms.Compose([ transforms.RandomResizedCrop(224, scale(0.7, 1.0)), transforms.RandomHorizontalFlip(), transforms.ColorJitter(brightness0.2, contrast0.2), transforms.ToTensor(), transforms.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]) ]) val_tf transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]) ]) train_ds datasets.ImageFolder(data/train, transformtrain_tf) val_ds datasets.ImageFolder(data/val, transformval_tf) train_loader DataLoader(train_ds, batch_size32, shuffleTrue, num_workers4) val_loader DataLoader(val_ds, batch_size32, shuffleFalse, num_workers4) # 用预训练ResNet18替换最后一层适配类别数 model models.resnet18(weightsmodels.ResNet18_Weights.DEFAULT) model.fc nn.Linear(model.fc.in_features, len(train_ds.classes)) device torch.device(cuda if torch.cuda.is_available() else cpu) model model.to(device) criterion nn.CrossEntropyLoss() # 只对fc层用大学习率backbone用小学习率避免破坏预训练特征 optimizer torch.optim.SGD([ {params: model.fc.parameters(), lr: 1e-3}, {params: model.layer4.parameters(), lr: 1e-4}, ], momentum0.9, weight_decay1e-4) scheduler torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max30) for epoch in range(30): model.train() for imgs, labels in train_loader: imgs, labels imgs.to(device), labels.to(device) optimizer.zero_grad() loss criterion(model(imgs), labels) loss.backward() optimizer.step() scheduler.step() # 验证阶段只算准确率实际项目里建议加混淆矩阵 model.eval() correct total 0 with torch.no_grad(): for imgs, labels in val_loader: imgs, labels imgs.to(device), labels.to(device) pred model(imgs).argmax(dim1) correct (pred labels).sum().item() total labels.size(0) print(fepoch {epoch}, val_acc {correct/total:.4f})这段代码里最关键的参数是分层学习率model.fc用 1e-3model.layer4用 1e-4backbone 其余层冻结。这样做的原因是预训练权重已经学到了通用特征全量微调容易在小数据集上过拟合。CosineAnnealingLR的T_max设成总 epoch 数让学习率平滑降到接近零比 StepLR 更稳。验证阶段如果准确率波动超过3个百分点优先检查数据增强是否过强而不是急着调模型结构。3.3 数据增强的参数边界与翻车场景数据增强是图像处理与计算机视觉里最容易被滥用的环节。我见过把RandomResizedCrop的 scale 设成 (0.3, 1.0) 导致目标被裁掉一半模型学出来的特征全是背景。也见过ColorJitter的 brightness 开到 0.5训练集和验证集分布差异太大验证准确率死活上不去。经验边界是分类任务 scale 不低于 0.6检测任务不低于 0.8因为检测对目标完整性更敏感。ColorJitter 的 brightness 和 contrast 控制在 0.2 以内saturation 和 hue 更保守0.1 左右即可。如果是医学图像或工业缺陷检测颜色增强基本不要用因为颜色本身就是判别特征。这些参数在综述里写清楚能帮团队省掉大量试错时间。4. 目标检测与分割的落地路径模型选型、训练调参与评估4.1 YOLO系列与两阶段检测器的取舍目标检测是计算机视觉落地最密集的方向。YOLO系列属于单阶段检测器速度快、部署友好适合实时场景Faster R-CNN 属于两阶段精度通常高1到3个点但推理速度慢适合离线分析。选型时不要只看 mAP要把推理延迟、显存占用、部署框架支持一起考虑。我一般会建议如果目标数量少于20类、单帧延迟要求低于50ms优先YOLO如果目标密集、小目标多、精度优先再考虑两阶段。分割任务同理U-Net 适合医学和工业缺陷这类结构固定的场景DeepLab 系列适合自然图像。Mask R-CNN 能做实例分割但标注成本和算力门槛都高综述里要明确写出“不建议作为第一版方案”。4.2 检测训练中的三个必调参数检测模型训练和分类最大的区别是损失函数由分类损失和回归损失组成参数敏感度更高。下面三个参数是我每次都会重点调的参数作用推荐范围调参信号学习率控制权重更新步长1e-4 到 1e-2loss震荡则降收敛慢则升锚框尺寸匹配目标尺度根据数据集聚类mAP低且小目标漏检则重聚类正负样本比例平衡分类损失1:3 到 1:10负样本过多导致漏检锚框尺寸这块常见做法是对训练集的所有标注框做 K-means 聚类聚出5到9组宽高。如果直接套用 COCO 的默认锚框在自己的数据集上小目标召回率通常掉10个点以上。这个细节在技术综述里值得单独写一段因为很多团队踩过这个坑。4.3 用mAP和IoU验证检测模型是否真的可用训练 loss 下降不代表模型可用必须用 mAP 和 IoU 做验证。mAP0.5 是 IoU 阈值0.5时的平均精度mAP0.5:0.95 是多个阈值下的平均后者更能反映定位精度。实际项目里我一般要求 mAP0.5 至少比 baseline 高5个点且 mAP0.5:0.95 不能掉太多否则说明框的位置不准后处理需要加回归修正。验证时还要看混淆矩阵如果某两类互相误检严重优先检查标注是否一致而不是加数据。我遇到过标注里“划痕”和“裂纹”混标的情况模型怎么训都分不开最后重新定义标注规范才解决。这类问题在综述里提一句能帮读者少走弯路。5. 避坑与排查图像处理与计算机视觉项目里最常见的五类翻车5.1 训练loss不下降先查数据而不是模型现象训练集 loss 从第一个 epoch 就卡在某个值不动或者震荡剧烈。原因通常不是模型结构而是数据标签错位、图像读取失败返回全黑图、或者归一化参数和预训练模型不匹配。解决步骤先可视化一个 batch 的图像和标签确认图像正常、标签对应再检查transforms.Normalize的 mean/std 是否和 backbone 预训练时一致最后把学习率降到 1e-4 再试。我见过最隐蔽的情况是图像路径里有中文OpenCV 读取返回 None后续全黑图训练loss 自然不动。5.2 验证集准确率远低于训练集别急着加正则现象训练集准确率95%验证集只有60%。原因可能是训练集和验证集分布不一致比如训练集是白天图、验证集混了夜间图也可能是数据增强只对训练集做了强增强验证集分布偏移。解决先做数据分布统计看亮度、尺寸、类别比例是否一致再把验证集也做和训练集相同的预处理但不做随机增强。如果分布一致但 gap 仍大再考虑加 Dropout 或 weight_decay。很多团队一上来就加正则结果训练集也掉下去问题没解决。5.3 检测模型小目标漏检严重锚框和输入分辨率都要查现象大目标检测正常小目标 mAP 接近零。原因通常是输入分辨率被压缩太小小目标在特征图上只剩几个像素或者锚框尺寸没有覆盖小目标。解决先把输入分辨率提高到 800 以上看小目标召回是否改善如果改善有限对标注框做 K-means 聚类重新生成锚框最后检查 FPN 层是否正常融合了浅层特征。这三个步骤按顺序做基本能定位问题。5.4 推理速度远低于预期先看预处理和后处理现象模型在 GPU 上推理只要10ms但整个 pipeline 跑下来要100ms。原因往往不在模型本身而在预处理图像解码、resize、归一化和后处理NMS、框解码。解决把预处理放到 GPU 上用 DALI 或 TorchVision 的 GPU 版本NMS 用 CUDA 实现如果部署在边缘设备考虑把模型转成 ONNX 或 TensorRT。我一般会先用 profiler 把各阶段耗时打出来再决定优化哪一段避免盲目换模型。5.5 分割边缘粗糙损失函数和上采样方式都要调现象分割结果整体类别正确但边缘锯齿严重。原因可能是上采样用了最近邻插值或者损失函数只用了交叉熵没有加边界损失。解决上采样换成双线性插值损失函数加 Dice Loss 或 Boundary Loss权重设成0.5左右后处理加 CRF 或形态学闭运算。如果边缘仍然粗糙检查标注本身是否精细标注边缘模糊的话模型学不出来。6. 把综述变成可执行方案一份PPT大纲的落地检查清单写图像处理与计算机视觉技术综述的PPT最容易犯的错是只写“有什么技术”不写“怎么选、怎么验、怎么排错”。我现在的习惯是每写一页技术介绍就配一页选型依据和一页验证指标。比如讲目标检测第一页列YOLO和Faster R-CNN的结构差异第二页给选型对照表延迟、精度、部署难度第三页写mAP验证方法和常见翻车点。这样汇报时技术负责人能直接拍板开发也能照着做。具体到检查清单我一般会过这五项数据量和标注成本是否匹配任务类型算力预算是否覆盖训练和推理预处理链路是否用OpenCV跑通并可视化验证模型选型是否有baseline对比评估指标是否包含业务相关指标比如漏检率、误检率而不只是mAP。这五项里任何一项没写清楚后续落地都可能返工。还有一个实用技巧在PPT最后放一张“技术路线时间轴”把数据准备、模型训练、调参、部署四个阶段的时间预估写出来。我见过太多综述把技术讲得很全但排期只写“两周完成”结果标注就花了三周。时间轴不用精确到天但量级要对——分类任务标注加训练通常2到4周检测任务4到8周分割任务8周以上。把这个写进综述团队对投入的预期会理性很多。最后说个我自己的教训早期做技术综述时总想把所有前沿模型都列一遍从Transformer到扩散模型全写上结果汇报时被问“所以你到底建议用哪个”答不上来。后来我改成每个任务只推荐一个主方案加一个备选主方案写清楚为什么选它、参数怎么设、坑在哪备选写清楚什么条件下切换。这样综述才有决策价值而不是技术名词展览。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?