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-776
       Reference:
       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.3

loguru   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.

--resume:resume train

--freeze:freeze train

--freeze_epoch:freeze train epochs

配置文件的修改 

配置包含在两个目录文件中:

1.config/defaults.py为项目默认的配置文件

2.configs/下各yml文件为训练期间的配置文件

主要以yml配置文件为主,当两个配置文件参数名相同的时候以yml文件为主,这个需要注意一下。

configs文件:

softmax_triplet.yml为例:

SOLVER:
  OPTIMIZER_NAME: 'Adam' # 优化器
  MAX_EPOCHS: 120  # 总epochs
  BASE_LR: 0.00035
  IMS_PER_BATCH: 8  # batch
TEST:
  IMS_PER_BATCH: 4 # test batch
  RE_RANKING: 'no'
  WEIGHT: "path"  # test weight path
  FEAT_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/文件夹下。

中断后的继续训练或微调训练

如果训练意外终止,或者希望继续训练,可以适用本功能。只需要传入--resume参数即可

python tools/train.py --weights 【your weight path】 --resume

冻结训练

新增冻结训练,加快网络前期训练速度。

训练中只需传入:--freeze --freeze_epoch 20即可,其中--freeze表示是否开启冻结训练,--freeze_epoch是冻结训练后的epoch,这里默认为20,那么网络会在前20个epoch冻结训练,从21个epoch开始解冻训练

示例如下:

python tools/train.py --weights your weigt path --freeze --freeze_epoch 20

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实现的车辆重识别

以下更新部分有偿提供:

2024.3.18更新:增加训练过程中tensorboard可视化,包含(loss、acc、mAP、Rank、lr)曲线的可视化。 


相关数据指标 :

这里提供的是Baseline模型

Resnet50_ibn_a权重下载:

链接:https://pan.baidu.com/s/19Pzp0wkjClTaoHHYxZe6hQ 
提取码:yypn 

BaselinemAP
Resnet50_ibn_a80.6
Seresnet5073.4
mobileNetv271.8

Resnet50_ibn_a训练曲线图

tensorboard新增更新内容:增加hard sample可视化,效果如下图:

 


  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
您好!针对使用 YOLOv5 和 OpenCV 进行车牌识别的问题,我可以给出一些指导。 首先,您需要安装 YOLOv5 和 OpenCV。您可以在 GitHub 上找到 YOLOv5代码并进行下载。然后,使用 pip 命令安装 OpenCV。安装完成后,您可以开始使用这两个工具进行车牌识别。 下面是一个简单的步骤示例: 1. 导入所需的库: ```python import cv2 import torch from numpy import random from models.experimental import attempt_load from utils.general import non_max_suppression, scale_coords from utils.torch_utils import select_device ``` 2. 加载模型: ```python weights = 'path/to/your/yolov5/weights' device = select_device('') model = attempt_load(weights, map_location=device) stride = int(model.stride.max()) names = model.module.names if hasattr(model, 'module') else model.names colors = [[random.randint(0, 255) for _ in range(3)] for _ in names] ``` 3. 进行车牌识别: ```python img = cv2.imread('path/to/your/image') img = cv2.resize(img, (640, 640)) # 图像大小可以根据需求进行调整 img = torch.from_numpy(img.transpose(2, 0, 1)).float().div(255.0).unsqueeze(0) pred = model(img)[0] pred = non_max_suppression(pred, 0.4, 0.5) for det in pred: if len(det): det[:, :4] = scale_coords(img.shape[2:], det[:, :4], img.shape[2:]).round() for *xyxy, conf, cls in reversed(det): label = f'{names[int(cls)]} {conf:.2f}' plot_one_box(xyxy, img, label=label, color=colors[int(cls)], line_thickness=3) cv2.imshow('Result', img) cv2.waitKey(0) ``` 上述代码中,您需要将路径替换为您的 YOLOv5文件和车牌图像的路径。代码会加载模型并对图像进行预测,最后将结果显示出来。 当然,这只是一个简单的示例,您可以根据自己的需求进行更多的定制和优化。希望对您有所帮助!如有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃肉的鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值