FastReID使用教程、踩坑记录

近期在尝试使用FastReID,期间对FastReID架构、损失函数、数据集准备、模型训练/评估/可视化/特征向量输出、调试debug记录等进行记录。

FastReID架构理解

关于FastReID的介绍,可点击此链接前往查询。

ReID和FastReID架构

对于模型架构、损失函数、实验Tricks可点击访问下述两个链接:

行人重识别02-03:fast-reid(BoT)-白话给你讲论文-翻译无死角_reid bot算法-CSDN博客
详解ReID的各部分组成及Trick——基于FastReID_fastreid trick-CSDN博客

ReID网络训练和测试的输出不同

注:ReID网络训练和测试的输出不同:训练的输出执行到最后一步,进行Triplet loss+Center loss+ID lossID损失函数的计算并反向梯度传播,从而迭代更新网络参数;测试inference阶段只执行到特征向量的输出(可见上图inference stage),这也对应后文的demo.py脚本所执行的操作。

一般神经网络训练和测试的输出是同一个东西,但是基于表征学习的ReID方法比较特殊:ReID训练时候的输出是每张图片对应不同ID的预测概率(也就是输出此图片识别的ID/类别),测试模式输出的是每张图片ReID的特征向量(比如对于多个摄像头,用不同摄像头检测到的多个物体进行ReID后的特征向量进行后续运算,特征向量相似的给定同一个ID,ReID测试网络不直接输出识别的ID/分类)

损失函数

笔者没有扒源代码,但从上图FastReID架构可以看出,其损失函数有三部分组成:Triplet loss + Center loss + ID loss。其中Triplet loss和Center loss属于基于度量学习的ReID方法范畴,因为其度量的是特征向量的距离/相似度;ID loss属于基于表征学习的ReID方法范畴,类似softmax层后的分类损失。

Triplet loss和Cicle loss

数据集准备

复制数据集到fast-reid\datasets下

用户自定义数据集训练参考:

How to train Custom Dataset · Issue #220 · JDAI-CV/fast-reid (github.com)

模型训练

直接训练

键入:

python tools\train_net.py --config-file .\configs\VeRi\sbs_R50-ibn.yml

使用预训练模型权重训练

键入:

python tools\train_net.py --config-file .\configs\VeRi\sbs_R50-ibn.yml MODEL.WEIGHTS model_weights/veri_sbs_R50-ibn.pth

下载地址:

在fast-reid/MODEL_ZOO.md文件下提供了不同数据集下不同方法得到的sota模型。

不同数据集训练权重下载

增加预训练模型权重地址

.yml文件增加中文注释

修改:注释不能写中文,否则会报错

.yml文件增加中文注释报错

.yml文件去除中文注释

模型评估eval-only

键入:

python tools/train_net.py --config-file .\logs\veri\sbs_R50-ibn\config.yaml --eval-only MODEL.WEIGHTS model_weights/veri_sbs_R50-ibn.pth  MODEL.DEVICE "cuda:0"

模型评估

细节理解:

行人重识别02-09:fast-reid(BoT)-pytorch编程规范(fast-reid为例)6-模型测试评估-1_rexnet fast-reid-CSDN博客

fastreid\engine\defaults.py,找到类class DefaultTrainer(SimpleTrainer) 中的函数 def test(self),该函数就是对数据进行评估的总体逻辑。

对datasets.test进行评估。

结果可视化

visualize_result.py 可视化结果

参考理解:

行人重识别02-11:fast-reid(BoT)-实用技巧分享(1)-visualize_result,demo_visualize_result.py 特征距离约大-CSDN博客

键入:

python demo/visualize_result.py --config-file .\logs\veri\sbs_R50-ibn\config.yaml --parallel --vis-label  --output logs/mgn_duke_vis --dataset-name VeRi --opts MODEL.WEIGHTS .\model_weights\veri_sbs_R50-ibn.pth

行人识别fastreid项目官方数据训练测试 - 知乎 (zhihu.com)

文件生成在logs/mgn_duke_vis

结果可视化,别人训练好的结果,可对照理解图片上方的参数

结果可视化,自己尝试的结果(没训练,加载的权重也不对,所以这个图并不对)

为何识别效果如此之差呢,查看下图报错信息,因为下载的预训练权重不包含head.weights,因此要用上还是需要重新train一下,但是我理解的是这并不会影响demo.py输出的特征向量,因为那个不需要用到head.weights。

visualize_result.py加载预训练权重情况

demo.py 输出query图片的特征向量

针对某一张图片

键入:

python demo/demo.py --config-file .\logs\veri\sbs_R50-ibn\config.yaml  --parallel  --input .\datasets\VeRi\image_query\xx.jpg --output ./logs/demo_output --opts MODEL.WEIGHTS .\model_weights\veri_sbs_R50-ibn.pth

在./logs/demo_output/文件夹下,可以看到如下特征向量文件(.npy格式)

注:以下示例只对.\datasets\VeRi\image_query文件夹下的两张图片进行操作出,所以示例只有2个.npy文件。执行--input .\datasets\VeRi\image_query\*.jp,文件夹中有几张图片,输出几个特征向量(每个的尺寸为:1x2048)。

特征向量输出

针对指定文件夹下的所有jpg图片

键入:

python demo/demo.py --config-file .\logs\veri\sbs_R50-ibn\config.yaml  --parallel  --input .\datasets\VeRi\image_query --output ./logs/demo_output --opts MODEL.WEIGHTS .\model_weights\veri_sbs_R50-ibn.pth

输出结果为:

特征向量输出

调试debug

CUDA out of memory

要修改Batch size或者输入图片尺寸,具体修改config文件夹下:

sbs_R50-ibn.yml文件中的IMS_PER_BATCH、SIZE_TRAIN

Base-SBS.yml中的NUM_INSTANCE

ZeroDivisionError: integer division or modulo by zero

这里要保证num_pids_per_batch不为0,也就是说sbs_R50-ibn.yml文件中的IMS_PER_BATCH要大于Base-SBS.yml中的NUM_INSTANCE

报错提示

理解:

给定batch size,随机采集P个ID,然后每个ID选择K(num_instances)个实例图像。

num_pids_per_batch = batch_size // self.num_instances指每个batch需要采集多少个(P个)身份ID,因此num_pids_per_batch必须大于1.

ReID中的Batch Size设置与其他的深度学习任务有一些区别,它涉及到两个参数P(一个batch中涉及到的不同类别的样本数量)和K(一个batch中涉及到的同一个类别的样本的样本数量)。在BoT的工作中,对Batch Size的大小和P、K的设置做了探究,实验如下表,不同的数值对最终的实验结果还是有很大的影响的。

Batch size中P、K探究实验

理论理解可点击链接,前往b站查看。

Triplet loss理解

AssertionError: No inf checks were recorded for this optimizer.

报错提示

问题解决可参考:

No inf checks were recorded for this optimizer. · Issue #700 · JDAI-CV/fast-reid (github.com)

解决办法1:

在defaults.py文件中增加 contiguous=False

解决办法2:

安装低版本的Pytorch,未实践。

tools/train_net.py --eval-only报错no module

解决方法1:编译make

使用eval前要先编译make(核心是文件夹下的makefile文件),而make需要gcc

可查询本人之前文章链接,查询Windows具体编译makefile文件流程。

GettingStarted文档编译要求

在windows下,用MinGW代替gcc,可参考:

Windows安装g++和gcc,含环境变量配置(图文教程)_windows系统 gcc g++-CSDN博客

修改makefile文件,否则一直报错:

  1. 将python3改为python
  2. 去掉rm这句话,因为不是linux系统,没这个命令,可改为del

原makefile文档

修改后的makefile文档

虽然编译成功,但后续运行还是会报错,ValueError: Buffer dtype mismatch, expected 'long' but got 'long long' · Issue #74 · JDAI-CV/fast-reid (github.com),可能需要在linux下编译才行(我的wsl没装Cython.Build,故放弃了此方法,后续可以在wsl下安装pip、Cython,然后执行python setup.py build_ext --inplace)。

成功编译后仍报错

解决方法2:不使用cython

No module named ‘fastreid.evaluation.rank_cylib.rank_cy‘_no module named 'fastreid-CSDN博客

如果成功make,不需要注释此处

将use_cython改为False,虽然速度变慢,但解决了很多麻烦

demo.py--input .\*.jpg 报错

当键入下式,会报错:

python demo/demo.py --parallel  --input .\datasets\VeRi\image_query\*.jpg

报错提示

究其原因,是因为在demo.py原代码中,args.input为\image_query\*.jpg,无法使用for path in args.input,无法遍历此文件夹下的所有jpg图片。

原文件demo.py

因此,更改代码的if else逻辑,实现需求。

修改后的文件

注:目前代码仅可以遍历所有jpg文件,对于png文件的话需要改动上图line 95。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/610786.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙ArkUI-X跨平台开发电商应用

一、ArkUI-X 简介 ArkUI-X 是由 OpenHarmony TSC - 跨平台应用开发框架 TSG 所孵化的开源项目,使用ArkUI-X可以让开发者基于一套主代码, 就可以构建支持多平台的精美、高性能应用。目前支持OpenHarmony、HarmonyOS、Android、 iOS,后续会逐步增加更多平台支持。 ArKUI跨平台…

Smma-net:一种基于音频线索的目标说话人提取网络,具有谱图匹配和相互关注功能

SMMA-NET: AN AUDIO CLUE-BASED TARGET SPEAKER EXTRACTION NETWORK WITH SPECTROGRAM MATCHING AND MUTUAL ATTENTION 第二章 目标说话人提取之《Smma-net:一种基于音频线索的目标说话人提取网络,具有谱图匹配和相互关注功能》 文章目录 SMMA-NET: AN AUDIO CLUE-…

星途重启:244亿公里外的「旅行者1号」,修好了

2024年4月20日,旅行者1号工程团队时隔5个月,终于重新收到了来自47年前所发射的探测器传回的有效数据。 ▲收到数据当天,工程团队成员在NASA喷气动力实验室的会议室中欢呼。 01.关于旅行者1号 在当下5G和WIFI已经普及的时代,NASA喷…

力扣2105---给植物浇水II(Java、模拟、双指针)

题目描述: Alice 和 Bob 打算给花园里的 n 株植物浇水。植物排成一行,从左到右进行标记,编号从 0 到 n - 1 。其中,第 i 株植物的位置是 x i 。 每一株植物都需要浇特定量的水。Alice 和 Bob 每人有一个水罐,最初是…

debian testing (预计13版本)wps字体无法正常显示

背 景 本人使用debian办公,原来使用的是debian 12,由于“生命不息,折腾不止“,终于将稳定版的debian 12升级为testing. 结果发现,debian 12能够正常使用的wps存在部分字体无法正常显示,经研究发现,原来是w…

The Sandbox 与 Cuisinia 合作推出全新体验!

与 Cuisinia 一起吃 Voxel! 召唤所有美食家和游戏玩家!准备好在 Cuisinia x The Sandbox Moodie 挑战赛中挑逗你的味蕾,考验你的技能!加入我们的美味探险,品尝充满活力的泰国美食。 为什么选择 Cuisinia? …

图像锐化——非锐化掩膜USM和锐化掩膜SM(附代码)

非锐化掩膜 (USM) 和锐化掩膜 (SM) 都是常用的图像锐化技术。它们都可以通过增强图像的边缘信息来提高图像的清晰度。 目录 一、非锐化掩膜USM1.1 USM原理1.2 USM实现步骤1.3 优点1.4 代码 二、锐化掩膜SM2.1 SM原理2.2 SM实现步骤2.3 优点2.4 代码 三、锐化效果四、总结4.1 效…

vue 代码样式问题

部分电脑存在样式错乱问题&#xff0c;部分电脑样式正常。最后发现是样式写在 el-col 里面导致的。 注意&#xff1a;写样式不要放在 el-row 或者 el-row &#xff0c;导致部分电脑会出现莫名其妙的样式问题 <el-row class"detail"><el-col class"it…

在RK3588开发板使用FFMpeg 结合云服务器加SRS实现摄像头数据推流到云端拱其他设备查看

今天测试了一把在开发板把摄像头数据推流到云端服务器&#xff0c;然后给其他电脑通过val软件拉取显示摄像头画面&#xff0c;浅浅记录一下大概步骤 1.开发板端先下载ffmpeg apt install ffmpeg2.云服务器先安装SRS的库 云服务器我使用ubuntu系统&#xff0c;SRS是个什么东西&…

扫码查看文件是如何实现的?文件活码在线生成的方法

现在很多场景下会通过扫码的方式来查看文件&#xff0c;这种方式可以让更多的人同时通过扫码的方式来查看二维码&#xff0c;有利于文件的快速分享以及用户获取内容的个人体验&#xff0c;而且可以保护文件的安全性&#xff0c;那么如何制作文件二维码呢&#xff1f; 文件二维…

车辆管理|基于SprinBoot+vue的4S店车辆管理系统(源码+数据库+文档)

4S店车辆管理系统 目录 基于SprinBootvue的4S店车辆管理系统 一、前言 二、系统设计 三、系统功能设计 系统实现 1管理员功能模块 2销售员功能模块 3维修员功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xf…

傻傻分不清楚:JDK/JRE/JVM的区别和联系

在Java开发的世界里&#xff0c;JDK、JRE和JVM是三个经常听到的术语。 对于初学者来说&#xff0c;它们的概念和区别可能会让人感到困惑。 这篇文章详细解释下三个组件的含义、它们之间的区别和联系。 一&#xff0c;JDK&#xff1a;Java Development Kit JDK是Java开发工具…

k8s个人认知理解

pod的定义 pod里面有容器&#xff0c;所以pod就是一个容器组&#xff0c;一个pod里面可以有多个容器也可以有一个容器&#xff0c;最低只能有一个容器&#xff0c;目前现在主流使用的都是一个pod里面一个容器&#xff0c;同一个pod里面的容器&#xff0c;需要紧耦合。配置文件…

重学java 35.API 6.包装类

心有所念&#xff0c;必有所灵 —— 24.5.10 一、基本数据类型对应的引用数据类型(包装类) 1概述 就是基本类型所对应的类&#xff08;包装类&#xff09;&#xff0c;我们需要将基本类型转为包装类&#xff0c;从而让基本类型拥有类的特性&#xff08;是基本类型可以使用包装类…

Excel操作之工具类

需求&#xff1a;根据指定的路径下模版进行解析 将模版上传到指定的文件服务器。 1&#xff1a;将路径下的excel文件进行解析 下载 A:创建excel表格对应的字段注解 ExcelColumn Retention(RetentionPolicy.RUNTIME) Target(ElementType.FIELD) public interface ExcelColumn …

milvus元数据在etcd的存储解析

milvus元数据在etcd的存储解析 数据以key-value形式存在。 大致包含如下一些种类: databasecollectionfieldpartitionindexsegment-indexresource_groupsession database 创建一个数据库会产生2个key&#xff0c;但value是相同的。 key规则: 前缀/root-coord/database/db…

【SRC实战】利用APP前端加密构造数据包

挖个洞先 https://mp.weixin.qq.com/s/ZnaRn222xJU0MQxWoRaiJg “ 以下漏洞均为实验靶场&#xff0c;如有雷同&#xff0c;纯属巧合” 01 — 漏洞证明 “ 参数加密的情况&#xff0c;不会逆向怎么办&#xff1f;” 1、新用户首次设置密码时抓包&#xff0c;此处设置为0000…

设计合理的IT运维服务目录:打造高效运维的蓝图

在数字化转型的浪潮中&#xff0c;一个设计合理、内容详尽的IT运维服务目录是连接服务提供者与消费者之间的桥梁&#xff0c;它不仅体现了服务设计的专业性&#xff0c;还直接影响着运维效率和服务质量。如何设计出既合理又高效的IT运维服务目录&#xff1f;让我们结合ITIL 4框…

Modown9.1主题无限制使用+Erphpdown17.1插件

Modown9.1主题无限制使用 1、Erphpdown17.1插件Modown9.1主题 2、送Modown主题详细教程。 1、Erphpdown插件和Modown主题无需激活 2、送的插件均无需激活 3、主题插件均不包更新 4、已亲测可以完美使用。 功能强大&#xff0c;适用于绝大多数虚拟资源站&#xff01;物超所值&a…

分布式光伏管理平台功能介绍

一、项目管理系统 1、关键信息&#xff1a;板块化展现项目关键信息&#xff0c;包含所在区域、屋面类型、未来25年发电量、累计收益等信息。 (1) 可迅速获取项目核心要点 (2) 及时跟进修改&#xff0c;凸显项目信息 (3) 项目信息清晰展现&#xff0c;了解整体项目流程 2、项…
最新文章