yolov5+车辆重识别【附代码】
本篇文章主要是实现的yolov5和reid结合的车辆重识别项目。是在我之前实现的yolov5_reid行人重识别的代码上修改实现的baseline模型。
目录
相关参考资料
数据集说明
环境说明
项目使用说明
vehicle reid训练
yolov5车辆重识别
从视频中获取想要检测的车(待检测车辆)
车辆查找
项目完整代码
相关参考资料
涉及到的相关资料如下:
参考的reid论文:Bag of Tricks and A Strong Baseline for Deep Person Re-identification(这应该是一篇19年的论文,可能稍微比较早了,但很有参考价值)
Reid代码详解:Reid strong baseline 代码详解
Reid之网络的定义:Reid之网络的定义代码详解
Reid训练代码之数据集处理:Reid训练代码之数据集处理
Reid损失函数理论学习:Reid损失函数理论学习
Reid度量学习Triplet loss:Reid度量学习之Triplet loss
yolov5_行人重识别:yolov5_行人重识别
数据集说明
数据集采用的是veri数据集,该数据集的格式与markt1501类似。
%******************************************************************************************************************% VeRi-776Reference:Liu, Xinchen, et al. "Large-scale vehicle re-identification in urban surveillance videos." ICME 2016.URL:https://vehiclereid.github.io/VeRi/Dataset statistics:# identities: 776# images: 37778 (train) + 1678 (query) + 11579 (gallery)# cameras: 20 %******************************************************************************************************************%%%%%%% Content in the Zip file%%%%%%%%%% 1. "image_test" file. This file contains 11579 images for testing. 2. "image_train" file. This file contains 37778 images for training. 3. "image_query" file. It contains 1678 query images. Search is performed in the "image_test" file.
环境说明
torch >= 1.7.0
torchvision >=0.8.0
opencv-python 4.7.0.72
opencv-python-headless 4.7.0.72
numpy 1.21.6
matplotlib 3.4.3loguru 0.5.3
项目使用说明
该训练reid项目中vehicle_search与_search项目是独立的!!训练完reid后,把训练好的权重放到 vehicle_search/weights下,切换到vehicle_search_search项目中在去进行reid识别【不然有时候会报can't import xxx】。
项目仅包含reid的训练,不包含yolov5的训练,可以直接把yolov5的权重拿来用即可。
vehicle reid训练
将预权重下载后放置下项目weights中。
数据集放置在data/下,目录如下:
data/veri
|-- image_query
|-- image_test
|-- image_train
训练预权重下载链接:
将 r50_ibn_2.pth,resnet50-19c8e357.pth放在yolov5_vehicle_reid/weights下
链接:百度网盘 请输入提取码 提取码:yypn
train.py中的训练参数:
参数说明:
--config_file: 配置文件路径,默认configs/softmax_triplet.yml
--weights: Reid pretrained weight path
--neck: If train with BNNeck, options: bnneck or no
--test_neck: BNNeck to be used for test, before or after BNNneck options: before or after
--model_name: Name of backbone.
--pretrain_choice: Imagenet
--IF_WITH_CENTER: us center loss, True or False.
配置文件的修改
配置包含在两个目录文件中:
1.config/defaults.py为项目默认的配置文件
2.configs/下各yml文件为训练期间的配置文件
主要以yml配置文件为主,当两个配置文件参数名相同的时候以yml文件为主,这个需要注意一下。
configs文件:
以softmax_triplet.yml为例:
SOLVER:OPTIMIZER_NAME: 'Adam' # 优化器MAX_EPOCHS: 120 # 总epochsBASE_LR: 0.00035IMS_PER_BATCH: 8 # batch TEST:IMS_PER_BATCH: 4 # test batchRE_RANKING: 'no'WEIGHT: "path" # test weight pathFEAT_NORM: 'yes' OUTPUT_DIR: "/logs" # model save path
训练命令:
python tools/train.py --weights 【预权重路径】--config_file configs/softmax_triplet.yml MODEL.DEVICE_ID "('0')" DATASETS.NAMES "('veri')" DATASETS.ROOT_DIR "(r'./data')
训练的权重会保存在logs/文件夹下。
yolov5车辆重识别
该项目可用于做reid识别,可用于做跨视频车辆识别
reid网络采用resnet50_ibn_a(权重需要和defaults.py中的MODEL.NAME对应),支持se_resnext50网络。权重见文末百度盘链接。
🔌注意:
该项目没有将yolov5训练加入,只是将检测功能和reid进行了整理。
vehicle_search下只进行检测,不进行reid的训练,reid的训练在yolov5_vehicle_reid中。
从视频中获取想要检测的车(待检测车辆)
python get_query.py
可从弹出的视频中利用鼠标框选待检测的车辆。
操作方法:
运行程序后用鼠标左键从目标左上角进行框选,按“空格”键继续播放视频(会自动把框选的图像进行保存)
该车辆图像会保存在query文件夹中,默认命名格式为veri。
ps:也可以直接将图像放在query文件中,但名字也需要按veri命名。
车辆查找
权重下载:
检测:将 训练好的reid权重放在👂vehicle/weights文件下,yolov5s.pt放vehicle_search下
链接:百度网盘 请输入提取码 提取码:yypn
修改reid/config/defaults.py中的_C.TEST.WEIGHT为reid权重路径
参数说明:
--weights: yolov5权重路径
--source: video/file/ path
--data: data/coco128.yaml
--imgsz: 输入图像大小,默认(640,640)
--conf_thres:置信度阈值
--iou_thres:iou阈值
--classes:过滤的类
--half:半精度推理
--dist_thres:reid对比的距离阈值(小于该阈值判断为同一个车)
--save_res:保存视频图像
python search.py --weights yolov5s.pt --source car.mp4 --dist_thres 1
如果需要检测视频或者多视频(跨视频检测),需要指定source路径。
项目完整代码
GitHub - YINYIPENG-EN/yolov5_vehicle_reid: yolov5+reid实现的车辆重识别
相关文章:
yolov5+车辆重识别【附代码】
本篇文章主要是实现的yolov5和reid结合的车辆重识别项目。是在我之前实现的yolov5_reid行人重识别的代码上修改实现的baseline模型。 目录 相关参考资料 数据集说明 环境说明 项目使用说明 vehicle reid训练 yolov5车辆重识别 从视频中获取想要检测的车(待检测车辆) 车…...
C语言练习百题之#ifdef和#ifndef的应用
#if, #ifdef, 和 #ifndef 是C语言预处理指令,它们可以用于条件编译,帮助控制程序的编译过程。以下是各种应用场景以及一些注意事项: 1. 使用 #ifdef 和 #ifndef 检查宏是否定义: 应用场景: 检查宏是否已经在代码中定义…...
与C语言不同的基础语法
一、不同 1.可同时定义并初始化多个变量 2.有string字符串类型 3.可在循环中定义变量 #include<iostream> using namespace std; int main() {int a1,b2;//可同时定义并初始化多个变量string name;//字符串类型 char array[3]; for(int i1;i<3;i)//for中定义i变量…...
Python文件读写实战:处理日常任务的终极工具!
更多资料获取 📚 个人网站:涛哥聊Python Python文件的读写操作时,有很多需要考虑的细节,这包括文件打开方式、读取和写入数据的方法、异常处理等。 在本文中,将深入探讨Python中的文件操作,旨在提供全面的…...
思维模型 秩序
本系列文章 主要是 分享 思维模型,涉及各个领域,重在提升认知。秩序是事物正常运行的基石。有序的安排是成功的先决条件。 1 秩序的应用 1.1 秩序在不同科学领域中的应用 物理学和天文学: 物理学家通过研究原子和分子的有序排列来理解物质的…...
pyqt5移动鼠标时显示鼠标坐标
问题: 只有按住鼠标左键或者右键移动的时候才会获取坐标值,即使对QLabel控件使用setMouseTracking(True)也无法解决。 解决方法: 在初始化构造函数中加入 self.setMouseTracking(True) self.centralwidget.setMouseTracking(True) 并且对…...
分享一下开发回收废品小程序的步骤
随着人们环保意识的不断提高,回收利用已成为日常生活中不可或缺的一部分。回收小程序作为一种便捷、高效的回收方式,越来越受到人们的关注和喜爱。本文将探讨回收小程序的意义和作用,设计理念、功能特点、使用流程以及推广策略,并…...
568A和568B两种线序
现状 现在大家都是采用568B的线序 线序 标准568A:橙白-1,橙-2,绿白-3,蓝-4,蓝白-5,绿-6,棕白-7,棕-8 标准568B:绿白-1,绿-2,橙白-3&#x…...
kafka广播消费组停机后未删除优化
背景 kafka广播消息的时候为了保证groupId不重复,再创建的时间采用前缀时间戳的形式,这样可以保证每次启动的时候是创建的新的,但是 会出现一个问题:就是每次停机或者重启都会新建一个应用实例,关闭应用后并不会删除…...
深度学习自学笔记十三:unet网络详解和环境配置
一、unet网络详解 UNet(全名为 U-Net)是一种深度学习架构,最初由Olaf Ronneberger、Philipp Fischer和Thomas Brox于2015年提出,用于图像分割任务。该网络的名称来源于其U形状的架构,该架构使得网络在编码和解码过程中…...
如何给苹果ipa和安卓apk应用APP包体修改手机屏幕上logo图标iocn?
虽然修改应用文件图标是一个简单的事情,但是还是有很多小可爱是不明白的,你要是想要明白的话,那我就让你今天明白明白,我们今天采用的非常规打包方式,常规打包方式科技一下教程铺天盖地,既然小弟我出马&…...
复旦MBA魏文童:构建完备管理知识体系,助力企业数字化发展
日月光华,旦复旦兮!复旦MBA如同一个巨大的磁场,吸引了诸多来自五湖四海、各行各业的职场精英。从初入职场的青涩懵懂到如今的独当一面专业干练,他们逐渐成长为职场的中坚力量,在各自领域内发光发热。作为新时代的青年&…...
【算能】在Docker中调用PCIe卡
开发需求,需要在centos下开发对应的内容 首先拉取docker 镜像 docker pull centos:centos7 然后在空白的centos容器下使用PCIe卡,这个部分特别提醒,需要挂载/dev的这个目录,才能读到内容,故而创建docker的命令 dock…...
【MySQL】表的查询与连接
文章目录 预备工作一、表的基本查询1、简单基本查询2、分组聚合统计3、基本查询练习 二、表的复合查询1、多表查询2、子查询2.1 **单行子查询**2.2 **多行子查询**2.3 **多列子查询**2.4 在from子句中使用子查询 3、合并查询 三、表的连接1、自连接2、内连接3、外连接 预备工作…...
AtCoder Beginner Contest 324(F)
AtCoder Beginner Contest 324 F Beautiful Path 需要一点思维的转化,一时竟然没想到。 题意 给定大小为 n n n 的有向图, m m m 条边,每条边有 b i , c i b_i,c_i bi,ci 两个属性,需要找到一条从 1 ∼ n 1\sim n 1∼n…...
LuatOS-SOC接口文档(air780E)-- i2s - 数字音频
示例 -- 这个库属于底层适配库, 具体用法请查阅示例 -- demo/multimedia -- demo/tts -- demo/record常量 常量 类型 解释 i2s.MODE_I2S number I2S标准,比如ES7149 i2s.MODE_LSB number LSB格式 i2s.MODE_MSB number MSB格式,比如TM8211 …...
瑞芯微RK3568核心板在边缘服务器产品中的应用-迅为电子
迅为RK3568核心板在边缘服务器产品中可以发挥关键作用,为边缘计算应用提供高性能的计算和多媒体处理能力。边缘服务器通常用于处理和存储数据,执行本地计算任务,并支持与远程云服务的通信。以下是RK3568核心板在边缘服务器产品中的应用方案&a…...
pg ash自制版 pg_active_session_history
一、 实现功能 由于pgsentinel插件存在严重的内存占用问题,本篇改为自行实现,但其语句仍可以参考pgsentinel插件。PostgreSQL ash —— pgsentinel插件 学习与踩坑记录_CSDN博客 v1.0 根据pg 14版本设计及测试,仅支持收集主库信息。默认每10秒…...
Elasticsearch系列组件:Kibana无缝集成的数据可视化和探索平台
Elasticsearch 是一个开源的、基于 Lucene 的分布式搜索和分析引擎,设计用于云计算环境中,能够实现实时的、可扩展的搜索、分析和探索全文和结构化数据。它具有高度的可扩展性,可以在短时间内搜索和分析大量数据。 Elasticsearch 不仅仅是一个…...
phpcms_v9模板制作及二次开发常用代码
0:调用最新文章,带所在版块 {pc:get sql"SELECT a.title, a.catid, b.catid, b.catname, a.url as turl ,b.url as curl,a.id FROM v9_news a, v9_category b WHERE a.catid b.catid ORDER BY a.id DESC " num"15" cache"300"} {lo…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
