当前位置: 首页 > news >正文

毕设项目分享 目标检测-行人车辆检测流量计数

文章目录

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

前言

目标检测在图像识别领域应用的非常广泛,比如行人识别,可以用来做店铺或者车站的人流量统计,车辆识别同理。 是个非常好的毕业设计课题。

毕设帮助,开题指导,资料分享,疑问解答(见文末)


🧿 **选题指导, 项目分享:见文末**

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 关键代码-训练过程

importcv2importnumpyasnpimportrandomdefload_images(dirname,amout=9999):img_list=[]file=open(dirname)img_name=file.readline()whileimg_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-=1ifamout<=0:# 控制读取图片的数量breakreturnimg_list# 从每一张没有人的原始图片中随机裁出10张64*128的图片作为负样本defsample_neg(full_neg_lst,neg_list,size):random.seed(1)width,height=size[1],size[0]foriinrange(len(full_neg_lst)):forjinrange(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])returnneg_list# wsize: 处理图片大小,通常64*128; 输入图片尺寸>= wsizedefcomputeHOGs(img_lst,gradient_lst,wsize=(128,64)):hog=cv2.HOGDescriptor()# hog.winSize = wsizeforiinrange(len(img_lst)):ifimg_lst[i].shape[1]>=wsize[1]andimg_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_lstdefget_svm_detector(svm):sv=svm.getSupportVectors()rho,_,_=svm.getDecisionFunction(0)sv=np.transpose(sv)returnnp.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_inrange(len(pos_list))]computeHOGs(neg_list,gradient_lst)[labels.append(-1)for_inrange(len(neg_list))]# 第二步:训练SVMsvm.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 classifiersvm.setType(cv2.ml.SVM_EPS_SVR)# C_SVC # EPSILON_SVR # may be also NU_SVR # do regression tasksvm.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))foriinrange(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)inrects: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_inrange(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')

🧿 项目分享:大家可自取用于参考学习,获取方式见文末!

http://www.jsqmd.com/news/165042/

相关文章:

  • 当码字遇上魔法:一位深夜赶Due科研狗的“书匠策AI”论文辅助工具亲测手记
  • SlideSCI:科研演示文稿制作的终极PowerPoint插件指南
  • PVNet:重新定义3D视觉定位的精度与效率边界
  • Places365场景分类实战:从零开始构建智能视觉系统
  • LIEF库终极指南:二进制分析与可执行文件格式处理实战
  • 猜宝可梦游戏快速上手实战指南:从零部署到精通配置
  • PyTorch模型部署前在Miniconda中做最后验证
  • 2025年托盘桥架厂家选择指南:聚焦实力品牌,精准匹配工程需求 - 深度智识库
  • DeepSkyStacker免费终极指南:快速掌握专业级深空摄影图像叠加技术
  • 2025年质量好的DLSB 系列低温冷却液循环泵厂家推荐及选购参考榜 - 品牌宣传支持者
  • AudioGridder终极指南:5分钟学会远程音频处理黑科技
  • 5分钟掌握Blender:终极分子可视化指南
  • DeepSkyStacker终极指南:从入门到精通深空图像处理
  • kkFileView:免费开源的CAD图纸在线预览终极方案
  • Linux网络诊断工具体系化总结
  • RDPWrap失效终极解决方案:快速恢复Windows远程桌面多用户功能
  • 线程协作线程通信08
  • COMSOL三维电渗离子迁移
  • PyTorch模型压力测试在Miniconda环境中的执行
  • 2025年铝合金桥架厂家最新权威排行榜:聚焦实力标杆,赋能工程采购 - 深度智识库
  • F5-TTS语音合成实战指南:从技术小白到语音大师的蜕变之旅
  • CPU QOS
  • 终极指南:使用sceasy轻松实现单细胞数据格式无缝转换
  • [STM32C0] 【STM32C092RC 测评】+如何进入低功耗模式并唤醒
  • 内幕对比:后保研的科研导师团队与保研岛的修改研究计划书,谁更值得信赖? - 速递信息
  • 2025小型废盐焚烧炉TOP5权威推荐:精品定制服务商深度测评 - 工业品牌热点
  • Java JWT 库:现代微服务安全认证的终极指南
  • 论文写作的“隐秘角落”:我如何用一款AI工具把学术表达打磨出光
  • 蛋糕西餐培训学校哪个好?专业咖啡西点西餐培训学校推荐与全解析 - mypinpai
  • Miniconda如何安装特定版本PyTorch以兼容旧项目