目录
[1. 卷积神经网络原理](#1. 卷积神经网络原理)
[2. 目标检测系列](#2. 目标检测系列)
[1. 在PyTorch/TensorFlow中实现自定义损失函数或网络层的步骤是什么?](#1. 在PyTorch/TensorFlow中实现自定义损失函数或网络层的步骤是什么?)
[2. 如何设计一个轻量级模型用于移动端的人脸识别?](#2. 如何设计一个轻量级模型用于移动端的人脸识别?)
[3. 描述你使用过的一种注意力机制(如SE Block、Transformer)及其应用场景。](#3. 描述你使用过的一种注意力机制(如SE Block、Transformer)及其应用场景。)
[4. 如何优化模型推理速度?是否使用过量化、剪枝或蒸馏技术?](#4. 如何优化模型推理速度?是否使用过量化、剪枝或蒸馏技术?)
[5. 解释数据增强在图像任务中的作用,并举出5种以上增强方法。](#5. 解释数据增强在图像任务中的作用,并举出5种以上增强方法。)
[1. 用C++实现一个快速图像边缘检测算法(如Sobel算子)。](#1. 用C++实现一个快速图像边缘检测算法(如Sobel算子)。)
[2. Python中多线程与多进程的区别?如何解决GIL问题?](#2. Python中多线程与多进程的区别?如何解决GIL问题?)
[3. 如何部署一个深度学习模型到生产环境?是否用过TensorRT或ONNX?](#3. 如何部署一个深度学习模型到生产环境?是否用过TensorRT或ONNX?)
[4. 使用Shell脚本批量处理图像并生成特征文件的思路。](#4. 使用Shell脚本批量处理图像并生成特征文件的思路。)
[1. 如果实际场景中模型准确率高但召回率低,如何调整策略?](#1. 如果实际场景中模型准确率高但召回率低,如何调整策略?)
[2. 在跨摄像头人员跟踪任务中,如何处理遮挡和光线变化?](#2. 在跨摄像头人员跟踪任务中,如何处理遮挡和光线变化?)
[1. 最近关注的计算机视觉论文是什么?其创新点对你的工作有何启发?](#1. 最近关注的计算机视觉论文是什么?其创新点对你的工作有何启发?)
[2. Vision Transformer与传统CNN相比有哪些优势和局限?](#2. Vision Transformer与传统CNN相比有哪些优势和局限?)
[3. 如何将自监督学习应用到图像搜索任务中?](#3. 如何将自监督学习应用到图像搜索任务中?)
[4. 对比学习(Contrastive Learning)在无监督任务中的作用。](#4. 对比学习(Contrastive Learning)在无监督任务中的作用。)
[5. 对多模态模型(如图像+文本)在工业界的应用有何看法?](#5. 对多模态模型(如图像+文本)在工业界的应用有何看法?)
[6. Diffusion Model如何在CV中应用?](#6. Diffusion Model如何在CV中应用?)
[Diffusion Model在CV中的六大应用方向](#Diffusion Model在CV中的六大应用方向)
一、计算机视觉基础
1. 卷积神经网络原理
① 解释卷积神经网络(CNN)的工作原理及其在图像处理中的优势。
原理:通过卷积核滑动提取局部特征(如边缘、纹理),池化层降低空间维度,全连接层分类。
优势 :局部连接(减少参数量)、权值共享(平移不变性)、层次化特征提取(低级→高级语义)。
示例:在ResNet中,残差块缓解梯度消失,使网络更深。补充:
池化操作:降采样 + 平滑 ⇒ 降低计算、增强鲁棒
激活函数(ReLU/Leaky ReLU、Swish 等)提升非线性表达
② 列举常见的图像分割方法,并比较它们的优缺点。
例如Mask R-CNN 和 U-Net
Mask R-CNN:基于Faster R-CNN,增加掩膜分支,适合实例分割(如区分不同物体个体)。
U-Net :编码-解码结构,跳跃连接保留细节,适合医学图像分割(小样本高精度)。
优化场景:U-Net在数据少时表现更好,Mask R-CNN更适合复杂场景多目标分割。
③ 如何处理类别不均衡问题(如人脸识别中不同人种数据量差异)?
数据层面:过采样少数类(如SMOTE)、欠采样多数类。
损失函数 :加权交叉熵(Weighted Cross-Entropy)、Focal Loss(抑制易分类样本权重)。
示例:在人脸识别中,对罕见人种数据增强(旋转、光照变换)并提高其损失权重。
④ 什么是非极大值抑制(NMS)?如何优化其计算效率?
NMS作用:去除冗余检测框(如YOLO中同一目标多个预测框)。
优化方法:Soft-NMS(加权降低重叠框分数)、GPU并行加速、IoU阈值动态调整。
示例代码:
pythondef nms(boxes, scores, threshold): """非极大值抑制(Non-Maximum Suppression, NMS) Args: boxes (np.array): 边界框坐标,形状为 [N, 4](格式通常为x1,y1,x2,y2) scores (np.array): 边界框对应的置信度得分,形状为 [N] threshold (float): IoU阈值,用于判断是否抑制重叠框 Returns: keep (list): 保留的边界框索引列表 """ keep = [] # 按置信度得分从高到低排序,获得索引(argsort默认升序,[::-1]反转后为降序) order = scores.argsort()[::-1] while order.size > 0: # 取当前置信度最高的边界框索引 i = order[0] keep.append(i) # 计算当前框与剩余所有框的IoU(注意:bbox_iou需要提前实现) ious = bbox_iou(boxes[i], boxes[order[1:]]) # 比较当前框 vs 后续所有框 # 找到IoU小于等于阈值的框索引(保留这些框,抑制重叠框) # np.where返回满足条件的索引,[0]是因为返回的是元组格式 idx = np.where(ious <= threshold)[0] # 更新待处理框列表: # 1. order[1:]跳过当前已处理的框 # 2. idx+1 是因为order[1:]的索引比原order小1,需映射回原order的索引位置 order = order[idx + 1] return keep
⑤ 如何评估目标检测模型的性能?mAP的计算逻辑是什么?
性能评估:精确率、召回率、F1分数、交并比、mAP
mAP的计算逻辑:先计算每个类别的AP(Average Precision),再对所有类别的AP取平均
精确率(Precision)
所有预测为正样本的检测框中,实际为正样本的比例。
意义:衡量模型预测的"准确性"(避免误检)。
召回率(Recall)
所有真实正样本中,被正确检测出的比例。
意义:衡量模型检测的"全面性"(避免漏检)。
F1分数(F1-Score)
- 精确率和召回率的调和平均值,平衡两者的重要性。
交并比(IoU, Intersection over Union)
预测框与真实框的重叠面积占两者并集面积的比例。
作用:判断检测框是否有效(通常阈值设为0.5)。
平均精度均值(mAP, mean Average Precision)
- 核心指标:综合所有类别和不同召回率下的平均精度,是目标检测领域的"金标准"。
⑥ FCN、U-Net、DeepLabV3+ 的核心思想差异?
核心思想差异
FCN:全卷积 + 上采样 → 粗分割
U-Net:编码-解码 + 跳跃连接 → 更细节保留
DeepLabV3+:空洞卷积(Atrous) + ASPP → 大感受野
2. 目标检测系列
① Faster R-CNN、YOLO、SSD 各自的网络结构和优缺点?
特性 | Faster R-CNN | SSD | YOLOv5/YOLOv8 |
---|---|---|---|
检测流程 | two-stage(提议生成 + 分类回归) | one-stage,多尺度特征图 | one-stage,端到端 |
精度 | 高,但速度较慢 | 平衡 | 更快,适合实时 |
小目标表现 | 较好 | 依赖多尺度设计 | anchor-free 版本效果提升 |
② 什么是自监督学习?
自监督学习(Self-Supervised Learning,简称 SSL)是一种介于有监督学习和无监督学习之间的学习范式。它的核心思想是在"无标签"数据上自动构造"伪标签"(pretext task),让模型先通过解决这些辅助任务来学习数据的内在表示(representation),再将学到的表示用于下游的监督任务(如分类、检测、分割等),通常能显著提升数据利用效率,减少对人工标注的依赖。
核心思路
构造预训练任务(Pretext Task)
在没有人工标注的数据上,自动生成监督信号。例如:
图像旋转预测:随机将一张图像旋转 0°/90°/180°/270°,让网络预测旋转角度。
图像拼图(Jigsaw Puzzle):将图像切成若干块打乱顺序,让网络恢复原始拼图布局。
像素填充(Inpainting):随机遮挡图像一部分,让网络去重建被遮挡区域。
学习通用特征
通过完成预训练任务,网络在浅层到深层蒸馏出了图像的纹理、边缘、结构、语义等多层次信息。
由于预训练任务本身不依赖人工标签,海量"无标签"图像都可以拿来用。
迁移到下游任务
把预训练好的网络作为"特征提取器"或初始化权重,再用较少量的有标签数据进行微调(fine-tuning)。
实验表明,这种方式在数据稀缺或标签昂贵的场景下,往往能超越从头训练或仅用无监督预训练的方法。
典型方法
对比学习(Contrastive Learning)
SimCLR:对同一张图像做两种不同的数据增强(crop、color-jitter、Gaussian blur 等),生成一对"正样本";其它图像增强结果构成"负样本"。通过 InfoNCE 损失最大化正样本特征相似度、最小化负样本相似度。
MoCo:维护一个动态更新的"负样本队列"(memory bank),并使用动量更新(momentum update)的方式来稳定负样本表示。
生成式方法(Generative Pretext)
Context Encoder:遮挡图像中心块,让网络生成该区域的像素;等同于一种条件生成对抗网络(cGAN)。
Auto-Encoder / Masked Autoencoder (MAE):随机遮掉图像的部分 Patch,模型通过 Transformer 或 Encoder-Decoder 架构去重建被遮掉的内容。
上下文预测(Context Prediction)
- Jigsaw Puzzle:将图像网格切块并打乱顺序,网络要预测每块在原图中的位置。
有监督学习 无监督学习 自监督学习 数据需求 大量带标签数据 仅无标签数据 仅无标签数据(自动生成伪标签) 学习目标 直接优化下游任务(如分类) 学习数据分布(如聚类、降维) 先解决预训练任务,再迁移下游任务 应用优势 精度高,但标签昂贵 可用性广,但表示质量有限 平衡两者:利用海量无标签,学到更有辨识力的表示
二、算法与模型实现
1. 在PyTorch/TensorFlow中实现自定义损失函数或网络层的步骤是什么?
① PyTorch自定义损失函数
继承
nn.Module
,重写forward
方法。示例代码:
pythonclass DiceLoss(nn.Module): def __init__(self): super().__init__() def forward(self, pred, target): smooth = 1e-6 pred = pred.view(-1) target = target.view(-1) intersection = (pred * target).sum() return 1 - (2*intersection + smooth)/(pred.sum() + target.sum() + smooth)
② TensorFlow 自定义损失函数
方法1:函数式定义(简单场景)
适用于无复杂逻辑的损失函数,直接使用TensorFlow运算。
pythonimport tensorflow as tf def custom_mse_loss(y_true, y_pred): """自定义均方误差损失,对高误差样本加权""" error = y_true - y_pred # 对误差绝对值大于1的样本赋予2倍权重 weights = tf.where(tf.abs(error) > 1.0, 2.0, 1.0) return tf.reduce_mean(weights * tf.square(error)) # 使用示例 model.compile(optimizer='adam', loss=custom_mse_loss)
方法2:继承
tf.keras.losses.Loss
类(推荐)需处理样本加权、多任务损失等复杂场景时使用。
pythonclass FocalLoss(tf.keras.losses.Loss): def __init__(self, alpha=0.25, gamma=2.0, name="focal_loss"): super().__init__(name=name) self.alpha = alpha self.gamma = gamma def call(self, y_true, y_pred): # 计算交叉熵 ce = tf.nn.sigmoid_cross_entropy_with_logits(labels=y_true, logits=y_pred) # 计算概率值 p = tf.sigmoid(y_pred) # 计算调制因子 modulating_factor = (1.0 - p)**self.gamma * y_true + p**self.gamma * (1.0 - y_true) # 组合损失 loss = self.alpha * modulating_factor * ce return tf.reduce_mean(loss) # 使用示例 model.compile(optimizer='adam', loss=FocalLoss(alpha=0.25, gamma=2))
2. 如何设计一个轻量级模型用于移动端的人脸识别?
3. 描述你使用过的一种注意力机制(如SE Block、Transformer)及其应用场景。
4. 如何优化模型推理速度?是否使用过量化、剪枝或蒸馏技术?
① 优化模型推理速度的通用方法
优化维度 具体方法 适用场景 硬件加速 使用GPU/TPU/NPU等支持并行计算的硬件,或专用加速芯片(如TensorRT、CoreML) 高吞吐量场景(如服务器、边缘设备) 软件优化 算子融合(Kernel Fusion)、内存复用、多线程/异步计算 框架级优化(如ONNX Runtime优化) 模型压缩 量化(Quantization)、剪枝(Pruning)、蒸馏(Distillation) 移动端/嵌入式设备部署 结构轻量化 使用MobileNet、EfficientNet等轻量级网络,或设计深度可分离卷积(Depthwise Conv) 实时性要求高的任务(如视频流分析) 动态推理 根据输入复杂度动态调整计算路径(如Early Exit、自适应计算时间) 输入差异大的任务(如OCR多样化文本)
② 量化、剪枝、蒸馏技术对比
- 量化
原理:将模型参数从高精度转换为低精度,减少存储和计算开销。
优势:
显著减少模型体积(INT8模型比FP32小4倍)。
利用硬件加速(如GPU的Tensor Core支持INT8计算)。
局限性:
低精度可能导致数值溢出/舍入误差(尤其对敏感任务如目标检测)。
部分操作(如自定义层)需手动适配量化逻辑。
适用场景:移动端部署、边缘计算(如手机人脸识别)。
- 剪枝
原理:移除模型中冗余的权重或神经元(如接近零的权重)
优势:
直接减少计算量(FLOPs降低30-50%)。
可与量化/蒸馏结合使用(叠加优化效果)。
局限性:
需迭代训练(剪枝→微调→评估),时间成本高。
过度剪枝会导致模型崩溃(需谨慎选择剪枝率)。
适用场景:计算资源受限的嵌入式设备(如无人机目标跟踪)。
- 蒸馏
原理:用大模型(教师模型)指导小模型(学生模型)学习,传递"暗知识"。
优势:
小模型可接近大模型的精度(如DistilBERT比BERT小40%,保留95%性能)。
支持跨模态/跨任务知识迁移(如用CNN教师模型训练Transformer学生模型)。
局限性:
依赖教师模型的质量和兼容性。
训练复杂度高(需同时处理教师和学生模型)。
适用场景:需要轻量级高精度模型的场景(如医疗影像分析)。
5. 解释数据增强在图像任务中的作用,并举出5种以上增强方法。
其核心作用在于通过人为扩展训练数据的多样性,提升模型的泛化能力和鲁棒性、缓解过拟合、均衡数据分布 以及 降低标注成本。
⑴ 几何变换类
**随机旋转(Rotation):**将图像旋转一定角度(如±30°),模拟不同拍摄视角。
**水平/垂直翻转(Flip):**沿水平或垂直轴翻转图像,增强对称性物体的识别能力(如猫狗分类)。
**随机裁剪(Random Crop):**从图像中随机截取局部区域,强制模型关注局部特征。常用于目标检测(避免依赖物体位置)。
⑵ 颜色变换类
**亮度/对比度调整(Brightness/Contrast):**模拟不同光照条件,增强模型对明暗变化的适应能力。
**色彩抖动(Color Jitter):**随机调整图像的饱和度、色相(如HSV空间变换),应对摄像头色差。
⑶ 噪声与遮挡类
**高斯噪声(Gaussian Noise):**添加随机噪声,提升模型对低质量输入(如传感器噪声)的鲁棒性。
**随机擦除(Random Erasing):**随机遮挡图像区域(如矩形块),迫使模型关注整体而非局部特征。
⑷ 混合图像类
**MixUp:**混合两张图像及其标签,生成线性插值样本。适用于分类任务。
**CutMix:**将一张图像的部分区域替换为另一张图像的对应区域,同时混合标签。提升模型对局部遮挡的鲁棒性。
⑸ 高级增强方法
**风格迁移(Style Transfer):**保留图像内容但改变风格(如将照片转为油画),增加域多样性。
**GAN生成数据:**利用生成对抗网络(GAN)合成逼真图像,尤其适用于数据稀缺场景(如罕见疾病CT影像)。
增强策略选择:
-
任务相关性
-
分类任务:侧重几何变换、颜色抖动。
-
目标检测:避免破坏边界框的增强(如过度裁剪),优先平移、缩放。
-
语义分割:需同步增强图像和掩膜(如使用相同的随机参数)。
-
-
数据特性
-
自然图像:适合颜色抖动、随机翻转。
-
医学影像:谨慎使用几何变换(需符合解剖结构),优先弹性形变、对比度调整。
-
三、工程能力与编程
1. 用C++实现一个快速图像边缘检测算法(如Sobel算子)。
cpp
#include <opencv2/opencv.hpp>
using namespace cv;
Mat sobel_edge(Mat& src) {
Mat grad_x, grad_y, abs_grad_x, abs_grad_y, dst;
Sobel(src, grad_x, CV_16S, 1, 0, 3); // X方向梯度
Sobel(src, grad_y, CV_16S, 0, 1, 3); // Y方向梯度
convertScaleAbs(grad_x, abs_grad_x); // 转8位无符号
convertScaleAbs(grad_y, abs_grad_y);
addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, dst); // 合并梯度
return dst;
}
2. Python中多线程与多进程的区别?如何解决GIL问题?
多线程:共享内存,适合I/O密集型任务(如下载),但受GIL限制。
多进程 :独立内存,适合CPU密集型任务(如并行计算)。
解决GIL :使用multiprocessing
模块、C扩展(如Cython)、异步编程(asyncio)。
3. 如何部署一个深度学习模型到生产环境?是否用过TensorRT或ONNX?
4. 使用Shell脚本批量处理图像并生成特征文件的思路。
输入输出定义
输入 :指定图像目录(如
./images/*.jpg
),支持常见格式(jpg/png等)。输出 :为每张图像生成对应的特征文件(如
image1.jpg
→features/image1_feature.txt
)。核心步骤
遍历图像文件:使用Shell循环处理每个文件。
特征提取:调用外部工具或脚本(如Python/OpenCV)计算特征。
结果保存:将特征写入文件,可按需选择格式(文本/CSV/JSON)。
并行加速 :利用
xargs
或GNU Parallel
加速大批量处理。
四、实际应用思路
1. 如果实际场景中模型准确率高但召回率低,如何调整策略?
① 调整分类阈值
操作:降低分类阈值,使模型更倾向于预测正类。
影响:提高召回率,但可能降低准确率,需通过ROC曲线或PR曲线找到最佳平衡点。
② 处理类别不平衡
- 过采样:使用SMOTE、ADASYN生成合成正类样本。
pythonfrom imblearn.over_sampling import SMOTE smote = SMOTE() X_resampled, y_resampled = smote.fit_resample(X_train, y_train)
- 调整类别权重:在训练时增加正类样本的权重。
pythonmodel = LogisticRegression(class_weight={0: 1, 1: 10}) # 正类权重设为10倍
③ 优化损失函数
- 使用Focal Loss:抑制易分类样本的损失,聚焦难样本。
④ 模型结构改进
复杂模型:使用更深的神经网络或集成模型(如XGBoost、LightGBM)。
正则化:防止过拟合,提升泛化能力。
⑤ 错误分析与迭代
假阴性分析:统计漏检样本的特征分布(如时间、地理位置)。
针对性增强数据:对高频漏检场景的数据进行过采样。
⑥ 集成学习
- Bagging/Boosting:结合多个弱分类器提升鲁棒性。
pythonfrom sklearn.ensemble import RandomForestClassifier model = RandomForestClassifier(n_estimators=100, class_weight='balanced')
场景 | 推荐策略 |
---|---|
阈值保守导致漏检 | 调整分类阈值 → 后处理规则 |
数据高度不平衡 | 过采样/类别权重 → Focal Loss |
模型欠拟合正类特征 | 复杂模型 → 特征工程 → 集成学习 |
业务场景强需求(如医疗诊断) | 规则引擎 → 人工复核机制 |
2. 在跨摄像头人员跟踪任务中,如何处理遮挡和光线变化?
Ⅰ遮挡问题应对策略
① 多目标跟踪算法增强
- 运动模型预测:使用卡尔曼滤波或粒子滤波预测目标轨迹,在遮挡期间维持位置估计。
- 数据关联优化:采用匈牙利算法或级联匹配(如DeepSORT),结合外观和运动特征减少ID切换。
② 部分遮挡下的特征提取
局部特征聚焦:提取身体部位特征(如头肩、衣着纹理),而非依赖全身信息。
遮挡鲁棒的Re-ID模型:训练时添加随机遮挡增强,提升模型对局部特征的敏感性。
③ 时间上下文融合
轨迹一致性校验:结合历史轨迹预测当前位置,与当前检测结果进行时空一致性匹配。
多帧特征聚合:滑动窗口内平均化目标特征,减少单帧误差影响。
Ⅱ光线变化问题应对策略
① 光照不变性预处理
- 自适应直方图均衡化(CLAHE):增强局部对比度,缓解过曝/欠曝。
- 色彩空间转换:使用对光照变化不敏感的Lab色彩空间的L通道或HSV空间的V通道。
② 光照鲁棒的特征表示
归一化方法:
跨摄像头归一化(CCN):对齐不同摄像头的颜色分布。
实例归一化(IN):消除光照差异,保留身份语义。
对抗训练:在Re-ID模型中引入光照变换的对抗样本,增强泛化性。
③ 多模态数据融合
红外/可见光互补:在低光照场景下启用红外摄像头数据。
时间信息利用:白天/夜间模式切换时,结合时间段元数据调整特征权重。
五、前沿技术与研究
1. 最近关注的计算机视觉论文是什么?其创新点对你的工作有何启发?
2. Vision Transformer与传统CNN相比有哪些优势和局限?
① Vision Transformer的优势
- 全局依赖建模能力
自注意力机制:ViT通过自注意力捕捉图像中任意两个区域的关系,克服了CNN局部感受野的限制,尤其适合需要全局理解的任务(如场景分类、图像生成)。
示例:在医学图像分割中,ViT能有效关联病灶区域与周围组织的全局上下文。
- 可扩展性与模型容量
堆叠Transformer层:通过增加层数或隐藏维度,ViT可轻松扩展模型规模(如ViT-Huge拥有632M参数),而无需复杂结构调整。
性能对比:在JFT-300M数据集上,ViT-L/16的Top-1准确率比ResNet-152高3.5%。
- 对大数据的适应性
数据驱动优化:ViT在超大规模数据(如ImageNet-21k)上训练时,性能显著超越CNN,因其依赖数据而非先验假设学习特征。
案例:谷歌的ViT在JFT-300M预训练后,ImageNet准确率达88.55%,刷新当时记录。
- 灵活的任务适配性
多模态支持:ViT可无缝处理图像、文本、点云等多模态输入(如CLIP模型),而CNN需额外设计融合模块。
② Vision Transformer的局限性
- 计算资源需求高
- 小数据场景表现欠佳
- 位置编码的敏感性
- 实时性挑战
③ 传统CNN的核心优势
- 计算效率与硬件友好性
卷积优化:利用GPU的并行计算和cuDNN加速,ResNet-50处理224x224图像可达1000+ FPS(TensorRT优化后)。
- 小数据鲁棒性
归纳偏置优势:CNN的局部连接和权值共享减少参数冗余,CIFAR-10上仅需5万样本即可达到90%+准确率。
- 成熟的工程生态
部署支持:TensorRT、OpenVINO等工具链对CNN优化成熟,适合嵌入式设备(如无人机、监控摄像头)。
场景 | 推荐架构 | 理由 |
---|---|---|
大规模数据(>100万样本) | Vision Transformer | 全局建模能力 + 大数据潜力充分释放 |
实时边缘设备(如手机) | 轻量CNN(MobileNet) | 低延迟 + 高能效比 |
小样本医疗图像分析 | CNN + 预训练 | 利用ImageNet预训练的归纳偏置,避免过拟合 |
跨模态任务(图文检索) | ViT + 多模态扩展 | 统一架构处理异构数据,简化特征对齐 |
3. 如何将自监督学习应用到图像搜索任务中?
4. 对比学习(Contrastive Learning)在无监督任务中的作用。
对比学习(Contrastive Learning)是自监督学习的一种核心方法,其核心思想是通过让模型区分相似(正样本)与不相似(负样本)的数据对,从而学习到数据的高效表征。
对比学习的核心作用:
① 学习数据的内在结构
无需标签:通过数据本身的相似性(如一张图像的不同增强视图)构建正负样本对,避免依赖人工标注。
特征解耦:迫使模型关注数据的关键语义特征(如物体形状、纹理),而非无关噪声。
② 提升表征的判别性
- 拉近正样本,推开负样本:在特征空间中,相似样本的特征向量距离更近,不相似样本距离更远。
③ 支持下游任务泛化
预训练通用特征:学到的特征可直接用于分类、检测、分割等任务,减少对下游标注数据的需求。
迁移性强:在ImageNet上预训练的对比模型,迁移到医学图像分类任务时仍能保持高精度。
对比学习在无监督任务中的典型应用
1. 图像分类与检索
预训练模型:SimCLR、MoCo在ImageNet上预训练的ResNet,迁移到CIFAR-10分类任务时准确率提升5-10%。
特征检索:在无标签商品库中,基于对比学习特征实现相似商品搜索(Recall@1 > 70%)。
2. 聚类与异常检测
无监督聚类:对比学习特征可直接用于K-means聚类(如STL-10数据集NMI达0.81)。
工业缺陷检测:正常样本作为正类,随机噪声或增强样本作为负类,检测异常区域。
3. 表征可视化
- t-SNE降维:对比学习特征在低维空间中呈现清晰的类别聚簇(如MNIST数字分类)。
5. 对多模态模型(如图像+文本)在工业界的应用有何看法?
核心价值在于通过数据融合释放业务潜能
① 提升模型鲁棒性
互补信息融合:文本可解释图像中的模糊部分(如"模糊照片中的车型可通过描述'SUV 黑色'辅助识别")。
抗噪声能力:单一模态噪声(如图像模糊)可通过另一模态(文本)补偿。
② 增强使用体验
自然交互:用户可自由组合输入方式(如"用图片搜索+语音提问")。
精准推荐:电商平台通过分析用户浏览的图片与评论,推荐更相关商品(点击率提升20%)。
③ 降低标注成本
- 跨模态弱监督:利用图文配对数据(如商品图+描述)自动生成标签,减少人工标注依赖。
6. Diffusion Model如何在CV中应用?
Diffusion Model通过两个过程学习数据分布:
前向过程(加噪):逐步向数据添加高斯噪声,直到数据变为纯噪声。
反向过程(去噪):训练神经网络逐步预测并去除噪声,恢复原始数据。
Diffusion Model在CV中的六大应用方向
① 高质量图像生成
文本到图像生成:如Stable Diffusion、DALL·E 2,根据文本提示生成高分辨率图像。
场景:艺术创作、广告设计、游戏资产生成。
② 图像修复与编辑
局部修复(Inpainting):填充图像缺失区域(如去除水印、修复老照片)。
风格迁移 :将图像转换为指定风格(如油画、像素风)。
工具:Adobe Firefly、Runway ML。③ 图像超分辨率重建
任务:从低分辨率(LR)图像生成高分辨率(HR)图像。
模型 :SR3(Super-Resolution via Repeated Refinement),通过扩散过程逐步提升细节。
优势:相比GAN,减少伪影,保持纹理真实性。④ 医学影像分析
数据增强:生成合成医学影像(如MRI、CT)以扩充小样本数据集。
病灶生成 :模拟罕见病变,辅助医生培训与模型测试。
案例:生成肺结节CT图像,提升肺癌检测模型鲁棒性。⑤ 视频生成与预测
视频生成:生成连续帧(如Phenaki生成长视频)。
视频插帧 :在低帧率视频中插入中间帧,提升流畅度。
挑战:时序一致性、计算成本高。⑥ 多模态融合
图文互生成:如Imagen将文本描述转换为图像,或CLIP引导图像生成。
3D生成:从单张图像生成3D模型(如DreamFusion利用扩散模型优化NeRF)。