news 2026/9/11 11:31:37

余弦度量的魔力:cosine_metric_learning的cosine-softmax损失如何让Deep SORT追得更准

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
余弦度量的魔力:cosine_metric_learning的cosine-softmax损失如何让Deep SORT追得更准

余弦度量的魔力:cosine_metric_learning的cosine-softmax损失如何让Deep SORT追得更准

【免费下载链接】cosine_metric_learningDeep Cosine Metric Learning for Person Re-identification项目地址: https://gitcode.com/gh_mirrors/co/cosine_metric_learning

cosine_metric_learning是 Deep SORT 多目标跟踪器的官方配套训练项目,通过 cosine-softmax 余弦度量损失训练行人重识别特征网络,让目标跟踪在多摄像头、遮挡场景下"追得更准"。本文带你快速理解其原理,并跑通 Market1501 与 MARS 数据集的完整训练流程。

🎯 什么是 cosine_metric_learning?

一句话概括:它训练一个"会认人"的神经网络,并把它冻结成mars.pb供 Deep SORT 调用

在多目标跟踪中,当目标被遮挡几秒后再出现,跟踪器需要回答一个问题——"新出现的这个检测框,是不是刚才那个人?"答案就藏在**行人重识别(Person Re-identification)**特征里。本项目基于 2018 年 WACV 论文《Deep Cosine Metric Learning for Person Re-identification》,提供:

能力对应文件
3 种损失函数(cosine-softmax / magnet / triplet)train_app.py
Soft-margin 三元组损失与磁体损失实现losses.py
Deep SORT 残差骨干网络(ELU + 批归一化)nets/deep_sort/network_definition.py
余弦距离 / 平方距离度量与 CMC 指标metrics.py
异步队列训练器queued_trainer.py
Market1501 / MARS 数据集加载datasets/market1501.py、datasets/mars.py
训练与特征导出入口train_market1501.py、train_mars.py

🧮 核心原理:cosine-softmax 到底"余弦"在哪里?

传统 softmax 分类器只做"分对人",但特征向量的长度会不受控,导致推理时用欧氏距离比较时不稳定。cosine-softmax 的巧妙之处在于三点:

  1. L2 归一化特征:网络输出的特征先被归一化为单位向量(见 network_definition.py 中的l2_normalize),只保留"方向"、丢弃"长度";
  2. 球面原型(mean vectors):每个身份对应一个可学习的均值向量,同样被归一化到单位球面上;
  3. 可学习温度 scale:logits =scale × (特征 · 原型),即对余弦相似度乘以缩放系数。

这样一来,损失函数优化的目标等价于:同一人的特征方向聚拢、不同人的特征方向远离——正是余弦度量学习(Cosine Metric Learning)的定义。而 metrics.py 中的cosine_distance函数(余弦距离 = 1 − 余弦相似度)在评估 CMC 指标时与训练目标完全一致,实现"训练什么、就度量什么"。

💡 项目同时内置magnet(磁体损失)和triplet(软边界三元组损失,见 losses.py)作为对照基线,方便你用--loss_mode一键切换实验。

📦 项目结构与目录速览

cosine_metric_learning/ ├── train_market1501.py # Market1501 训练 / 评估 / 导出入口 ├── train_mars.py # MARS 训练 / 评估 / 导出入口 ├── train_app.py # 训练主循环、损失分发、模型冻结 ├── queued_trainer.py # 基于队列的异步数据训练器 ├── losses.py # 三元组损失、磁体损失 ├── metrics.py # 距离度量、CMC@k 流式指标 ├── vis_tools.py # t-SNE 特征可视化散点图 ├── datasets/ # Market1501 / MARS 数据读取 └── nets/deep_sort/ # Deep SORT 骨干网络定义

训练时每个身份固定采样 4 张图片(num_images_per_id=4),由 queued_trainer.py 的random_sample_identities_forever生成器无限循环取样,配合 10% 训练集留出做验证——这是行人重识别训练的标准配方。

🚀 快速上手:三步跑通 Market1501 训练

第 1 步:启动训练(默认即 cosine-softmax 损失)

python train_market1501.py \ --dataset_dir=./Market-1501-v15.09.15/ \ --loss_mode=cosine-softmax \ --log_dir=./output/market1501/ \ --run_id=cosine-softmax

第 2 步:TensorBoard 监控训练曲线

tensorboard --logdir ./output/market1501/cosine-softmax --port 6006

第 3 步:并行运行 CMC 评估(CPU 上阻塞等待 checkpoint)

CUDA_VISIBLE_DEVICES="" python train_market1501.py \ --mode=eval \ --dataset_dir=./Market-1501-v15.09.15/ \ --loss_mode=cosine-softmax \ --log_dir=./output/market1501/ \ --run_id=cosine-softmax \ --eval_log_dir=./eval_output/market1501

评估结果(Precision@1 / 5 / 10 / 20)会实时写入 TensorBoard,随时确认模型是否在变强。MARS 数据集的完整流程见 README.md,命令结构与 Market1501 完全一致。

🔌 模型导出:一行命令接入 Deep SORT

训练结束后,只需把 checkpoint 冻结为纯推理图:

python train_mars.py --mode=freeze --restore_path=PATH_TO_CHECKPOINT

生成的mars.pb可直接喂给 Deep SORT 跟踪器。同理,--mode=export能把测试集特征导出为.mat文件,配合数据集官方评测脚本完成最终测试(注意:评测侧需把最大池化换成平均池化并做二次归一化,与训练时的余弦度量对齐)。

❓ 常见问题

  • 为什么不用现成的 ImageNet 预训练特征?行人重识别跨摄像头分布差异极大,需要按身份监督训练度量空间,这正是 cosine-softmax 解决的问题。
  • 三种损失怎么选?论文结论是 cosine-softmax 最优且最稳;magnettriplet留作消融对比,切--loss_mode即可。
  • 如何验证特征学得好?vis_tools.py 提供 t-SNE 散点工具,把特征+小图拼成一张大图,肉眼可见"同一个人聚成一团"。
  • 预训练模型哪里找?论文配套的预训练模型下载地址与数据集说明均写在 README.md 中。

✅ 小结

cosine_metric_learning 用"单位球面上的余弦相似度"重新定义了行人重识别的训练目标,是 Deep SORT 能精准关联跨帧、跨摄像头检测的关键一环。理解它的三条主线——L2 归一化特征、球面原型、可学习温度——你就能举一反三地把它迁移到其他度量学习任务中。

【免费下载链接】cosine_metric_learningDeep Cosine Metric Learning for Person Re-identification项目地址: https://gitcode.com/gh_mirrors/co/cosine_metric_learning

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 11:31:05

一文看懂Awesome-LLM-Eval:大模型评测资源宝库里到底有什么?

一文看懂Awesome-LLM-Eval:大模型评测资源宝库里到底有什么? 【免费下载链接】Awesome-LLM-Eval Awesome-LLM-Eval: a curated list of tools, datasets/benchmark, demos, leaderboard, papers, docs and models, mainly for Evaluation on LLMs. 一个由…

作者头像 李华
网站建设 2026/9/2 10:08:38

codex技术发展应用及相关领域核心价值解析

文献综述是研究生科研中最耗时的环节之一,从确定研究主题、检索论文,到精读全文、整理观点和搭建框架,每一步都需要投入大量时间。现在,AI工具可以辅助完成资料整理、长文本阅读、代码分析和研究思路拓展。不同工具适合不同场景&a…

作者头像 李华
网站建设 2026/9/2 10:02:57

【信息科学与工程学】【产品体系】第五十五篇 产品需求建模 系列一 政企客户复杂业务场景03

基于《国民经济行业分类(GB/T 4754—2017)》的20个门类、97个大类框架,将A1(纵向权力配置:央地关系与层级制衡)从抽象的央地事权/财权,落地到各类政企行业的纵向治理与博弈场景。重点行业参考了能源、铁路、电信、水利、公用事业等领域"自然垄断环节独立运营和竞争…

作者头像 李华
网站建设 2026/9/2 14:57:22

5 分钟搞定 ncmdump:NCM 无损转 MP3 的免费本地教程

5 分钟搞定 ncmdump:NCM 无损转 MP3 的免费本地教程 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 歌拷进车载 U 盘,车机弹一句"格式无法识别"——卡住你的就是 .ncm,网易云的私有加密…

作者头像 李华
网站建设 2026/9/2 18:59:56

Hayagriva YAML文献格式详解:用parent层级告别字段爆炸的简单方法

Hayagriva YAML文献格式详解:用parent层级告别字段爆炸的简单方法 【免费下载链接】hayagriva Rusty bibliography management. 项目地址: https://gitcode.com/gh_mirrors/ha/hayagriva Hayagriva 是一款用 Rust 编写的开源文献管理工具,其核心的…

作者头像 李华