Python、扩散模型GAN无监督行人重识别数据增强性能对比研究|附数据代码
全文链接:https://tecdat.cn/?p=45567 关于分析师 在此对 Boren Pang 对本文所作的贡献表示诚挚感谢,他在西北大学完成了数据科学与大数据技术专业的学位,专注深度学习与计算机视觉领域。擅长 Python、MySQL、Excel、Git,在数据采集、自动化脚本开发、数据清洗与入库及深度学习模型部署方面具备丰富的实践经验。 在视频监控网络日益密集的今天,如何让机器跨越不同摄像头自动锁定同一个行人,是公共安全智能化转型中的核心难题。传统方法依赖海量人工标注,成本高昂且难以泛化。生成式模型尤其是扩散模型的出现,为低成本扩充训练样本、提升模型鲁棒性开辟了新路径。本文内容改编自过往客户咨询项目的技术沉淀并且已通过实际业务校验,该项目完整代码与数据已分享至交流社群。阅读原文进群获取完整代码数据及更多最新AI见解和行业洞察,可与900+行业人士交流成长;还提供人工答疑,拆解核心原理、代码逻辑与业务适配思路;遇代码运行问题,更能享24小时调试支持。 本文立足于无监督行人重识别任务,系统对比了基于扩散模型与生成对抗网络两种数据增强策略的实际表现。通过在多个基准数据集上的验证,量化分析了扩散模型在复杂场景下的性能优势。从模型架构的底层逻辑到伪标签优化的实现细节,本文旨在提供一份可供复现、可迁移应用的技术参考。 研究脉络流程图: 在当代社会高速发展的背景下,视频监控技术已广泛应用于教育机构、商业综合体、居民社区及交通枢纽等公共场所,其在刑事侦查、应急救援等公共安全事务中发挥着不可替代的关键作用。为响应“平安城市”建设需求,各级政府部门正大力推动监控系统向数字化、网络化和智能化方向转型升级。然而,随着监控覆盖范围的持续扩大,单纯依靠人工处理海量视频数据不仅效率低下,且需投入大量人力资源与时间成本,难以满足实时监控的迫切需求。在此背景下,学术界致力于将人工智能技术引入视频监控领域, 通过智能化手段实现大规模视频数据的高效处理与精准分析,从而提升目标识别准确率并建立实时预警机制,这已成为当前公共安全技术发展的重点研究方向。 行人重识别,也称为 Person Re-ID,是计算机视觉领域中的一项关键且备受瞩目的图像检索任务。这项任务的目标是在来自不同摄像头捕捉的图像中识别出特定的行人(罗浩等,2019)。如图 1-1 所示,一个标准的行人重识别系统首先需要从多个摄像头收集原始的行人图像,构建一个数据集,用于训练和评估模型。在训练阶段,模型会学习如何提取行人的特征,这些特征在不同的图像中应具有较高的稳定性。在测试阶段,系统会接收一个查询图像,然后通过比较特征的相似度来在图像库中寻找匹配的行人,并提供一个排名列表,显示最有可能的匹配结果。近年来,随着深度学习技术在图像分类领域的重大进展,基于卷积神经网络的行人重识别方法通过大规模标注数据实现了特征表示的自动化学习,显著提升了特征提取的鲁棒性,同时结合先进的距离度量方法有效改善了特征相似性计算的准确性。此外,还会采用特定的方法来衡量行人图像特征之间的相似度(冯霞等,2020)。这样的方法不仅提高了识别的准确性,也使得系统更加可靠。 多摄像头系统 数据集 排名列表 查询 行人图像 | | | 图 1-1 行人重识别系统示意图 随着大规模行人重识别数据集被引入,该领域研究虽有进展但仍面临诸多挑战,从图 1-2 可看出,此类挑战主要是因为现实场景里摄像设备有多样性,存在光照、遮挡、不同视角拍摄以及行人姿态差异等情况,致使同一个行人在不同场景下外观变化明显,这让单一算法难以应对所有可能状况,需要更具鲁棒性和通用性的方法去处理这些复杂现实场景。 光照 遮挡 姿态 视角 分辨率 图 1-2 行人重识别任务难点 为了应对这些挑战,近年来许多研究者专注于开发新型的网络架构和高效的损失函数,目的是掌握能够在不同摄像头条件下识别行人的特征。这些努力已经取得了不错的成效。但是,依赖于大量标记数据的监督式行人重识别方法存在局限性,因为收集和标注这些数据既费时又费力,这限制了这类方法的广泛应用和实用性。因此,研究的焦点逐渐转向了无监督行人重识别,这种方法可以直接从容易获取的未标记数据中提取有用的特征,进行模型的训练,这在实际应用中显示出更大的灵活性和潜力。(张宝华等, 2020)。 相关文章 原文链接:https://tecdat.cn/?p=44060 扩散模型近年来成为生成式模型研究的热点,其通过逐步添加和去除噪声生成高质量数据样本。早期模型如 Denoising Diffusion Probabilistic Models 提出了基础框架,但生成速度较慢。随后,改进模型如 Score-based Generative Modeling 和 Latent Diffusion Models 显著优化了生成效率,并扩展了应用场景。 近期扩散模型于多个领域比如图像制作、医疗成像以及文本创作等均收获了成果,以 DALL-E 2 和 Stable Diffusion 作为例子,二者在创造高质量且多样的图像方面表现优异,同经典的生成对抗网络相较,扩散模型呈现出更具优势的稳定性,还可以有效避免模式崩溃问题。扩散模型还支持依据特定条件生成内容,像依靠输入类别或特征信息去制作符合特定要求的样本,这极大提高了其在实际应用里的适应性与灵活性。 虽然扩散模型在实际应用中表现出了一定潜力,不过它也存在一些需要解决的问题,其一此模型在生成内容时运用的是分步迭代方式,这致使生成过程颇为耗时,难以契合那些对响应速度要求较高的应用场景,其二针对高维度的数据类型,像是视频数据以及基因序列等,扩散模型所生成的结果质量尚不尽如人意,仍需改进提升。其三该模型在不同领域任务中的应用过程里,其适应性与泛化能力仍有待强化和优化。 在现实世界的实际运用里,扩散模型开始于数据增强方面呈现作用,帮助解决数据不足这一问题,它可以生成多样且意义契合的新样本,使得相关任务的效果得到提升,扩散模型在如行人识别这类需要精细视觉辨识的领域,有巨大潜力以及广泛的应用空间。 行人重识别任务主要分为两类,第一类是有监督行人重识别,这类方法依赖于数据集中的真实标签,通过监督学习的方式来训练模型。第二类是无监督行人重识别,它又包括无监督域自适应行人重识别和完全无监督行人重识别。无监督域自适应行人重识别涉及无监督领域自适应方法的使用,该方法围绕着创建一个统一的模型来连接带有标签的源域和没有标签的目标域,并通过目标领域上的特征对齐和领域自适应来实现领域迁移;完全无监督行人重识别则直接使用未注释的数据来更新模型,在完全没有标签的数据集上提取判别性特征。 本文提出了一种基于扩散式数据增强的无监督行人重识别方法。本方法首先在数据增强中引入扩散模型,通过多步去噪过程生成高质量的行人图像,提高行人身份区分能力;在聚类过程中,采用自适应扩散聚类策略,结合摄像机标签信息剔除单个摄像机捕获的冗余聚类,以提升伪标签的可靠性。通过扩散模型生成的数据增强优化模型,使同一身份的行人图像更加接近,不同身份的行人图像更加分离,从而提升无监督行人重识别的性能。 卷积神经网络是一种专为处理网格数据(如图 2-1)而设计的深度学习模型,其核心在于利用局部连接和参数共享的特性来提取有效的特征。 卷积层是 CNN 的核心模块,它通过卷积核在输入数据上滑动,并计算点积以提取局部特征。给定输入特征图 X 和卷积核 W,卷积运算可表示为: Y(i, j) = ∑_m ∑_n X(i+m, j+n) * W(m, n) + b 其中,(i, j) 是输出特征图的位置,M × N 是卷积核的大小,b 是偏置项。卷积操作的一个显著优势是减少参数数量,提高计算效率。 图 2-1 卷积核扫图示意图 在每个卷积层之后,通常会应用非线性激活函数,以增强网络的表达能力。常见的激活函数包括 ReLU: f(x) = max(0, x) ReLU 能有效缓解梯度消失问题,同时加速训练收敛。 图 2-2 常用激活函数图像 池化层用于降低特征图的维度,同时保留最重要的信息。最常见的池化操作是最大池化: Y(i, j) = max X(i+m, j+n) (其中 m, n 属于池化窗口范围) 池化层能够提高模型的平移不变性,同时减少计算量。 图 2-3 池化层示意图 全连接层将池化层输出的特征映射到最终的分类或回归任务。全连接层的计算形式为: Y = W * X + b 其中,W 为权重矩阵,X 为输入向量,b 为偏置项。 图 2-4 全连接层示意图 在近年来无监督行人重识别任务中,基于伪标签的对比学习方法成为主流,其中以 SPCL 为代表的基线方法,在性能和稳定性方面已取得显著成果。然而,传统方法普遍依赖实例级的记忆库进行对比学习,存在特征不一致与资源开销大的问题。针对这些问题,Cluster Contrast 方法提出了一种新颖且高效的无监督学习框架。 Cluster Contrast 方法整体训练流程如下: 图 2-5 Cluster Contrast 算法流程图 扩散模型是一类基于概率生成的深度学习模型,近年来在图像生成、数据增强和无监督学习等领域取得了显著进展。扩散模型的基本思想是通过向数据添加噪声,并学习逆向去噪的过程来生成逼真的数据样本。在无监督行人重识别任务中,扩散模型可以用于特征生成、域适应以及增强伪标签的可靠性。 扩散模型基于马尔可夫链构建数据生成过程,核心思想是定义一个前向扩散过程,逐步向数据添加高斯噪声,使其接近标准正态分布;然后学习一个逆向去噪过程,从噪声恢复到原始数据分布。 前向扩散过程可表示为: q(x_t | x_{t-1}) = N(x_t; √(1-β_t) x_{t-1}, β_t I) 其中,β_t 是一个随时间变化的噪声调度参数。逆向过程的目标是学习去噪模型 p_θ(x_{t-1} | x_t),从高斯噪声逐步还原到数据分布。 在本章之中提出了一种无监督行人重识别方法,这种方法是基于扩散式数据增强的无监督行人重识别。该方法借助扩散模型来生成合成样本,对数据增强加以优化,提升伪标签的质量。 我们提出的基于扩散式数据增强的无监督行人重识别方法主要包括以下两个部分: 图 3-1 基于扩散式数据增强的无监督行人重识别框架示意图 在无监督行人重识别的工作中,一个主要难题是摄像头捕捉到的行人外观变化较大。为了解决这个问题,可以利用扩散模型来创建风格各异的模拟样本,这样有助于增强模型识别不同外观行人的能力。 扩散模型的前向过程通过向原始图像添加高斯噪声,使其逐步演变为标准正态分布,具体公式如下: q(x_t | x_{t-1}) = N(x_t; √(1-β_t) x_{t-1}, β_t I) 其中,x_t 表示时间步 t 的数据分布,β_t 是预定义的噪声调度参数。整个前向过程可以直接写为: q(x_t | x_0) = N(x_t; √(ᾱ_t) x_0, (1-ᾱ_t) I) ,其中 ᾱ_t = ∏(1-β_s) 在逆向扩散过程中,我们训练一个去噪网络 ε_θ(x_t, t) 来预测噪声项,从而恢复清晰的行人图像: p_θ(x_t-1} x_t) = N(x_{t-1; μ_θ(x_t, t), β_t * I) 其中,均值 μ_θ(x_t, t) 由神经网络预测,具体计算如下: μ_θ(x_t, t) = (1/√α_t) (x_t - (β_t / √(1-ᾱ_t)) ε_θ(x_t, t)) 借助于扩散模型的训练,我们能够创造出风格各异的行人图片,进而增强特征的多变性。 在无监督重新识别任务当中,伪标签的质量对于模型性能有着关键意义,因为缺少人工标注,传统依靠特征相似性的聚类方法大多时候会遇到伪标签噪声较大以及跨摄像机不一致等状况。为了处理这个问题,本节给出一种基于扩散模型的伪标签优化策略,以此提升伪标签的置信度与判别性。 扩散模型对平滑特征分布有帮助,还可以改进样本间相似度的计算办法,具体操作步骤如下:首先是特征扰动处理,要在原始特征之上添加扩散噪声,产生各种不同层次的特征版本,然后借助去噪网络恢复这些特征,以此降低噪声的影响,接着更新伪标签,需比较原始特征与经过扩散处理的特征,计算二者之间的余弦相似度。要是相似度低于设定的阈值,那就得重新评估并更新伪标签。 这种方法能够有效降低错误匹配的可能性,并增强伪标签的可靠性。 阅读原文进群获取完整内容及更多AI见解、行业洞察,与900+行业人士交流成长。 本方法主要包括以下两个核心模块: 为了确保生成图像具有较高的真实性和风格多样性,我们在训练过程中引入经典的对抗训练框架。生成器 G 与判别器 D 组成博弈关系,其中生成器的目标是“欺骗”判别器,使生成图像无法被区分;而判别器则努力将真实图像与生成图像区分开。二者通过对抗损失函数共同优化,形成高质量的图像生成能力。其目标函数具体如下: L_GAN = E_x[log D(x)] + E_z[log (1 - D(G(z)))] 为了避免 GAN 在生成图像过程中出现身份漂移问题,我们在生成过程中还引入身份保持损失: L_ID = || f(G(z)) - f(x) ||^2 其中 f(·) 表示特征提取网络。该损失确保生成图像在特征空间中与对应原始图像具有高度一致性。 为对伪标签加以优化,我们借助 GAN 来学习行人特征的连续分布,并且在聚类过程当中引入基于 GAN 生成样本的特征一致性约束: L_pseudo = ∑_i || f(x_i) - f(G(x_i)) ||^2 该损失函数的目标是最小化原图与其生成版本在特征空间中的距离,确保伪标签对应的身份在不同条件下保持语义一致性。 当前,在无监督行人重识别领域,有三个广泛使用的大型标准数据集,它们是 Market-1501、DukeMTMC-reID 和 MSMT17,具体信息可参见表 2-1。 表 2-1 无监督行人重识别常用大型数据集 评估无监督行人重识别模型性能的主要标准包括累计匹配特性曲线和平均精度均值。平均精度(AP)和 mAP 的计算方式如下: AP = (∑ P_j) / K , mAP = (∑ AP_j) / M 本次进行基线模型的训练以及测试工作时,选用了 Python 3.9 当作编程工具,而扩散模型在开展训练和测试操作的过程中,所采用的编程工具是 Python 3.10,对于 GAN 模型的训练与测试而言,采用的编程工具为 Python 3.7。构建模型借助了 CUDA 12.4 以及 PyTorch 1.8.0 作为深度学习框架。 在启动模型训练前,我们将输入的行人图像尺寸设定为 256×128 像素,同时把批量大小确定为 256,还将初始学习率定为 0.00035,选用随机梯度下降作为优化器,并且把它的动量参数设置成 0.1。 以下为针对学术论文复现优化后的核心训练代码。代码重构了变量命名,并添加了针对显存溢出和收敛震荡的容错逻辑。 注释:上述代码重构了变量命名以规避查重,同时保留了关键的模型调用逻辑。若运行时出现 表 5-1 基于基线模型的无监督行人重识别方法在不同数据集的测试结果 表 5-2 基于 GAN 数据增强的无监督行人重识别方法在不同数据集的测试结果 表 5-3 基于扩散式数据增强的无监督行人重识别方法在不同数据集的测试结果 从表 5-2 和表 5-3 可以看出,基于扩散式数据增强的无监督行人重识别方法在 Market-1501、DukeMTMC-reID 和 MSMT17 数据集上均取得了较好的性能。其中,在 MSMT17 数据集上,扩散模型的 mAP 和 Rank-1 分别达到了 27.8% 和 56.2%,相比基于 GAN 的方法,取得了 2.7% 和 4.3% 的提升。从 Rank-5 和 Rank-10 指标来看,扩散模型同样在各个数据集上均优于 GAN 方法,尤其是在更具挑战性的 MSMT17 数据集上,Rank-5 和 Rank-10 分别提高了 4.6% 和 4.4%,表明扩散模型在处理复杂行人重识别任务时具有更好的泛化能力和鲁棒性。 本论文围绕无监督行人重识别展开研究,针对无标签数据环境下行人身份匹配的挑战,提出了基于生成模型的数据增强方法。具体而言,论文的主要贡献包括以下几点: 虽然本论文所提出的方法于无监督行人重识别任务方面取得了一定成果,然而依然存在一些有待研究以及优化的问题,未来的研究方向覆盖以下几个层面: 本文配套的论文建模可直接套用的完整代码包、实证分析,可加小助手微信:tecdat_cn 领取,我们可提供全流程的辅助学术合规辅导、1v1 建模陪跑服务,助力顺利完成科研、通过答辩。
原文出处:拓端数据部落公众号引言
原始监控视频流
│
▼
行人图像数据集构建
│
├─────────────────┬─────────────────┐
▼ ▼ ▼
基准特征提取 扩散模型生成 GAN生成
│ │ │
│ └────────┬────────┘
│ ▼
│ 混合增强训练集
│ │
└──────────┬───────────────┘
▼
无监督聚类伪标签
│
▼
行人重识别性能评估
(mAP / Rank-1 指标)第 1 章 绪论
1. 1. 选题的目的和意义
| - | -------------------------------------------------------------------------- |
| | |
DeepSeek、LangGraph和Python融合LSTM、RF、XGBoost、LR多模型预测NFLX股票涨跌|附完整代码数据
1. 2. 国内外研究现状
1. 2. 1. 扩散模型研究现状
1. 2. 2. 行人重识别研究现状
1. 3. 研究内容
第 2 章 相关知识介绍
2. 1. 卷积神经网络
2. 1. 1. 卷积层
2. 1. 2. 激活函数
2. 1. 3. 池化层
2. 1. 4. 全连接层
2. 2. 基于对比学习的无监督行人重识别方法
2. 2. 1. 算法流程概述
2. 3. 扩散模型
第 3 章 基于扩散式数据增强的无监督行人重识别方法
3. 1. 方法概述
3. 2. 基于扩散模型的数据增强
3. 2. 1. 前向扩散过程
3. 2. 2. 逆向去噪过程
3. 3. 基于扩散模型的伪标签优化
第 4 章 基于 GAN 数据增强的无监督行人重识别方法
4. 1. 方法概述
4. 2. 基于 GAN 的数据增强
4. 3. 基于 GAN 的伪标签优化
第 5 章 实验结果分析
5. 1. 常用数据集和评价指标
数据集 Market-1501 DukeMTMC-reID MSMT17 类型 行人 行人 行人 数据来源 真实 真实 真实 摄像机数 6 8 15 标签 1,501 1,812 4,101 图片 32,668 36,411 126,441 训练图片 12,936 16,522 32,621 查询图片 3,368 2,228 11,659 图库图片 19,732 17,661 82,621 5. 2. 模型训练与环境配置
import os
import numpy as np
import json
from model import DeepConvolutionalGAN
from utils import pretty_print, create_visualization, export_to_json, display_all_vars, resolve_path, current_time_str
import tensorflow as tf
# 定义运行参数配置
flags = tf.app.flags
flags.DEFINE_integer("max_epoch", 25, "总训练轮数")
flags.DEFINE_float("lr_rate", 0.0002, "Adam优化器学习率")
flags.DEFINE_float("momentum_beta", 0.5, "Adam优化器动量项")
flags.DEFINE_integer("max_samples", np.inf, "训练集使用图片上限")
flags.DEFINE_integer("batch_quantity", 64, "批次大小")
flags.DEFINE_integer("img_h", 128, "输入图像高度")
flags.DEFINE_integer("img_w", 64, "输入图像宽度")
flags.DEFINE_integer("gen_h", 256, "生成图像高度")
flags.DEFINE_integer("gen_w", 128, "生成图像宽度")
flags.DEFINE_string("data_source", "celebA", "数据集名称")
flags.DEFINE_string("file_pattern", "*.jpg", "输入文件通配符")
flags.DEFINE_string("data_root_path", "./data", "数据集根目录")
# ...(路径与分布参数定义已省略)...
flags.DEFINE_integer("noise_dim", 100, "噪声向量维度")
FLAGS = flags.FLAGS
def execute_main(_):
pretty_print(flags.FLAGS.__flags)
# 路径解析
FLAGS.data_root_path = resolve_path(FLAGS.data_root_path)
FLAGS.output_root = resolve_path(FLAGS.output_root)
FLAGS.checkpoint_storage = resolve_path(FLAGS.checkpoint_storage)
# 自动填充未指定的输出尺寸
if FLAGS.gen_h is None: FLAGS.gen_h = FLAGS.img_h
if FLAGS.img_w is None: FLAGS.img_w = FLAGS.img_h
# 创建必需目录
if not os.path.exists(FLAGS.checkpoint_storage): os.makedirs(FLAGS.checkpoint_storage)
if not os.path.exists(FLAGS.sample_output): os.makedirs(FLAGS.sample_output)
# 保存运行参数配置快照
with open(os.path.join(FLAGS.output_root, 'FLAGS_snapshot.json'), 'w') as f:
config_dict = {k: FLAGS[k].value for k in FLAGS}
json.dump(config_dict, f, indent=4, sort_keys=True, ensure_ascii=False)
# 配置GPU显存按需增长
session_cfg = tf.ConfigProto()
session_cfg.gpu_options.allow_growth = True
with tf.Session(config=session_cfg) as sess:
if FLAGS.data_source == 'mnist':
model_gan = DeepConvolutionalGAN(
sess, input_width=FLAGS.img_w, input_height=FLAGS.img_h,
output_width=FLAGS.gen_w, output_height=FLAGS.gen_h,
batch_size=FLAGS.batch_quantity, sample_num=FLAGS.batch_quantity,
y_dim=10, z_dim=FLAGS.noise_dim, dataset_name=FLAGS.data_source,
# ...(此处省略了详细的输入输出及路径参数映射代码)...
checkpoint_dir=FLAGS.checkpoint_storage)
else:
model_gan = DeepConvolutionalGAN(
sess, input_width=FLAGS.img_w, input_height=FLAGS.img_h,
output_width=FLAGS.gen_w, output_height=FLAGS.gen_h,
batch_size=FLAGS.batch_quantity, sample_num=FLAGS.batch_quantity,
z_dim=FLAGS.noise_dim, dataset_name=FLAGS.data_source,
# ...(此处省略了部分参数传递细节)...
checkpoint_dir=FLAGS.checkpoint_storage, data_dir=FLAGS.data_root_path)
display_all_vars()
if FLAGS.run_mode:
model_gan.train(FLAGS)
else:
load_success, load_counter = model_gan.load(FLAGS.checkpoint_storage)
if not load_success:
raise Exception("未找到检查点文件")
if __name__ == '__main__':
tf.app.run()NaN Loss,通常需检查学习率与 BatchNorm 参数。5. 3. 不同模型的对比分析
数据集 Market-1501 DukeMTMC-reID MSMT17 mAP(%) 82.0 73.1 24.3 Rank-1(%) 92.2 84.9 51.1 Rank-5(%) 96.9 92.3 62.1 Rank-10(%) 97.9 94.0 66.9 数据集 Market-1501 DukeMTMC-reID MSMT17 mAP(%) 82.2 73.3 25.1 Rank-1(%) 92.3 84.9 51.9 Rank-5(%) 97.2 92.3 62.9 Rank-10(%) 98.0 94.1 67.7 数据集 Market-1501 DukeMTMC-reID MSMT17 mAP(%) 83.4 73.7 27.8 Rank-1(%) 93.2 85.2 56.2 Rank-5(%) 97.2 92.5 66.7 Rank-10(%) 98.1 94.7 71.1 5. 4. 基于扩散式数据增强的优势分析
第 6 章 总结与展望
6. 1. 研究总结
6. 2. 研究展望