版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章1A2A3B4B5A6A7A8B9核心特征检测算法可归纳为3类:基础角点类:Harris、Shi-Tomasi(无尺度不变性,适合简单场景);高速实时类:FAST(极致速度,适配实时系统);鲁棒不变类:SIFT、SURF、ORB(具备尺度/旋转不变性,ORB是实时场景的首选)。10程序代码如下:importcv2importnumpyasnpdefinit_sift():"""初始化SIFT特征检测器"""try:#创建SIFT实例,设置最大特征点数量sift=cv2.xfeatures2d.SIFT_create(nfeatures=1000,contrastThreshold=0.02)returnsiftexceptAttributeError:print("错误:未找到SIFT函数!请安装opencv-contrib-python(而非opencv-python)")exit()definit_flann_matcher():"""初始化FLANN匹配器(适配SIFT描述子)"""#FLANN参数配置(KDTree算法,适合SIFT的浮点型描述子)FLANN_INDEX_KDTREE=1index_params=dict(algorithm=FLANN_INDEX_KDTREE,trees=5)search_params=dict(checks=50)#搜索次数,越大精度越高、速度越慢flann=cv2.FlannBasedMatcher(index_params,search_params)returnflanndefget_book_cover_features(sift,cover_path):"""提取书本封面的SIFT特征"""#读取封面图并转为灰度图cover_img=cv2.imread(cover_path)ifcover_imgisNone:print(f"错误:无法读取封面图片{cover_path},请检查路径!")exit()cover_gray=cv2.cvtColor(cover_img,cv2.COLOR_BGR2GRAY)#提取特征点和描述子kp_cover,des_cover=sift.detectAndCompute(cover_gray,None)ifdes_coverisNoneorlen(des_cover)<10:print("错误:封面图提取的特征点过少,请更换清晰的封面照片!")exit()#获取封面图的四顶点坐标(用于后续映射)h,w=cover_img.shape[:2]cover_pts=np.float32([[0,0],[w,0],[w,h],[0,h]]).reshape(-1,1,2)returncover_img,kp_cover,des_cover,cover_ptsdefdetect_book_in_video(sift,flann,cover_kp,cover_des,cover_pts):"""实时检测摄像头中的书本并框选"""#打开摄像头(0为默认摄像头,若无效可尝试1)cap=cv2.VideoCapture(0)ifnotcap.isOpened():print("错误:无法打开摄像头,请检查硬件权限!")exit()print("\n开始实时检测书本,按'q'键退出...")print("提示:请将书本封面正对摄像头,保证光线充足!")whileTrue:#读取实时帧ret,frame=cap.read()ifnotret:print("错误:无法读取摄像头帧!")break#转为灰度图,提取实时帧的SIFT特征frame_gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)kp_frame,des_frame=sift.detectAndCompute(frame_gray,None)#特征匹配(仅当实时帧有足够特征点时执行)ifdes_frameisnotNoneandlen(des_frame)>10:#FLANNK近邻匹配(k=2,取Top2匹配对)matches=flann.knnMatch(cover_des,des_frame,k=2)#用Lowe's法则筛选优质匹配对(距离比<0.75)good_matches=[]form,ninmatches:ifm.distance<0.75*n.distance:good_matches.append(m)#当优质匹配对足够时,计算单应性矩阵并绘制框选iflen(good_matches)>15:#提取匹配的特征点坐标src_pts=np.float32([cover_kp[m.queryIdx].ptformingood_matches]).reshape(-1,1,2)dst_pts=np.float32([kp_frame[m.trainIdx].ptformingood_matches]).reshape(-1,1,2)#计算单应性矩阵(RANSAC剔除异常值)H,mask=cv2.findHomography(src_pts,dst_pts,cv2.RANSAC,5.0)ifHisnotNone:#将封面四顶点映射到实时帧frame_pts=cv2.perspectiveTransform(cover_pts,H)#绘制框选框(红色,线宽3)frame=cv2.polylines(frame,[32(frame_pts)],True,(0,0,255),3)#显示匹配对数量cv2.putText(frame,f"GoodMatches:{len(good_matches)}",(10,30),cv2.FONT_HERSHEY_SIMPLEX,1,(0,255,0),2)#显示实时帧cv2.imshow("BookDetection(SIFT+FLANN+Homography)",frame)#按q键退出ifcv2.waitKey(1)&0xFF==ord('q'):break#释放资源cap.release()cv2.destroyAllWindows()if__name__=="__main__":#1.初始化SIFT和FLANNsift=init_sift()flann=init_flann_matcher()#2.提取书本封面特征cover_path="book_cover.jpg"#替换为你的书本封面图片路径cover_img,cover_kp,cover_des,cover_pts=get_book_cover_features(sift,cover_path)#3.实时检测摄像头中的书本detect_book_in_video(sift,flann,cover_kp,cover_des,cover_pts)第八章14个2A3A4A5颜色或纹理6B7程序代码如下:importcv2importnumpyasnpimportmatplotlib.pyplotasplt#解决matplotlib中文显示问题plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falsedefload_image(img_path):"""加载图像并检查有效性"""img=cv2.imread(img_path)ifimgisNone:raiseException(f"无法读取图像{img_path},请检查文件路径或文件完整性!")img_rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)#转为RGB用于matplotlib显示returnimg,img_rgbdefkmeans_segmentation(img,k=2):"""K-Means颜色聚类分割(聚为2类:猫/背景)"""#1.预处理:将图像转为像素点矩阵(N×3),float32类型pixel_data=img.reshape((-1,3)).astype(np.float32)#2.K-Means参数设置criteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)flags=cv2.KMEANS_RANDOM_CENTERS#3.执行K-Means聚类compactness,labels,centers=cv2.kmeans(pixel_data,k,None,criteria,10,flags)#4.重构分割图像(取占比更大的类为背景,另一类为猫)centers=np.uint8(centers)seg_img=centers[labels.flatten()]seg_img=seg_img.reshape(img.shape)#5.提取猫的区域(灰度化+二值化+轮廓检测)gray=cv2.cvtColor(seg_img,cv2.COLOR_BGR2GRAY)ret,binary=cv2.threshold(gray,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)#确保猫的区域为白色(若背景为白则反转)ifnp.sum(binary==255)>(binary.size/2):binary=cv2.bitwise_not(binary)#6.轮廓检测+框选contours,_=cv2.findContours(binary,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)ifcontours:max_contour=max(contours,key=cv2.contourArea)#取最大轮廓(猫)x,y,w,h=cv2.boundingRect(max_contour)cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255),3)#红色框returnimg,seg_imgdefwatershed_segmentation(img):"""分水岭算法分割"""#1.预处理:灰度化+降噪+二值化gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)blur=cv2.GaussianBlur(gray,(5,5),0)#高斯降噪ret,binary=cv2.threshold(blur,0,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)#2.形态学操作:去除小噪点kernel=np.ones((3,3),np.uint8)opening=cv2.morphologyEx(binary,cv2.MORPH_OPEN,kernel,iterations=2)#3.距离变换+获取种子点dist_transform=cv2.distanceTransform(opening,cv2.DIST_L2,5)ret,seeds=cv2.threshold(dist_transform,0.7*dist_transform.max(),255,0)seeds=np.uint8(seeds)#4.标记未知区域unknown=cv2.subtract(cv2.dilate(opening,kernel),seeds)#5.生成markers(必须int32类型)ret,markers=cv2.connectedComponents(seeds)markers=markers+1markers[unknown==255]=0#6.执行分水岭变换markers=cv2.watershed(img,markers)#7.标记边界+框选img[markers==-1]=[0,0,255]#边界标红#轮廓检测框选contours,_=cv2.findContours((markers==2).astype(np.uint8),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)ifcontours:max_contour=max(contours,key=cv2.contourArea)x,y,w,h=cv2.boundingRect(max_contour)cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),3)#绿色框returnimg,markersdefgrabcut_segmentation(img):"""GrabCut算法分割(交互式框选,这里预设框选区域)"""#1.初始化掩码和GMM模型mask=np.zeros(img.shape[:2],np.uint8)bgdModel=np.zeros((1,65),np.float64)fgdModel=np.zeros((1,65),np.float64)#2.预设框选区域(若需手动交互,可改为鼠标绘制,这里简化为中心区域)h,w=img.shape[:2]rect=(int(w*0.1),int(h*0.1),int(w*0.8),int(h*0.8))#框选大部分区域#3.执行GrabCutcv2.grabCut(img,mask,rect,bgdModel,fgdModel,5,cv2.GC_INIT_WITH_RECT)#4.解析分割结果(保留确定前景+可能前景)mask_result=np.where((mask==2)|(mask==0),0,1).astype(np.uint8)seg_img=img*mask_result[:,:,np.newaxis]#5.轮廓检测+框选gray=cv2.cvtColor(seg_img,cv2.COLOR_BGR2GRAY)contours,_=cv2.findContours(gray,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)ifcontours:max_contour=max(contours,key=cv2.contourArea)x,y,w,h=cv2.boundingRect(max_contour)cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),3)#蓝色框returnimg,seg_imgdefmain():#1.加载图像img_path="cat.jpg"img_original,img_rgb=load_image(img_path)#2.分别执行三种算法分割#K-Means分割img_kmeans=img_original.copy()img_kmeans_seg,_=kmeans_segmentation(img_kmeans)img_kmeans_rgb=cv2.cvtColor(img_kmeans_seg,cv2.COLOR_BGR2RGB)#分水岭分割img_watershed=img_original.copy()img_watershed_seg,_=watershed_segmentation(img_watershed)img_watershed_rgb=cv2.cvtColor(img_watershed_seg,cv2.COLOR_BGR2RGB)#GrabCut分割img_grabcut=img_original.copy()img_grabcut_seg,_=grabcut_segmentation(img_grabcut)img_grabcut_rgb=cv2.cvtColor(img_grabcut_seg,cv2.COLOR_BGR2RGB)#3.可视化结果plt.figure(figsize=(18,6))plt.subplot(131)plt.imshow(img_kmeans_rgb)plt.title("K-Means分割(红色框)",fontsize=12)plt.axis('off')plt.subplot(132)plt.imshow(img_watershed_rgb)plt.title("分水岭分割(绿色框)",fontsize=12)plt.axis('off')plt.subplot(133)plt.imshow(img_grabcut_rgb)plt.title("GrabCut分割(蓝色框)",fontsize=12)plt.axis('off')plt.tight_layout()plt.savefig("cat_segmentation_result.jpg",dpi=300,bbox_inches='tight')plt.show()print("分割完成!结果已保存为cat_segmentation_result.jpg")if__name__=="__main__":try:main()exceptExceptionase:print(f"程序执行出错:{e}")####1.K-Means分割-核心逻辑:将图像像素的RGB值作为特征,聚为2类(猫/背景),通过颜色聚类区分目标;-后处理:聚类后二值化,找到最大轮廓(猫),绘制红色框选框;-优势:无需交互,速度快;劣势:对颜色相近的背景分割效果差。####2.分水岭分割-核心逻辑:先通过形态学操作去除噪点,距离变换生成可靠种子点,再执行分水岭变换;-后处理:标记分水岭边界(红色),找到猫的轮廓绘制绿色框选框;-优势:边界分割精准;劣势:对噪声敏感,需复杂预处理。####3.GrabCut分割-核心逻辑:预设矩形框选猫的区域(模拟用户交互),利用颜色/纹理+边界信息迭代优化分割;-后处理:提取前景区域轮廓,绘制蓝色框选框;-优势:分割效果最好,仅需少量交互;劣势:依赖初始框选的准确性。第九章1梯度2分类和回归3A4局部5C6A7A8A9程序代码如下:importcv2importnumpyasnpimportosimportrandom#======================1.配置参数======================#HOG特征参数(适配鹿的体型,可根据图像尺寸调整)HOG_WIN_SIZE=(64,128)#检测窗口尺寸HOG_BLOCK_SIZE=(16,16)#块尺寸HOG_BLOCK_STRIDE=(8,8)#块步长HOG_CELL_SIZE=(8,8)#单元格尺寸HOG_NBINS=9#梯度方向bin数#数据集路径(替换为你的实际路径)TRAIN_DEER_PATH="deer_dataset/train/deer"TRAIN_NON_DEER_PATH="deer_dataset/train/non_deer"TEST_IMAGE_PATH="deer_dataset/test"#训练参数SVM_C=1.0#SVM惩罚系数RANDOM_SEED=0#随机种子(保证结果可复现)#======================2.工具函数======================defload_and_preprocess_image(img_path,target_size):"""加载图像并预处理(灰度化+resize)"""img=cv2.imread(img_path)ifimgisNone:returnNonegray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)resized=cv2.resize(gray,target_size)returnresizeddefextract_hog_features(img,hog):"""提取单张图像的HOG特征"""features=pute(img)returnfeatures.flatten()#转为一维向量defload_dataset(deer_path,non_deer_path,hog):"""加载训练集并提取HOG特征"""#初始化特征和标签features=[]labels=[]#加载鹿的图像(标签=1)deer_files=[fforfinos.listdir(deer_path)iff.endswith(('.jpg','.png','.jpeg'))]forfindeer_files:img_path=os.path.join(deer_path,f)img=load_and_preprocess_image(img_path,HOG_WIN_SIZE)ifimgisNone:continuehog_feat=extract_hog_features(img,hog)features.append(hog_feat)labels.append(1)#加载非鹿的图像(标签=0)non_deer_files=[fforfinos.listdir(non_deer_path)iff.endswith(('.jpg','.png','.jpeg'))]forfinnon_deer_files:img_path=os.path.join(non_deer_path,f)img=load_and_preprocess_image(img_path,HOG_WIN_SIZE)ifimgisNone:continuehog_feat=extract_hog_features(img,hog)features.append(hog_feat)labels.append(0)#转换为OpenCVSVM所需的格式features=np.array(features,dtype=np.float32)labels=np.array(labels,dtype=32)#打乱数据集np.random.seed(RANDOM_SEED)shuffle_idx=np.random.permutation(len(features))features=features[shuffle_idx]labels=labels[shuffle_idx]print(f"数据集加载完成!总样本数:{len(features)}|鹿样本数:{sum(labels)}|非鹿样本数:{len(labels)-sum(labels)}")returnfeatures,labelsdeftrain_svm(features,labels):"""训练SVM分类器"""#创建SVM实例svm=cv2.ml.SVM.create()#配置SVM参数svm.setKernel(cv2.ml.SVM_LINEAR)#线性内核(HOG特征高维,线性核效果好)svm.setType(cv2.ml.SVM_C_SVC)#二分类svm.setC(SVM_C)#惩罚系数#训练模型svm.train(features,cv2.ml.ROW_SAMPLE,labels)#保存模型(可选)svm.save("deer_svm_model.xml")print("SVM模型训练完成!已保存为deer_svm_model.xml")returnsvmdefconvert_svm_to_hog_detector(svm):"""将训练好的SVM转换为HOG检测器所需的格式"""#获取SVM支持向量和决策函数sv=svm.getSupportVectors()rho,_,_=svm.getDecisionFunction(0)#构造HOG检测器的系数svm_detector=np.append(sv,[[-rho]],axis=0)returnsvm_detectordefdetect_deer_in_image(hog,test_img_path):"""在单张图像中检测鹿"""#读取测试图像img=cv2.imread(test_img_path)ifimgisNone:print(f"无法读取测试图像:{test_img_path}")return#多尺度检测rects,weights=hog.detectMultiScale(img,winStride=(8,8),padding=(16,16),scale=1.05)#NMS非极大值抑制(消除重复框)iflen(rects)>0:indices=cv2.dnn.NMSBoxes([list(rect[:4])forrectinrects],weights[:,0].tolist(),score_threshold=0.5,nms_threshold=0.3)#绘制检测框foriinindices:i=i[0]ifisinstance(i,(list,np.ndarray))elseix,y,w,h=rects[i]cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)cv2.putText(img,f"Deer(conf:{weights[i][0]:.2f})",(x,y-10),cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,255,0),1)#显示并保存结果cv2.imshow("DeerDetectionResult",img)cv2.imwrite(f"detect_result_{os.path.basename(test_img_path)}",img)cv2.waitKey(0)cv2.destroyAllWindows()#======================主流程======================if__name__=="__main__":#1.初始化HOG特征提取器hog=cv2.HOGDescriptor(HOG_WIN_SIZE,HOG_BLOCK_SIZE,HOG_BLOCK_STRIDE,HOG_CELL_SIZE,HOG_NBINS)print("HOG特征提取器初始化完成!")#2.加载数据集并提取HOG特征features,labels=load_dataset(TRAIN_DEER_PATH,TRAIN_NON_DEER_PATH,hog)#3.训练SVM模型svm=train_svm(features,labels)#4.将SVM转换为HOG检测器svm_detector=convert_svm_to_hog_detector(svm)hog.setSVMDetector(svm_detector)print("SVM模型已绑定到HOG检测器!")#5.检测测试图像中的鹿test_img_files=[fforfinos.listdir(TEST_IMAGE_PATH)iff.endswith(('.jpg','.png','.jpeg'))]fortest_fileintest_img_files:test_img_path=os.path.join(TEST_IMAGE_PATH,test_file)print(f"\n检测图像:{test_img_path}")detect_deer_in_image(hog,test_img_path)print("\n所有测试图像检测完成!结果已保存到当前目录。")第十章1二值化归一化/阈值化2局部二值局部3LBP的二进制组合:10000010邻域位置左上上右上右右下下左下左灰度值73231581二进制标记10000010对比规则:邻域像素灰度值≥6→标记为1邻域像素灰度值<6→标记为04D5程序代码如下:importcv2importnumpyasnpimporttime#======================1.配置参数======================#视频路径(0=摄像头,替换为'person_video.mp4'则读取本地视频)VIDEO_PATH=0#优先用摄像头实时测试,更直观#后处理参数(降噪+轮廓检测)KERNEL=np.ones((5,5),np.uint8)#形态学操作核MIN_CONTOUR_AREA=500#最小轮廓面积(过滤小噪点)#颜色配置(区分不同算法的标记)COLOR_MOG2=(0,255,0)#绿色:MOG2COLOR_KNN=(255,0,0)#蓝色:KNNCOLOR_CNT=(0,0,255)#红色:CNT#======================2.初始化背景分割器======================definit_background_subtractors():"""初始化3种背景分割算法"""#MOG2:高斯混合模型,支持阴影检测mog2=cv2.createBackgroundSubtractorMOG2(history=500,#历史帧数量varThreshold=16,#方差阈值(越大越抗光照变化)detectShadows=True#检测阴影(阴影标记为127))#KNN:K近邻背景分割knn=cv2.createBackgroundSubtractorKNN(history=500,dist2Threshold=400,#距离阈值(越大前景越少)detectShadows=True)#CNT:轻量级实时背景分割(速度最快)cnt=cv2.createBackgroundSubtractorCNT(minPixelStability=15,#像素稳定帧数(越小适应越快)useHistory=True,#使用历史背景maxPixelStability=15*60,#最大稳定帧数isParallel=True#并行计算(加速))returnmog2,knn,cnt#======================3.前景掩码后处理======================defprocess_mask(mask):"""对前景掩码降噪,提取人物轮廓"""#1.去除阴影(仅保留纯前景,值=255)mask=np.where(mask==255,255,0).astype(np.uint8)#2.形态学操作:先开运算(去噪点),再闭运算(补孔洞)mask=cv2.morphologyEx(mask,cv2.MORPH_OPEN,KERNEL)mask=cv2.morphologyEx(mask,cv2.MORPH_CLOSE,KERNEL)#3.轮廓检测(提取人物轮廓)contours,_=cv2.findContours(mask,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)returnmask,contours#======================4.绘制人物标记======================defdraw_person_mark(frame,contours,color,algo_name):"""在帧上绘制人物轮廓/检测框,并标注算法名称"""frame_copy=frame.copy()#遍历轮廓,标记面积大于阈值的区域(人物)forcntincontours:ifcv2.contourArea(cnt)>MIN_CONTOUR_AREA:#绘制轮廓cv2.drawContours(frame_copy,[cnt],-1,color,2)#绘制外接矩形(检测框)x,y,w,h=cv2.boundingRect(cnt)cv2.rectangle(frame_copy,(x,y),(x+w,y+h),color,2)#标注算法名称cv2.putText(frame_copy,algo_name,(10,30),cv2.FONT_HERSHEY_SIMPLEX,1,color,2)returnframe_copy#======================5.主流程:多算法对比======================defmain():#初始化背景分割器mog2,knn,cnt=init_background_subtractors()#读取视频/摄像头cap=cv2.VideoCapture(VIDEO_PATH)ifnotcap.isOpened():raiseException("无法打开视频/摄像头,请检查路径或设备!")#获取视频参数(用于保存结果)fps=int(cap.get(cv2.CAP_PROP_FPS))width=int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))height=int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))#保存结果视频(可选)fourcc=cv2.VideoWriter_fourcc(*'mp4v')out=cv2.VideoWriter('background_subtraction_compare.mp4',fourcc,fps,(width*2,height*2))#性能统计algo_times={'mog2':[],'knn':[],'cnt':[]}print("开始检测!按'q'退出,按's'保存当前帧对比图")whilecap.isOpened():ret,frame=cap.read()ifnotret:break#记录各算法耗时start_time=time.time()#==========MOG2分割==========mog2_mask=mog2.apply(frame)mog2_mask_processed,mog2_contours=process_mask(mog2_mask)mog2_frame=draw_person_mark(frame,mog2_contours,COLOR_MOG2,"MOG2")algo_times['mog2'].append(time.time()-start_time)#==========KNN分割==========start_time=time.time()knn_mask=knn.apply(frame)knn_mask_processed,knn_contours=process_mask(knn_mask)knn_frame=draw_person_mark(frame,knn_contours,COLOR_KNN,"KNN")algo_times['knn'].append(time.time()-start_time)#==========CNT分割==========start_time=time.time()cnt_mask=cnt.apply(frame)cnt_mask_processed,cnt_contours=process_mask(cnt_mask)cnt_frame=draw_person_mark(frame,cnt_contours,COLOR_CNT,"CNT")algo_times['cnt'].append(time.time()-start_time)#==========拼接显示窗口==========#上半部分:原始帧+MOG2结果row1=np.hstack((frame,mog2_frame))#下半部分:KNN结果+CNT结果row2=np.hstack((knn_frame,cnt_frame))#合并为2x2网格show_frame=np.vstack((row1,row2))#缩放窗口(适配屏幕)show_frame=cv2.resize(show_frame,(1280,720))#显示cv2.imshow("背景分割算法对比(MOG2=绿|KNN=蓝|CNT=红)",show_frame)#写入结果视频out.write(cv2.resize(np.vstack((row1,row2)),(width*2,height*2)))#按键操作key=cv2.waitKey(1)&0xFFifkey==ord('q'):breakelifkey==ord('s'):cv2.imwrite("background_subtraction_compare.jpg",show_frame)print("当前帧对比图已保存!")#==========性能统计与分析==========print("\n==========算法性能统计==========")foralgo,timesinalgo_times.items():avg_time=np.mean(times)*1000#转毫秒print(f"{algo.upper()}平均单帧耗时:{avg_time:.2f}ms")#释放资源cap.release()out.release()cv2.destroyAllWindows()#======================运行主程序======================if__name__=="__main__":try:main()exceptExceptionase:print(f"程序出错:{e}")结论:对人像视频分割,MOG2算法的精度最优,KNN适合动态背景,CNT适合实时场景;6色调(Hue)、饱和度(Saturation)、明度(Value)7A8瞬时速度9运动速度矢量10变化相关性11特征点图像上的所有像素点12D13上升梯度方向逐步迭代偏移至密度梯度值近似为014HSV(或Hue/色调)MeanShift(均值漂移)中心(或实时)15B第十一章1神经元模型是一个包含输入、加权求和与激活(非线性映射)功能的模型。2一个经典的神经网络包含3个层次,分别为输入层、隐藏层、输出层。3分类问题中过拟合现象的消除方法有增大训练数据集、正则化(L1/L2正则)、早停(EarlyStopping)、Dropout随机失活。4分类问题中欠拟合现象的消除方法有增加模型复杂度、延长训练时间、特征工程(扩充有效特征)。对比维度监督学习无监督学习半监督学习强化学习数据标签全量输入-输出标签对无标签少量标签+大量无标签无标签,靠环境奖励反馈学习目标输入→输出的映射关系数据的内在规律/结构稀缺标签下的映射+规律最大化累计奖励的决策策略反馈机制预测值与真实标签的误差无外部反馈,数据自驱动标签误差+数据结构辅助环境的奖励信号典型任务分类、回归聚类、降维、特征提取分类、回归(标签稀缺)决策、控制、博弈核心挑战标签成本高、过拟合评价标准模糊、训练难度大数据分布匹配、模型复杂度奖励设计、训练不稳定56A7A8A9不同训练样本数量下手写数字识别的算法表样本数量测试集准确率过拟合度预测稳定性核心表现描述15065%~75%极高极差模型仅记住少量样本的特征,对新样本泛化能力极弱;易把“笔画粗细/位置偏移”误判为不同数字,比如把“偏左的1”判为“7”50080%~85%高较差能识别部分核心特征(如“0的圆形、8的双圈”),但对相似数字(如3/8、5/6)仍大量误判;准确率提升但波动大150090%~93%中等较好能学习到数字的通用特征(如“2的曲线、4的拐角”),相似数字误判显著减少;过拟合程度降低,预测结果更稳定600095%~97%低优秀模型充分学习到数字的本质特征(不受笔画、位置、粗细影响),仅在极端噪声样本(如模糊/残缺数字)下少量误判;接近算法在MNIST上的“性能天花板”核心原理:可以把模型比作“学认数字的小孩”:只教150个例子(150个样本):小孩只认识“妈妈写的0、爸爸写的1”,遇到老师写的0就不认识了(泛化差、准确率低);教500/1500个例子:小孩见过不同人写的数字,总结出“0是圆的、1是竖的”,能认大多数数字(准确率提升);教6000个例子:小孩见过各种奇葩写法的数字(潦草的、歪的、细的),几乎能认所有情况(准确率接近上限)。第十二章1YouOnlyLookOnce2A304YOLOv5的模型文件格式为ONNX(全称OpenNeuralNetworkExchange);而YOLOv5原生训练导出的模型格式是.pt(PyTorch权重文件),需先转换为ONNX格式才能被OpenCV调用。5实用结论(结合YOLOv5训练实践)(1)YOLOv5的“最优训练轮数”:绝大多数场景下,YOLOv5的最优轮数在300~1500轮之间(具体取决于数据集大小):小数据集(<1000样本):300~500轮即可收敛;中等数据集(1000~10000样本):800~1500轮达到最优;大数据集(>10000样本):1500~2000轮后精度提升已不明显。(2)6000轮完全无必要:YOLOv5采用了早停(EarlyStopping)、正则化等机制,但6000轮仍会触发严重过拟合,且训练时间大幅增加(如100轮1小时,6000轮需60小时),总结:训练轮数增加的核心变化:精度先升后降,损失(train)持续降、损失(val)先降后升,过拟合从无到严重;1500轮是多数场景的“最优轮数”(精度峰值,过拟合可控),6000轮因严重过拟合导致效果回落;关键判断依据:以val/box_loss和mAP_0.5为核心,而非单纯追求“更多轮数”。6详见以下步骤:一、核心需求利用YOLOv5框架,基于防护帽相关图像数据集,训练一个能精准识别图像中人员是否佩戴防护帽(安全帽/头盔)的目标检测模型,最终实现对单张图片/视频/摄像头画面中防护帽的实时检测。二、完整实操步骤步骤1:环境准备(基础前提)首先搭建YOLOv5运行的Python环境,推荐使用Anaconda管理环境:#1.创建并激活虚拟环境(Python3.8/3.9兼容性最佳)condacreate-nyolov5python=3.8condaactivateyolov5#2.安装依赖(YOLOv5官方依赖+额外工具)pipinstalltorchtorchvisiontorchaudio--index-url/w
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【第713期】长沙市雨花区育新第二小学2026年春季合同制教师招聘备考题库完整参考答案详解
- 合肥理工学院2026年度编外人员招聘备考题库含答案详解
- 四川农商联合银行备考题库科技部2026年校园招聘备考题库含答案详解
- 2026年池州市人民医院劳务派遣药品静配岗人员招聘备考题库参考答案详解
- 2026年江西省赣耘农业科技有限公司社会招聘备考题库有答案详解
- 2026年江西省检验检测认证总院特种设备检验检测研究院萍乡分院招聘备考题库含答案详解
- 2026年黑龙江省林口林业局有限公司招聘备考题库及参考答案详解
- 2026年海南新合工程咨询有限公司招聘备考题库及参考答案详解
- 中共启东市委组织部2026年校园招聘备考题库附答案详解
- 中国热带农业科学院院属单位2026年第一批公开招聘工作人员备考题库及答案详解一套
- 器官移植术后排斥反应的风险分层管理
- 护坡绿化劳务合同范本
- 临床绩效的DRG与CMI双指标调控
- 2026年湛江日报社公开招聘事业编制工作人员备考题库及完整答案详解
- 2025-2026学年人教版数学三年级上学期期末仿真模拟试卷一(含答案)
- 2025年凉山教师业务素质测试题及答案
- 2026年昭通市威信县公安局第一季度辅警招聘(14人)笔试模拟试题及答案解析
- 氢能技术研发协议
- 2025交管12123学法减分整套试题带答案解析(全国适用)
- 经皮内镜下胃造瘘术护理配合
- 光伏电源项目工程建设管理资料表格格式汇编
评论
0/150
提交评论