通过调用官YOLOv8模型训练柑橘果实检测数据集 如何建立 深度学习基于 YOLOv8 的柑橘果实检测系统 柑桔柑橘数据集的训练及应用
文章目录
- 通过调用官YOLOv8模型训练柑橘果实检测数据集 如何建立 深度学习基于 YOLOv8 的柑橘果实检测系统 柑桔柑橘数据集的训练及应用
- 数据集描述:
- 🍊如何建立 基于 YOLOv8 的柑橘果实检测系统构建
- 🧰 环境搭建(CUDA驱动、Anaconda、Python虚拟环境)
- 1. 安装 CUDA 驱动
- 2. 安装 Anaconda
- 3. 创建 Python 虚拟环境
- 4. 安装依赖项
- 📁 数据集结构说明
- `data.yaml` 内容如下:
- 🏋️ 使用 YOLOv8 训练模型
- 加载官方预训练模型进行训练
- 开始训练(推荐配置)
- 🔍 推理代码(单张图片 + 批量处理)
- 单张图片推理
- 批量图片推理
- 📊 模型评估代码(验证精度、混淆矩阵等)
- 验证 mAP、Recall、Precision 等指标
- 2. 训练模型
- 3. 推理和评估
- 4. 构建GUI界面
以下文字及代码仅供参考学习使用。
文章目录
- 通过调用官YOLOv8模型训练柑橘果实检测数据集 如何建立 深度学习基于 YOLOv8 的柑橘果实检测系统 柑桔柑橘数据集的训练及应用
- 数据集描述:
- 🍊如何建立 基于 YOLOv8 的柑橘果实检测系统构建
- 🧰 环境搭建(CUDA驱动、Anaconda、Python虚拟环境)
- 1. 安装 CUDA 驱动
- 2. 安装 Anaconda
- 3. 创建 Python 虚拟环境
- 4. 安装依赖项
- 📁 数据集结构说明
- `data.yaml` 内容如下:
- 🏋️ 使用 YOLOv8 训练模型
- 加载官方预训练模型进行训练
- 开始训练(推荐配置)
- 🔍 推理代码(单张图片 + 批量处理)
- 单张图片推理
- 批量图片推理
- 📊 模型评估代码(验证精度、混淆矩阵等)
- 验证 mAP、Recall、Precision 等指标
- 2. 训练模型
- 3. 推理和评估
- 4. 构建GUI界面
以下文字及代码仅供参考学习使用。
数据集描述:
柑橘果实检测数据集 可yolo目标检测
训练测试验证 标签为txt格式
一类[ ’ orange’]
训练集:2913张
测试集:971张
验证集:971张
1
🍊如何建立 基于 YOLOv8 的柑橘果实检测系统构建
🧰 环境搭建(CUDA驱动、Anaconda、Python虚拟环境)
1. 安装 CUDA 驱动
nvidia-smi- 如果未安装,请前往 NVIDIA官网 下载并安装对应显卡型号的最新驱动。
2. 安装 Anaconda
从 Anaconda官网 下载并安装适合你系统的版本。
3. 创建 Python 虚拟环境
conda create--nameyolov8_orangepython=3.9conda activate yolov8_orange4. 安装依赖项
pipinstalltorch torchvision torchaudio pipinstallultralytics==8.2.0 pipinstallopencv-python pipinstallnumpy pipinstallmatplotlib pipinstalltqdm📁 数据集结构说明
你的柑橘果实数据集应组织如下:
orange_dataset/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ └── data.yamldata.yaml内容如下:
train:./orange_dataset/images/trainval:./orange_dataset/images/valtest:./orange_dataset/images/testnc:1names:['orange']🏋️ 使用 YOLOv8 训练模型
加载官方预训练模型进行训练
fromultralyticsimportYOLO# 加载YOLOv8预训练模型(如 yolov8s.pt)model=YOLO('yolov8s.pt')# 可选:yolov8n, yolov8m, yolov8l, yolov8x开始训练(推荐配置)
results=model.train(data='path/to/data.yaml',epochs=100,imgsz=640,batch=16,name='orange_yolov8s',pretrained=True,optimizer='AdamW',lr0=1e-3,lrf=1e-4,momentum=0.937,weight_decay=0.0005,warmup_epochs=3,patience=10,device=0iftorch.cuda.is_available()elseNone,workers=4,project="runs/orange",save=True,save_period=5,# 每5个epoch保存一次模型verbose=True)🔍 推理代码(单张图片 + 批量处理)
单张图片推理
fromultralyticsimportYOLOimportcv2# 加载模型model=YOLO('runs/orange/orange_yolov8s/weights/best.pt')# 图片路径image_path='test_images/example.jpg'# 进行预测results=model(image_path)# 绘制结果forresultinresults:annotated_img=result.plot()cv2.imshow('Detection Result',annotated_img)cv2.waitKey(0)cv2.destroyAllWindows()批量图片推理
importosfromultralyticsimportYOLO# 加载模型model=YOLO('runs/orange/orange_yolov8s/weights/best.pt')# 输入输出目录input_dir='orange_dataset/images/test'output_dir='inference_results'os.makedirs(output_dir,exist_ok=True)# 批量处理forimg_fileinos.listdir(input_dir):ifimg_file.lower().endswith(('.png','.jpg','.jpeg')):image_path=os.path.join(input_dir,img_file)results=model(image_path)forresultinresults:annotated_img=result.plot()output_path=os.path.join(output_dir,img_file)cv2.imwrite(output_path,annotated_img)print(f"✅ 批量推理完成,结果已保存到{output_dir}")📊 模型评估代码(验证精度、混淆矩阵等)
验证 mAP、Recall、Precision 等指标
# 验证模型性能metrics=model.val()# 输出各项指标print("mAP@0.5:",metrics.box.map50)print("mAP@0.5:0.95:",metrics.box.map)print("Precision:",metrics.box.precision)print("Recall:",metrics.box.recall)print("F1 Score:",metrics.box.f1)--- 基于YOLOv8的柑橘检测系统,使用Python的`tkinter`库来构建图形用户界面。以下是一个详细的代码示例,包括训练、推理和评估部分,以及一个简单的GUI界面。 ### 1. 安装必要的库 确保你已经安装了所有必要的库: ```bash pip install torch torchvision torchaudio pip install ultralytics==8.2.0 pip install opencv-python pip install numpy pip install matplotlib pip install tqdm pip install tk2. 训练模型
需要训练模型。使用以下代码进行训练:
fromultralyticsimportYOLO# 加载YOLOv8预训练模型(如 yolov8s.pt)model=YOLO('yolov8s.pt')# 开始训练results=model.train(data='path/to/data.yaml',epochs=100,imgsz=640,batch=16,name='orange_yolov8s',pretrained=True,optimizer='AdamW',lr0=1e-3,lrf=1e-4,momentum=0.937,weight_decay=0.0005,warmup_epochs=3,patience=10,device=0iftorch.cuda.is_available()elseNone,workers=4,project="runs/orange",save=True,save_period=5,# 每5个epoch保存一次模型verbose=True)3. 推理和评估
接下来,我们编写推理和评估的代码:
importcv2fromultralyticsimportYOLO# 加载模型model=YOLO('runs/orange/orange_yolov8s/weights/best.pt')# 验证模型性能metrics=model.val()# 输出各项指标print("mAP@0.5:",metrics.box.map50)print("mAP@0.5:0.95:",metrics.box.map)print("Precision:",metrics.box.precision)print("Recall:",metrics.box.recall)print("F1 Score:",metrics.box.f1)# 单张图片推理image_path='test_images/example.jpg'results=model(image_path)forresultinresults:annotated_img=result.plot()cv2.imshow('Detection Result',annotated_img)cv2.waitKey(0)cv2.destroyAllWindows()4. 构建GUI界面
最后,我们使用tkinter构建一个简单的GUI界面:
importtkinterastkfromPILimportImage,ImageTkimportcv2fromultralyticsimportYOLOimportosclassOrangeDetectorApp:def__init__(self,root):self.root=root self.root.title("基于YOLOv8的柑橘检测系统")# 创建左侧图像显示区域self.image_frame=tk.Frame(root)self.image_frame.pack(side=tk.LEFT,padx=10,pady=10)self.image_label=tk.Label(self.image_frame)self.image_label.pack()# 创建右侧控制面板self.control_panel=tk.Frame(root)self.control_panel.pack(side=tk.RIGHT,padx=10,pady=10)# 权重选择self.weight_frame=tk.Frame(self.control_panel)self.weight_frame.pack(pady=10)tk.Label(self.weight_frame,text="选择权重").pack()self.weight_entry=tk.Entry(self.weight_frame,width=50)self.weight_entry.pack()self.weight_entry.insert(0,"runs/orange/orange_yolov8s/weights/best.pt")tk.Button(self.weight_frame,text="加载",command=self.load_model).pack()# 数据源选择self.data_source_frame=tk.Frame(self.control_panel)self.data_source_frame.pack(pady=10)tk.Label(self.data_source_frame,text="选择检测资源").pack()tk.Button(self.data_source_frame,text="图片",command=self.detect_image).pack(side=tk.LEFT)tk.Button(self.data_source_frame,text="视频",command=self.detect_video).pack(side=tk.LEFT)tk.Button(self.data_source_frame,text="摄像头",command=self.detect_camera).pack(side=tk.LEFT)# 参数设置self.param_frame=tk.Frame(self.control_panel)self.param_frame.pack(pady=10)tk.Label(self.param_frame,text="conf").pack()self.conf_slider=tk.Scale(self.param_frame,from_=0.0,to=1.0,resolution=0.01,orient=tk.HORIZONTAL)self.conf_slider.set(0.25)self.conf_slider.pack()tk.Label(self.param_frame,text="IOU").pack()self.iou_slider=tk.Scale(self.param_frame,from_=0.0,to=1.0,resolution=0.01,orient=tk.HORIZONTAL)self.iou_slider.set(0.7)self.iou_slider.pack()# 检测结果self.result_frame=tk.Frame(self.control_panel)self.result_frame.pack(pady=10)tk.Label(self.result_frame,text="检测结果").pack()self.result_label=tk.Label(self.result_frame,text="目标总数:0\n花费时间:0 ms")self.result_label.pack()# 是否保存结果self.save_frame=tk.Frame(self.control_panel)self.save_frame.pack(pady=10)self.save_var=tk.IntVar()tk.Checkbutton(self.save_frame,text="是否保存结果",variable=self.save_var).pack()# 初始化模型self.model=Nonedefload_model(self):weight_path=self.weight_entry.get()ifos.path.exists(weight_path):self.model=YOLO(weight_path)print("模型加载成功!")else:print("模型路径不存在!")defdetect_image(self):ifself.modelisnotNone:image_path='test_images/example.jpg'# 替换为你的测试图片路径results=self.model(image_path,conf=self.conf_slider.get(),iou=self.iou_slider.get())forresultinresults:annotated_img=result.plot()img=cv2.cvtColor(annotated_img,cv2.COLOR_BGR2RGB)img=Image.fromarray(img).resize((640,480))imgtk=ImageTk.PhotoImage(image=img)self.image_label.imgtk=imgtk self.image_label.configure(image=imgtk)self.result_label.config(text=f"目标总数:{len(result.boxes)}\n花费时间:{result.speed['inference']:.1f}ms")defdetect_video(self):pass# 实现视频检测逻辑defdetect_camera(self):pass# 实现摄像头检测逻辑if__name__=="__main__":root=tk.Tk()app=OrangeDetectorApp(root)root.mainloop()