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

    目标车辆的检索

     


    项目完整代码

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

     

  • 相关阅读:
    Java案例:利用dom4j解析XML文件
    使用java解析hashMap
    黑马JVM总结(十三)
    计算机毕业设计Python+djang的疫情数据可视化分析系统(源码+系统+mysql数据库+Lw文档)
    什么是哈希算法?什么是哈希冲突以及怎样解决哈希冲突?
    操作系统-(第一章上)
    【Spring进阶系列丨第二篇】Spring中的两大核心技术IoC(控制反转)与DI(依赖注入)
    算法小白的心得笔记:关于Nan
    【算法挨揍日记】day09——704. 二分查找、34. 在排序数组中查找元素的第一个和最后一个位置
    Linux环境下测试服务器的DDR5内存性能
  • 原文地址:https://blog.csdn.net/z240626191s/article/details/133840737