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.

配置文件的修改 

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

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/文件夹下。


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路径。

yolov5+车辆重识别【附代码】_第1张图片 目标车辆的检索

 


项目完整代码

GitHub - YINYIPENG-EN/yolov5_vehicle_reid: yolov5+reid实现的车辆重识别

 

你可能感兴趣的:(Reid,YOLO,人工智能,reid)