2026/5/21 10:18:25
网站建设
项目流程
做男女之间的事情的网站,济南专业做网站,app开发外包要多少钱,企业宣传册ppt模板文章目录前言1. 目标检测概况1.1 什么是目标检测#xff1f;1.2 发展阶段2. 行人检测2.1 行人检测简介2.2 行人检测技术难点2.3 行人检测实现效果2.4 关键代码-训练过程前言 目标检测在图像识别领域应用的非常广泛#xff0c;比如行人识别#xff0c;可以用来做店铺或者车站…文章目录前言1. 目标检测概况1.1 什么是目标检测1.2 发展阶段2. 行人检测2.1 行人检测简介2.2 行人检测技术难点2.3 行人检测实现效果2.4 关键代码-训练过程前言目标检测在图像识别领域应用的非常广泛比如行人识别可以用来做店铺或者车站的人流量统计车辆识别同理。 是个非常好的毕业设计课题。毕设帮助开题指导资料分享疑问解答(见文末) **选题指导, 项目分享见文末**1. 目标检测概况1.1 什么是目标检测目标检测粗略来说就是输入图片/视频经过处理得到目标的位置信息比如左上角和右下角的坐标、目标的预测类别、目标的预测置信度confidence。1.2 发展阶段手工特征提取算法如VJ、HOG、DPMR-CNN算法2014最早的基于深度学习的目标检测器之一其结构是两级网络1首先需要诸如选择性搜索之类的算法来提出可能包含对象的候选边界框2然后将这些区域传递到CNN算法进行分类R-CNN算法存在的问题是其仿真很慢并且不是完整的端到端的目标检测器。Fast R-CNN算法2014末对原始R-CNN进行了相当大的改进提高准确度并减少执行正向传递所花费的时间。是该模型仍然依赖于外部区域搜索算法。faster R-CNN算法2015真正的端到端深度学习目标检测器。删除了选择性搜索的要求而是依赖于1完全卷积的区域提议网络RPN, Region Purpose Network可以预测对象边界框和“对象”分数量化它是一个区域的可能性的分数。2然后将RPN的输出传递到R-CNN组件以进行最终分类和标记。R-CNN系列算法都采取了two-stage策略。特点是虽然检测结果一般都非常准确但仿真速度非常慢即使是在GPU上也仅获得5 FPS。one-stage方法有yolo2015、SSD2015末以及在这两个算法基础上改进的各论文提出的算法。这些算法的基本思路是均匀地在图片的不同位置进行密集抽样抽样时可以采用不同尺度和长宽比然后利用CNN提取特征后直接进行分类与回归。整个过程只需要一步所以其优势是速度快但是训练比较困难。yolov32018是yolo作者提出的第三个版本之前还提过yolov2和它们的tinny版本tinny版本经过压缩更快但是也降低了准确率。2. 行人检测这里学长以行人检测作为例子来讲解目标检测。2.1 行人检测简介行人检测( Pedestrian Detection)一直是计算机视觉研究中的热点和难点。行人检测要解决的问题是找出图像或视频帧中所有的行人包括位置和大小一般用矩形框表示和人脸检测类似这也是典型的目标检测问题。行人检测技术有很强的使用价值它可以与行人跟踪行人重识别等技术结合应用于汽车无人驾驶系统(ADAS)智能机器人智能视频监控人体行为分析客流统计系统智能交通等领域。2.2 行人检测技术难点由于人体具有相当的柔性因此会有各种姿态和形状其外观受穿着姿态视角等影响非常大另外还面临着遮挡 、光照等因素的影响这使得行人检测成为计算机视觉领域中一个极具挑战性的课题。行人检测要解决的主要难题是:外观差异大包括视角姿态服饰和附着物光照成像距离等。从不同的角度看过去行人的外观是很不一样的。处于不同姿态的行人外观差异也很大。由于人穿的衣服不同以及打伞、戴帽子、戴围巾、提行李等附着物的影响外观差异也非常大。光照的差异也导致了一些困难。远距离的人体和近距离的人体在外观上差别也非常大。遮挡问题 在很多应用场景中行人非常密集存在严重的遮挡我们只能看到人体的一部分这对检测算法带来了严重的挑战。背景复杂无论是室内还是室外行人检测一般面临的背景都非常复杂有些物体的外观和形状、颜色、纹理很像人体导致算法无法准确的区分。检测速度行人检测一般采用了复杂的模型运算量相当大要达到实时非常困难一般需要大量的优化。2.3 行人检测实现效果检测到行人后还可以做流量分析2.4 关键代码-训练过程importcv2importnumpyasnpimportrandomdefload_images(dirname,amout9999):img_list[]fileopen(dirname)img_namefile.readline()whileimg_name!:# 文件尾img_namedirname.rsplit(r/,1)[0]r/img_name.split(/,1)[1].strip(\n)img_list.append(cv2.imread(img_name))img_namefile.readline()amout-1ifamout0:# 控制读取图片的数量breakreturnimg_list# 从每一张没有人的原始图片中随机裁出10张64*128的图片作为负样本defsample_neg(full_neg_lst,neg_list,size):random.seed(1)width,heightsize[1],size[0]foriinrange(len(full_neg_lst)):forjinrange(10):yint(random.random()*(len(full_neg_lst[i])-height))xint(random.random()*(len(full_neg_lst[i][0])-width))neg_list.append(full_neg_lst[i][y:yheight,x:xwidth])returnneg_list# wsize: 处理图片大小通常64*128; 输入图片尺寸 wsizedefcomputeHOGs(img_lst,gradient_lst,wsize(128,64)):hogcv2.HOGDescriptor()# hog.winSize wsizeforiinrange(len(img_lst)):ifimg_lst[i].shape[1]wsize[1]andimg_lst[i].shape[0]wsize[0]:roiimg_lst[i][(img_lst[i].shape[0]-wsize[0])//2:(img_lst[i].shape[0]-wsize[0])//2wsize[0],\(img_lst[i].shape[1]-wsize[1])//2:(img_lst[i].shape[1]-wsize[1])//2wsize[1]]graycv2.cvtColor(roi,cv2.COLOR_BGR2GRAY)gradient_lst.append(hog.compute(gray))# return gradient_lstdefget_svm_detector(svm):svsvm.getSupportVectors()rho,_,_svm.getDecisionFunction(0)svnp.transpose(sv)returnnp.append(sv,[[-rho]],0)# 主程序# 第一步计算HOG特征neg_list[]pos_list[]gradient_lst[]labels[]hard_neg_list[]svmcv2.ml.SVM_create()pos_listload_images(rG:/python_project/INRIAPerson/96X160H96/Train/pos.lst)full_neg_lstload_images(rG:/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_ITERcv2.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/hogcv2.HOGDescriptor()hard_neg_list.clear()hog.setSVMDetector(get_svm_detector(svm))foriinrange(len(full_neg_lst)):rects,weihog.detectMultiScale(full_neg_lst[i],winStride(4,4),padding(8,8),scale1.05)for(x,y,w,h)inrects:hardExamplefull_neg_lst[i][y:yh,x:xw]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) 项目分享:大家可自取用于参考学习获取方式见文末!