大创项目推荐 交通目标检测-行人车辆检测流量计数 - 大创项目推荐

文章目录

  • 0 前言
  • 1\. 目标检测概况
    • 1.1 什么是目标检测?
    • 1.2 发展阶段
  • 2\. 行人检测
    • 2.1 行人检测简介
    • 2.2 行人检测技术难点
    • 2.3 行人检测实现效果
    • 2.4 关键代码-训练过程
  • 最后

0 前言

🔥 优质竞赛项目系列,今天要分享的是

🚩 毕业设计 交通目标检测-行人车辆检测流量计数

该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:4分

🧿 更多资料, 项目分享:

https://gitee.com/dancheng-senior/postgraduate

1. 目标检测概况

1.1 什么是目标检测?

目标检测,粗略来说就是:输入图片/视频,经过处理,得到:目标的位置信息(比如左上角和右下角的坐标)、目标的预测类别、目标的预测置信度(confidence)。

1.2 发展阶段

  1. 手工特征提取算法,如VJ、HOG、DPM

  2. R-CNN算法(2014),最早的基于深度学习的目标检测器之一,其结构是两级网络:

  • 1)首先需要诸如选择性搜索之类的算法来提出可能包含对象的候选边界框;
  • 2)然后将这些区域传递到CNN算法进行分类;
  1. R-CNN算法存在的问题是其仿真很慢,并且不是完整的端到端的目标检测器。

  2. Fast R-CNN算法(2014末),对原始R-CNN进行了相当大的改进:提高准确度,并减少执行正向传递所花费的时间。
    是,该模型仍然依赖于外部区域搜索算法。

  3. faster R-CNN算法(2015),真正的端到端深度学习目标检测器。删除了选择性搜索的要求,而是依赖于

  • (1)完全卷积的区域提议网络(RPN, Region Purpose Network),可以预测对象边界框和“对象”分数(量化它是一个区域的可能性的分数)。
  • (2)然后将RPN的输出传递到R-CNN组件以进行最终分类和标记。
  1. R-CNN系列算法,都采取了two-stage策略。特点是:虽然检测结果一般都非常准确,但仿真速度非常慢,即使是在GPU上也仅获得5 FPS。

  2. one-stage方法有:yolo(2015)、SSD(2015末),以及在这两个算法基础上改进的各论文提出的算法。这些算法的基本思路是:均匀地在图片的不同位置进行密集抽样,抽样时可以采用不同尺度和长宽比,然后利用CNN提取特征后直接进行分类与回归。
    整个过程只需要一步,所以其优势是速度快,但是训练比较困难。

  3. yolov3(2018)是yolo作者提出的第三个版本(之前还提过yolov2和它们的tinny版本,tinny版本经过压缩更快但是也降低了准确率)。

2. 行人检测

这里学长以行人检测作为例子来讲解目标检测。

2.1 行人检测简介

行人检测( Pedestrian
Detection)一直是计算机视觉研究中的热点和难点。行人检测要解决的问题是:找出图像或视频帧中所有的行人,包括位置和大小,一般用矩形框表示,和人脸检测类似,这也是典型的目标检测问题。

行人检测技术有很强的使用价值,它可以与行人跟踪,行人重识别等技术结合,应用于汽车无人驾驶系统(ADAS),智能机器人,智能视频监控,人体行为分析,客流统计系统,智能交通等领域。

2.2 行人检测技术难点

由于人体具有相当的柔性,因此会有各种姿态和形状,其外观受穿着,姿态,视角等影响非常大,另外还面临着遮挡
、光照等因素的影响,这使得行人检测成为计算机视觉领域中一个极具挑战性的课题。行人检测要解决的主要难题是:

  • 外观差异大:包括视角,姿态,服饰和附着物,光照,成像距离等。从不同的角度看过去,行人的外观是很不一样的。处于不同姿态的行人,外观差异也很大。由于人穿的衣服不同,以及打伞、戴帽子、戴围巾、提行李等附着物的影响,外观差异也非常大。光照的差异也导致了一些困难。远距离的人体和近距离的人体,在外观上差别也非常大。

  • 遮挡问题: 在很多应用场景中,行人非常密集,存在严重的遮挡,我们只能看到人体的一部分,这对检测算法带来了严重的挑战。

  • 背景复杂:无论是室内还是室外,行人检测一般面临的背景都非常复杂,有些物体的外观和形状、颜色、纹理很像人体,导致算法无法准确的区分。

  • 检测速度:行人检测一般采用了复杂的模型,运算量相当大,要达到实时非常困难,一般需要大量的优化。

2.3 行人检测实现效果

在这里插入图片描述

检测到行人后还可以做流量分析:

在这里插入图片描述

2.4 关键代码-训练过程


    import cv2
    import numpy as np
    import random


    def load_images(dirname, amout = 9999):
        img_list = []
        file = open(dirname)
        img_name = file.readline()
        while img_name != '':  # 文件尾
            img_name = dirname.rsplit(r'/', 1)[0] + r'/' + img_name.split('/', 1)[1].strip('\n')
            img_list.append(cv2.imread(img_name))
            img_name = file.readline()
            amout -= 1
            if amout <= 0: # 控制读取图片的数量
                break
        return img_list



    # 从每一张没有人的原始图片中随机裁出10张64*128的图片作为负样本
    def sample_neg(full_neg_lst, neg_list, size):
        random.seed(1)
        width, height = size[1], size[0]
        for i in range(len(full_neg_lst)):
            for j in range(10):
                y = int(random.random() * (len(full_neg_lst[i]) - height))
                x = int(random.random() * (len(full_neg_lst[i][0]) - width))
                neg_list.append(full_neg_lst[i][y:y + height, x:x + width])
        return neg_list


    # wsize: 处理图片大小,通常64*128; 输入图片尺寸>= wsize
    def computeHOGs(img_lst, gradient_lst, wsize=(128, 64)):
        hog = cv2.HOGDescriptor()
        # hog.winSize = wsize
        for i in range(len(img_lst)):
            if img_lst[i].shape[1] >= wsize[1] and img_lst[i].shape[0] >= wsize[0]:
                roi = img_lst[i][(img_lst[i].shape[0] - wsize[0]) // 2: (img_lst[i].shape[0] - wsize[0]) // 2 + wsize[0], \
                      (img_lst[i].shape[1] - wsize[1]) // 2: (img_lst[i].shape[1] - wsize[1]) // 2 + wsize[1]]
                gray = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)
                gradient_lst.append(hog.compute(gray))
        # return gradient_lst



    def get_svm_detector(svm):
        sv = svm.getSupportVectors()
        rho, _, _ = svm.getDecisionFunction(0)
        sv = np.transpose(sv)
        return np.append(sv, [[-rho]], 0)



    # 主程序
    # 第一步:计算HOG特征
    neg_list = []
    pos_list = []
    gradient_lst = []
    labels = []
    hard_neg_list = []
    svm = cv2.ml.SVM_create()
    pos_list = load_images(r'G:/python_project/INRIAPerson/96X160H96/Train/pos.lst')
    full_neg_lst = load_images(r'G:/python_project/INRIAPerson/train_64x128_H96/neg.lst')
    sample_neg(full_neg_lst, neg_list, [128, 64])
    print(len(neg_list))
    computeHOGs(pos_list, gradient_lst)
    [labels.append(+1) for _ in range(len(pos_list))]
    computeHOGs(neg_list, gradient_lst)
    [labels.append(-1) for _ in range(len(neg_list))]
     
    # 第二步:训练SVM
    svm.setCoef0(0)
    svm.setCoef0(0.0)
    svm.setDegree(3)
    criteria = (cv2.TERM_CRITERIA_MAX_ITER + cv2.TERM_CRITERIA_EPS, 1000, 1e-3)
    svm.setTermCriteria(criteria)
    svm.setGamma(0)
    svm.setKernel(cv2.ml.SVM_LINEAR)
    svm.setNu(0.5)
    svm.setP(0.1)  # for EPSILON_SVR, epsilon in loss function?
    svm.setC(0.01)  # From paper, soft classifier
    svm.setType(cv2.ml.SVM_EPS_SVR)  # C_SVC # EPSILON_SVR # may be also NU_SVR # do regression task
    svm.train(np.array(gradient_lst), cv2.ml.ROW_SAMPLE, np.array(labels))
     
    # 第三步:加入识别错误的样本,进行第二轮训练
    # 参考 http://masikkk.com/article/SVM-HOG-HardExample/
    hog = cv2.HOGDescriptor()
    hard_neg_list.clear()
    hog.setSVMDetector(get_svm_detector(svm))
    for i in range(len(full_neg_lst)):
        rects, wei = hog.detectMultiScale(full_neg_lst[i], winStride=(4, 4),padding=(8, 8), scale=1.05)
        for (x,y,w,h) in rects:
            hardExample = full_neg_lst[i][y:y+h, x:x+w]
            hard_neg_list.append(cv2.resize(hardExample,(64,128)))
    computeHOGs(hard_neg_list, gradient_lst)
    [labels.append(-1) for _ in range(len(hard_neg_list))]
    svm.train(np.array(gradient_lst), cv2.ml.ROW_SAMPLE, np.array(labels))



    # 第四步:保存训练结果
    hog.setSVMDetector(get_svm_detector(svm))
    hog.save('myHogDector.bin')


最后

🧿 更多资料, 项目分享:

https://gitee.com/dancheng-senior/postgraduate

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/229101.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RocketMQ安装和使用

RocketMQ快速入门 下载RocketMQ 下载地址 环境要求 Linux64位系统 JDK1.8(64位) 安装RocketMQ 解压 unzip rocketmq-all-4.4.0-bin-release.zip启动RocketMQ 启动NameServer # 1.启动NameServer nohup sh bin/mqnamesrv & # 2.查看启动日志 tail -f ~/logs/rocke…

混合预编码(Hybrid Precoding)的全连接结构与子连接结构

A Survey on Hybrid Beamforming Techniques in 5G: Architecture and System Model Perspectives 全连接结构的混合预编码 子连接结构的混合预编码 Alternating Minimization Algorithms for HybridPrecoding in Millimeter Wave MIMO Systems

WGCLOUD v3.5.0 新增支持监测交换机的接口状态UP DOWN

WGCLOUD v3.5.0开始 可以监测交换机或SNMP设备的接口状态了&#xff0c;直接上图

奕碳科技亮相COP28:展现中国智慧,引领全球碳减排新篇章

11月30日,联合国气候变化框架公约第28次缔约方大会 (COP28) 在阿联酋迪拜开幕。COP28是全球气候治理的重要盛会&#xff0c;汇聚了世界各国领导人、企业界和科学界代表&#xff0c;共同探讨和制定应对全球气候变化的策略与行动计划。在这样的背景下&#xff0c;企业群体的积极参…

初识人工智能,一文读懂过拟合欠拟合和模型压缩的知识文集(3)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

前端自动化测试Vue中TDD和单元测试示例详解

1、简单用例入门 Vue 提供了 vue/test-utils 来帮助我们进行单元测试&#xff0c;创建 Vue 项目的时候勾选测试选项会自动帮我们安装 先来介绍两个常用的挂载方法&#xff1a; mount&#xff1a;会将组件以及组件包含的子组件都进行挂载shallowMount&#xff1a;浅挂载&…

潮落云起:中国云桌面的产业变局

云桌面&#xff0c;又被称为桌面云、桌面虚拟化技术。这项技术的起源可以追溯到20世纪70年代&#xff0c;IBM通过一台计算机来实现多用户资源的桌面共享。在数十年的发展中&#xff0c;云桌面从技术实现方式到产品形态日趋丰富。 相比于传统PC数据单独存放、系统独立运维的分散…

2023年12月8日:UI登陆界面

作业 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMovie> #include <QPushButton> #include <QDebug>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpub…

DeepIn,UOS统信专业版安装运行Java,JavaFx程序

因为要适配国产统信UOS系统&#xff0c;要求JavaFx程序能简便双击运行&#xff0c;由于网上UOS开发相关文章少&#xff0c;多数文章没用&#xff0c;因此花了不少时间&#xff0c;踩了不少坑&#xff0c;下面记录一些遇到的问题&#xff0c;我的程序环境是jdk1.8&#xff0c;为…

vue项目新增弹窗打开时:其中邮箱和密码被默认设置为当前登录的账号和密码

解决方法&#xff1a;就是在input的前后分别再添加一个input&#xff08;注意截图顺序不能错{密码放前面、邮箱放后面}&#xff09;

2024最新金三银四软件测试面试题

一直以来大大小小参与过不少面试&#xff0c;遇到过不少坑&#xff0c;但是没来的及好好总结汇总下。现在把之前遇到的问题汇总下&#xff0c;希望以后自己能加深印象。 1、appium 怎么定位toast弹框 appium1.6以后回答需要升级u2进行定位。 2、什么是事务&#xff0c;知道事…

Filed II 绘制超声 3D/2D 点扩散函数

点扩散函数可以较好地描述超声对成像目标分辨能力,利用 filed II 仿真工具实现点扩算函数 PSF 的 3D 和 2D 绘制。 定义换能器基本参数 f0=5e6; % Transducer center frequency [Hz] fs=100e6; % Sampling frequency [Hz] c=1540; % Speed of sound [m/s] width=0.15/1000

MYSQL练题笔记-高级查询和连接-这系列最后一题以及下个系列(子查询)的第一题

今天做了下面两题&#xff0c;到第三题的时候想了下但是没有太多的思路&#xff0c;然后看题解的时候实在是觉得自己不会&#xff0c;打算明天看吧。 1.按分类统计薪水相关的表和题目如下 我是想着简化问题&#xff0c;先找出薪水低于30000的员工&#xff0c;然后找这些员工的上…

Anaconda建虚拟环境并在jupyter中打开

1.假设要用yaml格式创建虚拟环境 从开始里打开anaconda powersheel 输入以下 conda env create -f environment.yaml conda activate env_name activate以下虚拟环境 修改名称 如果不用yaml也可以用 conda create --name my_first_env python3.6 这个来指定 2.(base)变(…

DHTMLX Scheduler PRO 6.0.5 Crack

功能丰富的 JavaScript调度程序 DHTMLX Scheduler 是一个 JavaScript 日程安排日历&#xff0c;具有 10 个视图和可定制的界面&#xff0c;用于开发任何类型的日程安排应用程序。 DHTMLX JS 调度程序库的主要特性 我们的 JS 调度程序最需要的功能之一是时间轴视图。借助时间轴…

Docker安装postgres最新版

1. postgres数据库 PostgreSQL是一种开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它是一种高度可扩展的、可靠的、功能丰富的数据库系统。以下是关于PostgreSQL的一些介绍&#xff1a; 开源性&#xff1a;PostgreSQL是一个开源项目&#xff0c;可以…

线性代数入门与学习笔记

该内容为重拾部分线性代数知识的学习笔记&#xff0c;内容上更多的是为了解决问题而学习的内容&#xff0c;并非系统化的学习。 针对的问题为&#xff1a;Music算法推导求解过程中的矩阵计算知识。 学习的内容包括&#xff1a;矩阵原理、矩阵行列式、矩阵的秩、线性变换矩阵变换…

【VSAN数据恢复】节点raid硬盘离线导致vsan分布式存储不可用的数据恢复案例

VSAN数据恢复环境&#xff1a; 4个节点服务器组建vsan集群。每个节点服务器上有2组分别由6块硬盘组建的raid阵列&#xff0c;上层是虚拟机文件。 VSAN故障情况&#xff1a; vsan集群某一个节点服务器上的一组raid阵列中的一块硬盘离线&#xff0c;安全机制启动&#xff0c;开始…

PVE系列-LVM安装MacOS的各个版本及VNC加密隧道访问

PVE系列-LVM安装MacOS的各个版本 环境配置大概过程&#xff1a;详细步骤&#xff1a;1.建立安装环境和下载安装工具2. 重启后&#xff0c;执行osx-setup配置虚拟机3. 安装到硬盘&#xff0c;4.设定引导盘&#xff0c;以方便自动开机启动5.打开屏幕共享和系统VNC6.VNC加密的ssh隧…

ArkTS语言难吗?鸿蒙指南

HarmonyOS的开发语言是ArkTS、JS(JavaScript)。 ArkTS简介 ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript&#xff08;简称TS&#xff09;生态基础上做了进一步扩展&#xff0c;继承了TS的所有特性&#xff0c;是TS的超集。因此&#xff0c;在学习…
最新文章