青岛网站建设案例,新加坡域名注册网站,互联网产品推广方案范文,郑州seo网站管理文章目录 0 简介1 车型数据集及训练2 车型检测识别3 实现效果最后 0 简介
今天学长向大家分享一个毕业设计项目
毕业设计 深度学习车型检测算法(源码分享)
项目运行效果#xff1a; 毕业设计 深度学习车型检测算法#x1f9ff; 项目分享:见文末!
1 车型数据集及训练
** …文章目录0 简介1 车型数据集及训练2 车型检测识别3 实现效果最后0 简介今天学长向大家分享一个毕业设计项目毕业设计 深度学习车型检测算法(源码分享)项目运行效果毕业设计 深度学习车型检测算法 项目分享:见文末!1 车型数据集及训练** YOLOv5模型简介**本文借助YOLOv5实现对不同大小车辆的类型进行识别YOLOv5的调用、训练和预测都十分方便并且它为不同的设备需求和不同的应用场景提供了大小和参数数量不同的网络。YOLOv5模型是一个在COCO数据集上预训练的物体检测架构和模型系列它是YOLO系列的一个延伸能够很好的用来进行车型的特征提取其网络结构共分为input、backbone、neck和head四个模块yolov5对yolov4网络的优点在于在input端使用了Mosaic数据增强、自适应锚框计算、自适应图片缩放在backbone端使用了Focus结构与CSP结构在neck端添加了FPNPAN结构在head端改进了训练时的损失函数使用GIOU_Loss以及预测框筛选的DIOU_nms。除了模型结构yolov5使用Pytorch框架对用户非常友好代码易读模型训练快速能够直接对图像视频进行推理能直接部署到手机应用端预测速度非常快。1主干部分使用了Focus网络结构具体操作是在一张图片中每隔一个像素拿到一个值这个时候获得了四个独立的特征层然后将四个独立的特征层进行堆叠此时宽高信息就集中到了通道信息输入通道扩充了四倍。该结构在YoloV5第5版之前有所应用最新版本中未使用。2数据增强Mosaic数据增强、Mosaic利用了四张图片进行拼接实现数据中增强优点是可以丰富检测物体的背景且在BN计算的时候可以计算四张图片的数据。3多正样本匹配在之前的Yolo系列里面在训练时每一个真实框对应一个正样本即在训练时每一个真实框仅由一个先验框负责预测。YoloV5中为了加快模型的训练效率增加了正样本的数量在训练时每一个真实框可以由多个先验框负责预测。车型识别数据集这里我们使用的车型数据集其中训练集包含1488张图片验证集包含507张图片测试集包含31张图片共计2026张图片。部分图片和标注情况如下图所示。每张图像均提供了图像类标记信息图像中车型的bounding box车型的关键part信息以及车型的属性信息数据集并解压后得到如下的图片该数据集分为7类分别有小型车中型车大型车小型卡车大型卡车油罐车特种车。Chinese_name {tiny-car: 小型车, mid-car: 中型车, big-car: 大型车, small-truck: 小型卡车, big-truck: 大型卡车, oil-truck: 油罐车, special-car: 特种车}我们分析一下数据集的组成结构第4类也就是小型卡车的的图片最多并且x,y坐标主要集中在0.50.5的位置。这里我们开始训练和测试自己的数据集在cmd终端中运行train.py进行训练以下是训练过程中的结果截图。在深度学习中我们通常通过损失函数下降的曲线来观察模型训练的情况。而YOLOv5训练时主要包含三个方面的损失矩形框损失(box_loss)、置信度损失obj_loss和分类损失(cls_loss)在训练结束后我们也可以在logs目录下找到生成对若干训练过程统计图。下图为博主训练车型类识别的模型训练曲线图。一般我们会接触到两个指标分别是召回率recall和精度precision两个指标p和r都是简单地从一个角度来判断模型的好坏均是介于0到1之间的数值其中接近于1表示模型的性能越好接近于0表示模型的性能越差为了综合评价目标检测的性能一般采用均值平均密度map来进一步评估模型的好坏。我们通过设定不同的置信度的阈值可以得到在模型在不同的阈值下所计算出的p值和r值一般情况下p值和r值是负相关的绘制出来可以得到如下图所示的曲线其中曲线的面积我们称AP目标检测以PR-curve为例你可以看到我们的模型在验证集上的均值平均准确率为0.992。2 车型检测识别在训练完成后得到最佳模型接下来我们将帧图像输入到这个网络进行预测从而得到预测结果预测方法testVideo.py部分的代码如下所示def predict(img): img torch.from_numpy(img).to(device) img img.half() if half else img.float() img / 255.0 if img.ndimension() 3: img img.unsqueeze(0) t1 time_synchronized() pred model(img, augmentFalse)[0] pred non_max_suppression(pred, opt.conf_thres, opt.iou_thres, classesopt.classes, agnosticopt.agnostic_nms) t2 time_synchronized() InferNms round((t2 - t1), 2) return pred, InferNmsdef plot_one_box(img, x, colorNone, labelNone, line_thicknessNone): # Plots one bounding box on image img tl line_thickness or round(0.002 * (img.shape[0] img.shape[1]) / 2) 1 # line/font thickness color color or [random.randint(0, 255) for _ in range(3)] c1, c2 (int(x[0]), int(x[1])), (int(x[2]), int(x[3])) cv2.rectangle(img, c1, c2, color, thicknesstl, lineTypecv2.LINE_AA) if label: tf max(tl - 1, 1) # font thickness t_size cv2.getTextSize(label, 0, fontScaletl / 3, thicknesstf)[0] c2 c1[0] t_size[0], c1[1] - t_size[1] - 3 cv2.rectangle(img, c1, c2, color, -1, cv2.LINE_AA) # filled cv2.putText(img, label, (c1[0], c1[1] - 2), 0, tl / 3, [225, 255, 255], thicknesstf, lineTypecv2.LINE_AA)执行得到的结果如下图所示图中车型的种类和置信度值都标注出来了预测速度较快。基于此模型我们可以将其设计成一个带有界面的系统在界面上选择图片、视频或摄像头然后调用模型进行检测。if __name__ __main__: # video_path 0 video_path ./UI_rec/test_/test.mp4 # 初始化视频流 vs cv2.VideoCapture(video_path) (W, H) (None, None) frameIndex 0 # 视频帧数 try: prop cv2.CAP_PROP_FRAME_COUNT total int(vs.get(prop)) # print([INFO] 视频总帧数{}.format(total)) # 若读取失败报错退出 except: print([INFO] could not determine # of frames in video) print([INFO] no approx. completion time can be provided) total -1 fourcc cv2.VideoWriter_fourcc(*XVID) ret, frame vs.read() vw frame.shape[1] vh frame.shape[0] print([INFO] 视频尺寸{} * {}.format(vw, vh)) output_video cv2.VideoWriter(./results.avi, fourcc, 20.0, (vw, vh)) # 处理后的视频对象 # 遍历视频帧进行检测 while True: # 从视频文件中逐帧读取画面 (grabbed, image) vs.read() # 若grabbed为空表示视频到达最后一帧退出 if not grabbed: print([INFO] 运行结束...) output_video.release() vs.release() exit() # 获取画面长宽 if W is None or H is None: (H, W) image.shape[:2] image cv2.resize(image, (850, 500)) img0 image.copy() img letterbox(img0, new_shapeimgsz)[0] img np.stack(img, 0) img img[:, :, ::-1].transpose(2, 0, 1) # BGR to RGB, to 3x416x416 img np.ascontiguousarray(img) pred, useTime predict(img) det pred[0] p, s, im0 None, , img0 if det is not None and len(det): # 如果有检测信息则进入 det[:, :4] scale_coords(img.shape[1:], det[:, :4], im0.shape).round() # 把图像缩放至im0的尺寸 number_i 0 # 类别预编号 detInfo [] for *xyxy, conf, cls in reversed(det): # 遍历检测信息 c1, c2 (int(xyxy[0]), int(xyxy[1])), (int(xyxy[2]), int(xyxy[3])) # 将检测信息添加到字典中 detInfo.append([names[int(cls)], [c1[0], c1[1], c2[0], c2[1]], %.2f % conf]) number_i 1 # 编号数1 label %s %.2f % (names[int(cls)], conf) # 画出检测到的目标物 plot_one_box(image, xyxy, labellabel, colorcolors[int(cls)]) # 实时显示检测画面 cv2.imshow(Stream, image) image cv2.resize(image, (vw, vh)) output_video.write(image) # 保存标记后的视频 if cv2.waitKey(1) 0xFF ord(q): break # print(FPS:{}.format(int(0.6/(end-start)))) frameIndex 13 实现效果项目运行效果毕业设计 深度学习车型检测算法最后 项目分享:见文末!