电动车、电单车入梯数据集&电动车进电梯检测识别(代码+教程+数据集)

数据集介绍

共有 5347 张图像和一一对应的标注文件

标注文件格式提供了两种,包括VOC格式的xml文件和YOLO格式的txt文件。

标注的对象共有以下几种:

['Electric-bicycle']

标注框的数量信息如下:(标注时一般是用英文标的,括号里提供标注对象的中文作为参考)

Electric-bicycle: 5366 (电梯电动车)

注:一张图里可能标注了多个对象,所以标注框总数可能会大于图片的总数。

完整的数据集,包括3个文件夹和一个txt文件:


代码使用说明

本项目用于识别电梯监控视角内的电动车以及自行车。提供了基于检测的方法与基于跟踪的方法。基于检测的方法会对检测到有目标实例的每一帧返回标注图像, 基于跟踪的方法则在此基础上进行了去重。

运行环境:

sh 复制代码
conda  activate  yolo

预训练模型

对yolov5s进行了微调,以增加在电梯视角下识别的准确率。

模型路径runs/train/exp8/weights/best.pt

可识别类别: 电动车(类别号1),自行车(类别号2),行人(类别号4)

基于检测的方法

运行 detect_ebike.py 文件,

detect_ebike.py中提供的EbikeDetection类,用于检测电动车以及自行车。

python 复制代码
class EbikeDetection(): 
    def __init__(self,model_path = 'runs/train/exp8/weights/best.pt',classes = [1,2],device=0,conf_thresh = 0.25,view_img = False):
        '''
        params: 
            model_path: 预训练模型路径,为字符串输入
            classes: 检测类别,为列表。默认检测[1,2]为电动车与自行车。
            device: 所使用的GPU编号。
            conf_thresh: 检测的置信度。可以控制只保留置信度高于阈值的检测结果,过滤掉置信度较低的结果。通过调整conf_thresh的值,可以灵活地控制检测结果的准确性和召回率。较高的阈值会过滤掉置信度较低的检测结果,可以提高准确性但可能会降低召回率;较低的阈值会保留更多的检测结果,可以提高召回率但可能会降低准确性。
            view_img: 是否实时显示图像,调试时使用,默认为False。
        '''
    def detect_one_frame(self, frame):
        '''
        执行检测的主函数,仅当检测结果不为空时返回标注后的图像,否则返回None。
        '''
  • 使用方法
  1. 创建检测实例

    python 复制代码
    detecting_ebike = EbikeDetection(model_path = 'runs/train/exp2/weights/best.pt',classes = [1,2],device=0,conf_thresh = 0.25,view_img = False)

    可全部使用默认参数 detecting_ebike = EbikeDetection()

  2. 逐帧识别图像:

    使用时调用detecting_ebike.detect_one_frame()函数。

    python 复制代码
    result = detecting_ebike.detect_one_frame(frame)

    frame为从rtsp流/视频文件/图像文件等中截取的一帧图像。

    当检测结果不为空时,返回标注好的图像,否则返回None。

  • 示例

    detect_ebike.py文件中提供了三个示例函数运行,分别接收 rtsp流/视频文件,文件夹,以及单帧图像作为输出。
    rtsp流/视频文件:

    python 复制代码
    def test_rtsp(rtsp_url,save_path,frame_interval = 1):
        '''
        rtsp_url: rtsp流地址。
        save_path: 结果文件存储路径,存储所有检测结果不为空的标注图像,用于调试。
        frame_interval: 间隔多少帧进行检测。
        '''

文件夹:

python 复制代码
def test_folder(folder_path, save_path,frame_interval =1):
    '''
    folder_path: 存储测试图像的文件夹,默认其中的所有文件为图像格式。
    其余同test_rtsp函数。
    '''

单帧图像:

python 复制代码
def test_img(img_path, save_path):

Note

detect_ebike.py文件默认执行test_folder函数,test_sample提供了少许测试图像。

parse_opt()函数用以命令行接收EbikeDetection类的初始化参数,用以测试时使用。初始化参数可不作修改。

基于跟踪的方法

基于跟踪的方法不会对检测到的每一帧返回标注图像,只会在检测到新的实例后返回标注图像。

具体可见
track_ebike.py 文件。定义了EbikeTracking类用以跟踪检测对象,使用方法与基于检测的方法类似,可均使用默认参数。

python 复制代码
tracking_ebike = EbikeTracking(weights='runs/train/exp8/weights/best.pt',imgsz=(640, 640),classes=[1,2],config_deepsort="deep_sort_pytorch/configs/deep_sort.yaml",device='cuda:0',conf_thres = 0.25, iou_thres = 0.45, view_img = False)
# 默认参数: tracking_ebike = EbikeTracking()
'''
config_deepsort: 追踪模型配置文件路径
iou_thres: 
   用于设置在目标跟踪中的IoU(Intersection over Union)阈值。IoU是一种衡量两个边界框重叠程度的度量指标。在目标跟踪中,当两个边界框的IoU大于等于设定的阈值时,认为这两个边界框表示同一个目标。
   具体来说,当进行目标跟踪时,系统会根据当前帧中的检测结果和前一帧中已经跟踪的目标,通过计算当前帧中每个检测结果与已跟踪目标的IoU,来判断是否将其归为同一个目标。如果当前帧中某个检测结果与已跟踪目标的IoU大于等于设定的阈值(iou_thresh),则将其归为同一个目标,否则将其视为新的目标。
其余同检测模型参数。
'''
result = tracking_ebike.track_one_frame(frame)

识别示例结果:

相关推荐
这个男人是小帅21 分钟前
【GAT】 代码详解 (1) 运行方法【pytorch】可运行版本
人工智能·pytorch·python·深度学习·分类
__基本操作__23 分钟前
边缘提取函数 [OPENCV--2]
人工智能·opencv·计算机视觉
Doctor老王27 分钟前
TR3:Pytorch复现Transformer
人工智能·pytorch·transformer
热爱生活的五柒28 分钟前
pytorch中数据和模型都要部署在cuda上面
人工智能·pytorch·深度学习
PcVue China2 小时前
PcVue + SQL Grid : 释放数据的无限潜力
大数据·服务器·数据库·sql·科技·安全·oracle
HyperAI超神经2 小时前
【TVM 教程】使用 Tensorize 来利用硬件内联函数
人工智能·深度学习·自然语言处理·tvm·计算机技术·编程开发·编译框架
小白学大数据3 小时前
Python爬虫开发中的分析与方案制定
开发语言·c++·爬虫·python
Mephisto.java4 小时前
【大数据学习 | HBASE】hbase的读数据流程与hbase读取数据
大数据·学习·hbase
扫地的小何尚4 小时前
NVIDIA RTX 系统上使用 llama.cpp 加速 LLM
人工智能·aigc·llama·gpu·nvidia·cuda·英伟达
Shy9604184 小时前
Doc2Vec句子向量
python·语言模型