news 2026/2/19 4:59:04

番茄农作物病害检测和识别2:基于深度学习YOLOv12神经网络实现番茄农作物病害检测和识别(含训练代码和数据集)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
番茄农作物病害检测和识别2:基于深度学习YOLOv12神经网络实现番茄农作物病害检测和识别(含训练代码和数据集)

基于深度学习YOLOv12神经网络实现番茄农作物病害检测和识别,其能识别检测出9种番茄农作物病害检测:names: ['Early Blight', 'Healthy', 'Late Blight', 'Leaf Miner', 'Leaf Mold', 'Mosaic Virus', 'Septoria', 'Spider Mites', 'Yellow Leaf Curl Virus']

具体图片见如下:

第一步:YOLOv12介绍

YOLO12 引入了一种以注意力为中心的架构,它脱离了之前 YOLO 模型中使用的传统 CNN 方法,但保留了许多应用所必需的实时推理速度。该模型通过在注意力机制和整体网络架构方面的创新方法,实现了最先进的目标检测精度,同时保持了实时性能。

主要功能:

  • 区域注意力机制: 一种新的自注意力方法,可以有效地处理大型感受野。它将 特征图 分成l个大小相等的区域(默认为 4 个),水平或垂直,避免复杂的运算并保持较大的有效感受野。与标准自注意力相比,这大大降低了计算成本。
  • 残差高效层聚合网络(R-ELAN):一种基于 ELAN 的改进的特征聚合模块,旨在解决优化挑战,尤其是在更大规模的以注意力为中心的模型中。R-ELAN 引入:
    • 具有缩放的块级残差连接(类似于层缩放)。
    • 一种重新设计的特征聚合方法,创建了一个类似瓶颈的结构。
  • 优化的注意力机制架构:YOLO12 精简了标准注意力机制,以提高效率并与 YOLO 框架兼容。这包括:
    • 使用 FlashAttention 来最大限度地减少内存访问开销。
    • 移除位置编码,以获得更简洁、更快速的模型。
    • 调整 MLP 比率(从典型的 4 调整到 1.2 或 2),以更好地平衡注意力和前馈层之间的计算。
    • 减少堆叠块的深度以改进优化。
    • 利用卷积运算(在适当的情况下)以提高其计算效率。
    • 在注意力机制中添加一个7x7可分离卷积(“位置感知器”),以隐式地编码位置信息。
  • 全面的任务支持: YOLO12 支持一系列核心计算机视觉任务:目标检测、实例分割、图像分类、姿势估计和旋转框检测 (OBB)。
  • 增强的效率: 与许多先前的模型相比,以更少的参数实现了更高的准确率,从而证明了速度和准确率之间更好的平衡。
  • 灵活部署: 专为跨各种平台部署而设计,从边缘设备到云基础设施。

第二步:YOLOv12网络结构

第三步:代码展示

# Ultralytics YOLO 🚀, AGPL-3.0 license from pathlib import Path from ultralytics.engine.model import Model from ultralytics.models import yolo from ultralytics.nn.tasks import ClassificationModel, DetectionModel, OBBModel, PoseModel, SegmentationModel, WorldModel from ultralytics.utils import ROOT, yaml_load class YOLO(Model): """YOLO (You Only Look Once) object detection model.""" def __init__(self, model="yolo11n.pt", task=None, verbose=False): """Initialize YOLO model, switching to YOLOWorld if model filename contains '-world'.""" path = Path(model) if "-world" in path.stem and path.suffix in {".pt", ".yaml", ".yml"}: # if YOLOWorld PyTorch model new_instance = YOLOWorld(path, verbose=verbose) self.__class__ = type(new_instance) self.__dict__ = new_instance.__dict__ else: # Continue with default YOLO initialization super().__init__(model=model, task=task, verbose=verbose) @property def task_map(self): """Map head to model, trainer, validator, and predictor classes.""" return { "classify": { "model": ClassificationModel, "trainer": yolo.classify.ClassificationTrainer, "validator": yolo.classify.ClassificationValidator, "predictor": yolo.classify.ClassificationPredictor, }, "detect": { "model": DetectionModel, "trainer": yolo.detect.DetectionTrainer, "validator": yolo.detect.DetectionValidator, "predictor": yolo.detect.DetectionPredictor, }, "segment": { "model": SegmentationModel, "trainer": yolo.segment.SegmentationTrainer, "validator": yolo.segment.SegmentationValidator, "predictor": yolo.segment.SegmentationPredictor, }, "pose": { "model": PoseModel, "trainer": yolo.pose.PoseTrainer, "validator": yolo.pose.PoseValidator, "predictor": yolo.pose.PosePredictor, }, "obb": { "model": OBBModel, "trainer": yolo.obb.OBBTrainer, "validator": yolo.obb.OBBValidator, "predictor": yolo.obb.OBBPredictor, }, } class YOLOWorld(Model): """YOLO-World object detection model.""" def __init__(self, model="yolov8s-world.pt", verbose=False) -> None: """ Initialize YOLOv8-World model with a pre-trained model file. Loads a YOLOv8-World model for object detection. If no custom class names are provided, it assigns default COCO class names. Args: model (str | Path): Path to the pre-trained model file. Supports *.pt and *.yaml formats. verbose (bool): If True, prints additional information during initialization. """ super().__init__(model=model, task="detect", verbose=verbose) # Assign default COCO class names when there are no custom names if not hasattr(self.model, "names"): self.model.names = yaml_load(ROOT / "cfg/datasets/coco8.yaml").get("names") @property def task_map(self): """Map head to model, validator, and predictor classes.""" return { "detect": { "model": WorldModel, "validator": yolo.detect.DetectionValidator, "predictor": yolo.detect.DetectionPredictor, "trainer": yolo.world.WorldTrainer, } } def set_classes(self, classes): """ Set classes. Args: classes (List(str)): A list of categories i.e. ["person"]. """ self.model.set_classes(classes) # Remove background if it's given background = " " if background in classes: classes.remove(background) self.model.names = classes # Reset method class names # self.predictor = None # reset predictor otherwise old names remain if self.predictor: self.predictor.model.names = classes

第四步:统计训练过程的一些指标,相关指标都有

第五步:运行预测代码

#coding:utf-8 from ultralytics import YOLO import cv2 # 所需加载的模型目录 path = 'models/best.pt' # 需要检测的图片地址 img_path = "TestFiles/000353.jpg" # 加载预训练模型 # conf 0.25 object confidence threshold for detection # iou 0.7 intersection over union (IoU) threshold for NMS model = YOLO(path, task='detect') results = model.predict(img_path, iou=0.5) # 检测图片 res = results[0].plot() cv2.imshow("YOLOv12 Detection", res) cv2.waitKey(0)

第六步:整个工程的内容

包含番茄农作物病害数据集、训练代码和预测代码

项目完整文件下载请见演示与介绍视频的简介处给出:➷➷➷

https://www.bilibili.com/video/BV16aByBXEgE/

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/16 13:35:46

Proteus使用教程小白指南:从安装到运行全流程

从零开始玩转Proteus:安装、仿真到单片机实战全解析你是不是也曾在学习单片机时,被一堆跳线、面包板和烧录器搞得焦头烂额?想验证一段代码,却因为接错一根线导致LED不亮、芯片“罢工”,甚至还得担心电源短路……其实&a…

作者头像 李华
网站建设 2026/2/16 1:59:08

14:大象喝水

""" 【题目名称】大象喝水 【题目来源】http://noi.openjudge.cn/ch0103/14/Author: 潘磊,just_panleijust.edu.cn Version: 1.0 """import math # 导入math库h, r map(int, input().split()) # 桶的深度h和底面半径r,…

作者头像 李华
网站建设 2026/2/18 8:46:22

STM32F103开发第一步:Keil5芯片库添加小白指南

STM32F103开发第一步:Keil5芯片库添加实战指南 你是不是刚买了块“蓝丸”(Blue Pill)开发板,满心欢喜地打开Keil5,准备写第一个LED闪烁程序,结果新建工程时—— 搜遍全网都找不到STM32F103这个型号&#…

作者头像 李华
网站建设 2026/2/3 3:41:42

构建高并发AI推理服务?TensorRT不可忽视的五大优势

构建高并发AI推理服务?TensorRT不可忽视的五大优势 在当今的AI系统部署中,一个训练得再完美的模型,若无法在生产环境中快速、稳定地响应请求,其价值便大打折扣。想象一下:电商平台的图像搜索需要在毫秒内返回结果&…

作者头像 李华
网站建设 2026/2/18 15:17:53

加班到凌晨的汽车软件工程师,都该懂autosar

开车时调个座椅加热、切换自动泊车模式,背后其实是无数个汽车电子部件在”悄悄沟通”。你可能没发现,十年前不同品牌的汽车,电子系统就像”鸡同鸭讲”——大众的座椅控制模块和宝马的空调系统,底层逻辑完全不兼容;哪怕…

作者头像 李华
网站建设 2026/2/9 18:53:04

GPU算力变现新思路:基于TensorRT镜像的高性能服务搭建

GPU算力变现新思路:基于TensorRT镜像的高性能服务搭建 在AI模型越来越“重”的今天,一个训练好的大模型摆在面前,真正考验它的不是准确率,而是——它能不能跑得快、撑得住、回本快。 这正是当前许多团队面临的现实困境&#xff1a…

作者头像 李华