Bootstrap

毕业设计-基于深度学习的车辆实时检测与跟踪系统 YOLO 卷积神经网络 人工智能 CNN

目录

前言

课题背景和意义

实现技术思路

一、YOLOv5算法

1.1 YOLOv5算法特点

1.2 YOLOv5s的损失函数

1.3 注意力机制

二、数据集建立和模型训练

2.1 模型训练

2.2 目标跟踪

三、实验效果

最后


前言

       📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。

        🚀对毕设有任何疑问都可以问学长哦!

         选题指导:

        最新最全计算机专业毕设选题精选推荐汇总

        大家好,这里是海浪学长毕设专题,本次分享的课题是

        🎯基于卷积神经网络的车辆实时检测与跟踪系统

课题背景和意义

       随着人能的检测的使检测跟踪等人术不也更的实。针对目车辆检测兼顾检测度与检测,我们设计一种基于改进YOLOv5s的车辆检测方法车辆检测度的检测的增加的车辆跟踪可以实时车辆的便驾及时能性

实现技术思路

一、YOLOv5算法

1.1 YOLOv5s的损失函数

       损失预测信息信息的距离预测信息信息值越小

毕业设计-YOLOv5-车辆实时检测-深度学习

       定位失:检测检测的目要通过数据预测,YOLOv5s采用GIoU部分包括绿的面积减去预测的面积比上的面积与预测距离

       :预测度表预测预测Sigmiod数代SostmaxBCEloss

1.2 注意力机制

       YOLOv5s注意机制仿物时会将的区入到YOLOv5s网络通道两个沿可以沿向保信息一对感知地应用于以增的表

毕业设计-YOLOv5s注意力机制-深度学习

二、数据集建立和模型训练

       对生活中的车辆数据2025活中的车辆小和可以为出行代型车途载人车辆途载人车辆车辆车辆车辆车辆可以车辆检测跟踪不同车型不同的距离不同果前车辆),系统车距适更。车辆类别如下所示:

毕业设计-数据集-深度学习

2.1 模型训练

       引入力机制的YOLOv5s训练300PR线如下图所示回率PR线的面积示该型对数据果越当损CIoU训练EIoU

毕业设计-模型训练-深度学习-车辆识别-YOLO

部分代码如下所示:



# 创建模型
backbone = resnet_fpn_backbone('resnet50', pretrained=True)
anchor_generator = AnchorGenerator(sizes=((32, 64, 128, 256, 512),), aspect_ratios=((0.5, 1.0, 2.0),))
roi_pooler = torchvision.ops.MultiScaleRoIAlign(featmap_names=['0', '1', '2', '3'], output_size=7, sampling_ratio=2)
attention_module = AttentionModule(256)
rpn_head = RPNHead(256, anchor_generator.num_anchors_per_location()[0])
roi_heads = RoIHeads(box_roi_pool=roi_pooler, box_head=None, box_predictor=None, mask_roi_pool=None, mask_head=None, keypoint_roi_pool=None, keypoint_head=None, keypoint_predictor=None, attention_module=attention_module)
model = FasterRCNN(backbone, rpn_head, roi_heads)

model.load_state_dict(torch.load('path/to/pretrained_weights.pth'))

model.eval()

data_loader = DataLoader(dataset, batch_size=1, shuffle=False)

predictions = []
targets = []

# 进行预测
with torch.no_grad():
    for images, targets in data_loader:
        images = list(image for image in images)
        targets = [{k: v for k, v in t.items()} for t in targets]
        output = model(images)
        predictions.extend(output)
        targets.extend(targets)

# 提取预测结果中的置信度和真实标签
scores = []
labels = []
for prediction in predictions:
    scores.extend(prediction['scores'].cpu().numpy())
    labels.extend(prediction['labels'].cpu().numpy())

# 计算PR曲线
precision, recall, _ = precision_recall_curve(targets, scores)

# 绘制PR曲线
plt.plot(recall, precision)
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.title('PR Curve')
plt.show()

2.2 目标跟踪

       基于训练YOLOv5s检测跟踪研究检测的增加片上的物比较前后一目距离于规定一物遍历距离新的目的目遍历跟踪的目跟踪目显示id

毕业设计-YOLOv5s目标跟踪

部分代码如下所示:


# 设置模型为评估模式
model.eval()

# 加载目标类别标签
labels = ['car', 'truck', 'bus']

# 初始化目标跟踪器
tracker = cv2.TrackerCSRT_create()

# 打开摄像头
cap = cv2.VideoCapture(0)

# 循环读取视频帧
while True:
    # 读取视频帧
    ret, frame = cap.read()

    # 将帧转换为PIL图像
    pil_image = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))

    # 使用YOLOv5s进行目标检测
    results = model(pil_image)

    # 获取检测结果中的边界框、置信度和类别
    boxes = results.xyxy[0][:, :4].cpu().numpy()
    scores = results.xyxy[0][:, 4].cpu().numpy()
    classes = results.xyxy[0][:, 5].cpu().numpy().astype(int)

    # 遍历每个检测到的目标
    for box, score, cls in zip(boxes, scores, classes):
        # 如果检测到的目标是车辆类别
        if labels[cls] in labels:
            # 提取边界框的坐标
            x, y, w, h = box

            # 初始化目标跟踪器
            tracker.init(frame, (x, y, w, h))

            # 绘制边界框和类别标签
            cv2.rectangle(frame, (int(x), int(y)), (int(x + w), int(y + h)), (0, 255, 0), 2)
            cv2.putText(frame, labels[cls], (int(x), int(y) - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)

    # 更新目标跟踪器
    ret, bbox = tracker.update(frame)

    # 如果目标跟踪成功
    if ret:
        # 提取目标跟踪器返回的边界框坐标
        x, y, w, h = [int(i) for i in bbox]

        # 绘制目标跟踪框
        cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)

    # 显示结果帧
    cv2.imshow('Vehicle Tracking', frame)

    # 按下 'q' 键退出循环
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放摄像头和关闭窗口
cap.release()
cv2.destroyAllWindows()

三、实验效果

创作不易,欢迎点赞、关注、收藏、留言。

毕设帮助,疑难解答,欢迎打扰!

最后

;