尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
YoloV8目标检测模型的运行与训练及数据标注
文章目录1. 环境配置1.1 环境清单1.2 我打包好的anaconda虚拟环境2. 模型下载2.1 YOLOv8-Nano下载地址2.2 YOLOv8m COCO数据集预训练模型下载地址3.基于摄像头运行和中文标签显示3.1 提前下载Arial.Unicode.ttf字体文件并安装下载地址如下3.2 在代码中指定本地模型和字体完整可运行代码如下4.标注训练数据4.1 训练数据结构4.2 图形数据的分辨率要求4.3 用labelimg标注数据4.4 划分数据集4.5 创建数据配置文件 (data.yaml)5.训练模型1. 环境配置1.1 环境清单1常规环境pytorch、cunda、cudnn、nvidia显卡驱动、python、pycharm编译器。这些常规环境安装配置见我的文章https://blog.csdn.net/sinat_30065705/article/details/163543654?fromshareblogdetailsharetypeblogdetailsharerId163543654sharereferPCsharesourcesinat_30065705sharefromfrom_link2模型库ultralytics3训练数据标注工具labelimg直接用我装好pytorch的anaconda环境包复制一个新环境激活新环境后再安装yolo模型库和标注工具。conda create--nameyolo_env--clonepytorch_env pipinstallultralytics-ihttps://pypi.tuna.tsinghua.edu.cn/simple pipinstalllabelimg-ihttps://pypi.tuna.tsinghua.edu.cn/simple1.2 我打包好的anaconda虚拟环境干净的python3.9 labelimg标注工具环境下载地址如下https://download.csdn.net/download/sinat_30065705/93303605下面涉及的所有代码、官方模型和数据集配置文件打包下载地址https://download.csdn.net/download/sinat_30065705/933035942. 模型下载2.1 YOLOv8-Nano下载地址https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n.pt2.2 YOLOv8m COCO数据集预训练模型下载地址https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8m.pt3.基于摄像头运行和中文标签显示3.1 提前下载Arial.Unicode.ttf字体文件并安装下载地址如下https://ultralytics.com/assets/Arial.Unicode.ttf若是选择为所有用户安装字体路径为 C:\Windows\Fonts\Arial.Unicode.ttf若是选择为当前用户安装字体路径为 C:\Users\你的用户名\AppData\Roaming\Ultralytics\Arial.Unicode.ttf注opencv窗口标题显示中文就别想了3.2 在代码中指定本地模型和字体完整可运行代码如下注意pycharm代码解释器选择anaconda环境中创建好的yolo环境。importcv2fromultralyticsimportYOLO# --- 在这里指定你下载的模型文件路径 ---model_pathyolov8m.pt# 本地模型路径font_pathC:\Windows\Fonts\Arial.Unicode.ttf# 为了显示中文字体coco_chinese_names{0:人,1:自行车,2:汽车,3:摩托车,4:飞机,5:公交车,6:火车,7:卡车,8:船,9:交通信号灯,10:消防栓,11:停车标志,12:停车计时器,13:长凳,14:鸟,15:猫,16:狗,17:马,18:羊,19:牛,20:大象,21:熊,22:斑马,23:长颈鹿,24:背包,25:雨伞,26:手提包,27:领带,28:行李箱,29:飞盘,30:滑雪板,31:单板滑雪,32:运动球,33:风筝,34:棒球棒,35:棒球手套,36:滑板,37:冲浪板,38:网球拍,39:瓶子,40:酒杯,41:杯子,42:叉子,43:刀,44:勺子,45:碗,46:香蕉,47:苹果,48:三明治,49:橙子,50:西兰花,51:胡萝卜,52:热狗,53:披萨,54:甜甜圈,55:蛋糕,56:椅子,57:沙发,58:盆栽,59:床,60:餐桌,61:厕所,62:电视,63:笔记本电脑,64:鼠标,65:遥控器,66:键盘,67:手机,68:微波炉,69:烤箱,70:烤面包机,71:水槽,72:冰箱,73:书,74:时钟,75:花瓶,76:剪刀,77:泰迪熊,78:吹风机,79:牙刷}# 1. 加载本地模型modelYOLO(model_path)model.model.namescoco_chinese_names# 直接替换模型内部的类别名称# 2. 打开摄像头 (0 代表默认摄像头)[reference:11][reference:12]capcv2.VideoCapture(0)ifnotcap.isOpened():print(无法打开摄像头)exit()# 设置宽度为 1280高度为 720可根据需要修改cap.set(cv2.CAP_PROP_FRAME_WIDTH,1280)cap.set(cv2.CAP_PROP_FRAME_HEIGHT,720)# 3. 开始实时检测循环whileTrue:# 读取一帧ret,framecap.read()ifnotret:print(无法获取摄像头帧)break# 4. 使用模型进行预测resultsmodel(frame)# results model(frame, conf0.9) # 只显示置信度0.9以上的检测结结果# 5. 在画面上绘制检测框[reference:13]annotated_frameresults[0].plot(fontfont_path)# 6. 显示结果cv2.imshow(YOLOv8.encode(gbk).decode(errorsignore),annotated_frame)# opencv窗口名称也显示中文# 7. 按 q 键退出ifcv2.waitKey(1)0xFFord(q):break# 8. 释放资源cap.release()cv2.destroyAllWindows()运行结果4.标注训练数据4.1 训练数据结构首先需要在本地建立一个标准的训练数据文件夹结构你的数据集根目录/ ├── images/ │ ├── train/ # 存放所有训练集图片 │ └── val/ # 存放所有验证集图片 └── labels/ ├── train/ # 存放所有训练集标注文件 (.txt) └── val/ # 存放所有验证集标注文件 (.txt)4.2 图形数据的分辨率要求YOLO模型的网络结构中包含多次32倍的下采样因此输入图像的宽和高都必须能被32整除如320x320, 416x416, 640x640, 800x800, 960x960, 1280x1280如果想要检测小物体就要高分辨率。一般采用640x640分辨率的图像。可用以下程序批量将一个文件夹里的原始图片分辨率修改成想要的大小importosfromPILimportImage# 只需修改下面这几行 input_dir./origin_data# 输入文件夹output_dir./train_data\images/train# 输出文件夹target_width640# 目标宽度target_height640# 目标高度fill_color(0,0,0)# 填充颜色 (R,G,B)黑色# # 支持的图片格式SUPPORTED_EXT(.jpg,.jpeg,.png,.bmp,.tiff,.webp)defresize_image_letterbox(img,target_w,target_h,color):按比例缩放并填充到目标尺寸保持宽高比w,himg.size scalemin(target_w/w,target_h/h)new_wint(w*scale)new_hint(h*scale)resizedimg.resize((new_w,new_h),Image.Resampling.LANCZOS)canvasImage.new(RGB,(target_w,target_h),color)x(target_w-new_w)//2y(target_h-new_h)//2canvas.paste(resized,(x,y))returncanvasdefprocess():os.makedirs(output_dir,exist_okTrue)files[fforfinos.listdir(input_dir)iff.lower().endswith(SUPPORTED_EXT)]print(f找到{len(files)}张图片开始处理...)forfilenameinfiles:src_pathos.path.join(input_dir,filename)imgImage.open(src_path).convert(RGB)# 执行 Letterbox 填充保持宽高比processedresize_image_letterbox(img,target_width,target_height,fill_color)out_pathos.path.join(output_dir,filename)# 保存为 JPEG质量 95可自行修改格式processed.save(out_path,JPEG,quality95)print(f已处理:{filename})print(全部完成)if__name____main__:process()4.3 用labelimg标注数据1labelimg默认标注格式为xml需要点击切换成yolo的txt格式切换成下图所示标注工具会产生和图片同名的.txt标注文件。例如image1.jpg对应image1.txt。标注文件内容有class_id x_center y_center width height其中class_id目标的类别编号从 0 开始。x_center, y_center, width, height这些值都是归一化的范围在0到1之间。计算方法为 像素坐标 / 图片尺寸。2虚拟环境命令行中输入“labelimg”打开标注工具打开图片或者加载图片目录3标注时若出现如下错误这是python3.10引起的错误滚动鼠标滚轮时程序试图将一个浮点数float传给只接受整数int的函数从而报错。要么降级labelimg要么重新建一个干净的python3.9环境只装labelimg。方案一降级labelimg没啥用# 1. 卸载当前版本pip uninstall labelImg# 2. 安装稳定的 1.8.3 版本pipinstalllabelImg1.8.3方案二创建python3.9干净的标注环境推荐# 1. 创建名为 labelimg_env 的新环境指定 Python 3.9conda create-nlabelimg_envpython3.9# 2. 激活新环境conda activate labelimg_env# 3. 在新环境中安装 LabelImgpipinstalllabelImg# 4. 启动 LabelImglabelImg4点击标注工具最测下方的放大工具将图片缩放至合适大小再点击创建矩形框工具开始标注目标。矩形框画完后会弹出窗口让你录入标签这里有两点需要说明①你在 LabelImg 里输入的标签完全由你自己决定跟模型本身比如 YOLOv8n 预训练模型已经会的那些类别人、汽车、猫、狗等没有任何关系。你输入的这些新词会作为新的“类别代码”记录在标注文件.txt里。后续训练时模型会从头或基于预训练权重学习这些新东西。它不需要预先认识“可口可乐”才能训练。②你在弹出窗口中直接输入中文比如 人、汽车、可乐罐是完全合法的。LabelImg 底层是基于 UTF-8 编码的完全支持中文字符。你在弹窗里输入中文只是告诉程序“这个框的名字叫 X”。当点击保存时LabelImg 不会把中文字符写进 .txt 标注文件而是自动将你的中文转换成一个数字编号从 0 开始。因为保存的是数字系统需要知道你输入的“中文词”对应几号数字。所以你在 LabelImg 中输入的文本必须和稍后训练配置文件 data.yaml 里的 names 列表拼写完全一致包括标点和空格。③基于第二点也就是说你标注数据时必须将自己每张图片里所需要识别的目标全部标出来一个都不能少。5点击保存按钮将自动生成的标签保存至标签文件夹也可以事先设置好标签保存目录。注意我这里没切换标注格式。切换成yolo标注格式后会同时产生一个标签文件和你已经标注的所有类别文件。标签文件内容如下类别文件内容如下4.4 划分数据集将你的全部数据按比例分为训练集和验证集例如8:2或7:3。划分后将图片和对应的标注文件分别放入上面对应的train和val文件夹中。4.5 创建数据配置文件 (data.yaml)在项目根目录下创建一个data.yaml文件用于告诉YOLOv8你的数据集信息。内容模板如下# 数据集根目录的绝对路径 path: E:\Project\Yolo\train_data # 训练集和验证集图片的相对路径相对于上面的path train: images/train val: images/val # 类别数量 nc: 1 # 类别名称列表顺序需与标注时的class_id对应,[类别0名称, 类别1名称, 类别2名称, ...] names: [暖气片]5.训练模型训练代码如下importos# -------- 关键禁止 Ultralytics 自动下载默认模型 --------os.environ[ULTRALYTICS_SKIP_DOWNLOAD]1os.environ[KMP_DUPLICATE_LIB_OK]TRUE# 允许 OpenMP 重复加载fromultralyticsimportYOLO# # 1. 指定模型权重文件本地路径# # 支持yolov8n.pt, yolov8s.pt, yolov8m.pt, yolov8l.pt, yolov8x.pt# 如果文件在当前目录直接写文件名否则写完整路径MODEL_PATHE:\Project\Yolo\yolov8n.pt# 建议为绝对路径# # 2. 指定数据集配置文件data.yaml# DATA_CONFIGdata.yaml# 确保该文件存在且格式正确# # 3. 加载本地模型# modelYOLO(MODEL_PATH)# 这里会使用指定的权重文件# # 4. 开始训练# resultsmodel.train(dataDATA_CONFIG,# 数据集配置epochs100,# 训练轮数imgsz640,# 输入图像尺寸必须为32的倍数batch16,# 批次大小根据显存调整device0,# 0 表示使用 GPU 0若用 CPU 则写 cpuworkers4,# 数据加载线程数pretrainedTrue,# 使用预训练权重即您指定的模型optimizerauto,# 自动选择优化器verboseTrue,# 打印详细日志projectruns/train,# 结果保存目录默认 runs/detectnamemy_model,# 本次实验的子文件夹名称自动递增可用空字符串ampFalse# 禁止自动下载)print(训练完成最佳模型保存在,model.trainer.best)训练结果如图所示
RELATED

相关推荐

用 Boss批量推送 1.2.0 自动发自定义招呼语,批量投简历省出半天时间

用 Boss批量推送 1.2.0 自动发自定义招呼语,批量投简历省出半天时间

用 Boss批量推送 1.2.0 自动发自定义招呼语,批量投简历省出半天时间 【免费下载链接】boss_batch_push Boss直聘批量投简历,批量发送自定义招呼语 项目地址: https://gitcode.com/gh_mirrors/bo/boss_batch_push 在Boss直聘上逐一点"立即沟通…

📅 2026/10/11 3:34:30
65-MCGS昆仑通态触摸屏工程模板|新风空调机组HMI界面设计参考文件

65-MCGS昆仑通态触摸屏工程模板|新风空调机组HMI界面设计参考文件

温馨提示:文末有联系方式 专业级65-MCGS新风空调机组触摸屏模板 模板来源与兼容性说明 本文件基于昆仑通态(MCGS)65系列组态软件开发,专为新风空调机组系统定制,全面支持TPC系列高性能工业触摸屏,兼容主流…

📅 2026/10/14 23:50:48
武林外传私服搭建全套工具包:云服务器架设教程+合区工具全版本+蓝莫登录器+GS管理工具+技能/任务/NPC/人物/地图复活点编辑器

武林外传私服搭建全套工具包:云服务器架设教程+合区工具全版本+蓝莫登录器+GS管理工具+技能/任务/NPC/人物/地图复活点编辑器

温馨提示:文末有联系方式 武林外传私服全流程视频教学指南 系统化呈现从零开始搭建武林外传私服的完整路径,包含环境准备、服务端部署、数据库配置及功能调试等关键环节,全程高清实操演示,新手也能快速上手。 云端服务器一键架设…

📅 2026/10/7 19:48:35
MORE NEWS

更多资讯

📰

AI专利撰写与布局实战:从可专利性判断到权利要求避坑指南

1. 当“AI专利”四个字摆在面前,真正该拆解的是什么 “AI专利”这个标题乍一看像是一个宏大叙事,但真正落到实操层面,它其实指向一个非常具体的问题: 当一项技术成果同时具备“人工智能”和“可专利性”两个属性时,从…

📰

Tcl脚本驱动FPGA工程自动化:从创建到编译全流程实战

1. 为什么要用Tcl脚本搭建易灵思工程:从痛点说起做FPGA开发有一段时间的朋友,大概率都经历过这种场景:明明只是改了一个引脚约束,结果打开工程GUI,等它加载完,点开约束编辑器,翻半天找到那行配置…

📰

Qt5.13 TCP服务端与客户端开发实战:信号槽与粘包处理

简介:一份基于 QT5.13.0 的 TCP 通信完整示例,面向初学 Qt 网络编程的开发者,用于理解服务端与客户端的建立、多客户端接入以及聊天消息的收发,既适合课程设计参考,也能作为入职前 Qt 网络模块的练手项目。资源内置可运…

📰

论文降重还在同义词替换?Okbiye 带你避开学术双重检测的坑

每年毕业季,总有一批同学在最后关头翻车:查重率降下来了,结果 AIGC 检测却亮起红灯;AI 痕迹消除了,语句又变得生硬不通顺。如今高校普遍实行 "查重 AIGC" 双重审核,单纯靠同义词替换降重的老方法…

📰

AI专利实战指南:从技术方案到专利布局的完整流程

1. 从“AI 专利”这个标题说起:它到底在聊什么“AI 专利”这四个字,乍一看像是一个法律或者知识产权话题,但真正在一线做技术、做产品的人看到它,脑子里浮现的往往不是法条,而是一连串非常具体的问题:我做的…

📰

KKSwarm多机协同框架实践:从架构选型到部署避坑

简介:开源机器人集群项目KKSwarm由易科机器人实验室与阿木实验室联合打造,面向机器人研究者、开发者及高校学生,提供一套基于开源理念的多机器人协同工作系统。项目涵盖群体通信、协调、导航与任务分配等核心技术,适用于工业生产、…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬