YoloV8目标检测模型的运行与训练及数据标注 📅 发布时间:2026/8/22 10:04:36 👁 浏览次数: 文章目录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)训练结果如图所示