AI助力农作物自动采摘,基于YOLOv3全系列【yolov3tiny/yolov3/yolov3spp】参数模型开发构建作物生产场景下番茄采摘检测计数分析系统

本文主要是介绍AI助力农作物自动采摘,基于YOLOv3全系列【yolov3tiny/yolov3/yolov3spp】参数模型开发构建作物生产场景下番茄采摘检测计数分析系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

去年十一那会无意间刷到一个视频展示的就是德国机械收割机非常高效自动化地24小时不间断地在超广阔的土地上采摘各种作物,专家设计出来了很多用于采摘不同农作物的大型机械,看着非常震撼,但是我们国内农业的发展还是相对比较滞后的,小的时候拔草是一个人一列蹲在地里就在那埋头拔草,不知道什么时候才能走到地的尽头,小块的分散的土地太多基本上都是只能人工手工来取收割,大点的连片的土地可以用收割机来收割,不过收割机基本都是用来收割小麦的,最近几年好像老家也能看到用于收割玉米的机器了不过相对还是比较少的,玉米的收割我们基本上还是人工来收割的,不仅累效率还低遇上对玉米叶片过敏的就更要命了。。。。闲话就扯到这里了。

有时候经常在想我们的农业机械化自动化什么时候能再向前迈进一大步,回顾德国的工业机械,在视频展示的效果中,其实很关键的主要是两部分,一部分是机器视觉定位检测识别,另一部分是机械臂传动轴,两部分相互配合才能完成采摘工作,本文的主要想法是想要基于YOLOv3开发构建用于番茄采摘场景下的目标检测系统,前文实践如下:

《AI助力农作物自动采摘,基于YOLOv7【tiny/l/x】不同系列参数模型开发构建作物生产场景下番茄采摘检测计数分析系统》

《AI助力农作物自动采摘,基于YOLOv8全系列【n/s/m/l/x】参数模型开发构建作物生产场景下番茄采摘检测计数分析系统》

《AI助力农作物自动采摘,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建作物生产场景下番茄采摘检测计数分析系统》

首先看下实例效果:

简单看下实例数据情况:

本文是选择的比较经典的也是比较古老的YOLOv3来进行模型的开发,YOLOv3(You Only Look Once v3)是一种目标检测算法模型,它是YOLO系列算法的第三个版本。该算法通过将目标检测任务转化为单个神经网络的回归问题,实现了实时目标检测的能力。

YOLOv3的主要优点如下:

实时性能:YOLOv3采用了一种单阶段的检测方法,将目标检测任务转化为一个端到端的回归问题,因此具有较快的检测速度。相比于传统的两阶段方法(如Faster R-CNN),YOLOv3能够在保持较高准确率的情况下实现实时检测。

多尺度特征融合:YOLOv3引入了多尺度特征融合的机制,通过在不同层级的特征图上进行检测,能够有效地检测不同尺度的目标。这使得YOLOv3在处理尺度变化较大的场景时表现出较好的性能。

全局上下文信息:YOLOv3在网络结构中引入了全局上下文信息,通过使用较大感受野的卷积核,能够更好地理解整张图像的语义信息,提高了模型对目标的识别能力。

简洁的网络结构:YOLOv3的网络结构相对简洁,只有75个卷积层和5个池化层,使得模型较易于训练和部署,并且具有较小的模型体积。

YOLOv3也存在一些缺点:

较低的小目标检测能力:由于YOLOv3采用了较大的感受野和下采样操作,对于小目标的检测能力相对较弱。当场景中存在大量小目标时,YOLOv3可能会出现漏检或误检的情况。

较高的定位误差:由于YOLOv3将目标检测任务转化为回归问题,较粗糙的特征图和较大的感受野可能导致较高的定位误差。这意味着YOLOv3在需要较高精度的目标定位时可能会受到一定的限制。

YOLOv3是YOLO系列里程碑性质的模型,随着不断地演变和发展,目前虽然已经在性能上难以与YOLOv5之类的模型对比但是不可否认其做出的突出贡献。

训练数据配置文件如下:

# path
train: ./dataset/images/train/
val: ./dataset/images/test/# number of classes
nc: 1# class names
names: ['tomato']

我们开发构建了yolov3全系列的参数模型,包含:yolov3-tiny、yolov3和yolov3-spp,实验阶段保持完全相同的参数设置,等待训练完成我们来整体对比可视化。

【F1值曲线】
F1值曲线是一种用于评估二分类模型在不同阈值下的性能的可视化工具。它通过绘制不同阈值下的精确率(Precision)、召回率(Recall)和F1分数的关系图来帮助我们理解模型的整体性能.F1分数是精确率和召回率的调和平均值,它综合考虑了两者的性能指标。F1值曲线可以帮助我们确定在不同精确率和召回率之间找到一个平衡点,以选择最佳的阈值。

【loss曲线】

【Recall曲线】
召回率曲线(Recall Curve)是一种用于评估二分类模型在不同阈值下的召回率性能的可视化工具。它通过绘制不同阈值下的召回率和对应的精确率之间的关系图来帮助我们了解模型在不同阈值下的表现。召回率(Recall)是指被正确预测为正例的样本数占所有实际为正例的样本数的比例。召回率也被称为灵敏度(Sensitivity)或真正例率(True Positive Rate)。

【Precision曲线】
精确率曲线(Precision-Recall Curve)是一种用于评估二分类模型在不同阈值下的精确率性能的可视化工具。它通过绘制不同阈值下的精确率和召回率之间的关系图来帮助我们了解模型在不同阈值下的表现。精确率(Precision)是指被正确预测为正例的样本数占所有预测为正例的样本数的比例。召回率(Recall)是指被正确预测为正例的样本数占所有实际为正例的样本数的比例。

【mAP0.5】

【mAP0.5:0.95】

从实验结果综合对比来看不难看出:tiny系列的模型效果最差,被其他系列的模型拉开了明显的差距,yolov3狠人yolov3-spp两款模型达到了相近的性能,且参数量相近。我们考虑最终选择使用yolov3系列的模型来作为最终的推理模型。

离线推理实例如下所示:

训练可视化如下所示:

Batch实例如下:

感兴趣的话也都可以自行动手尝试下!

如果自己不具备开发训练的资源条件或者是没有时间自己去训练的话这里我提供出来对应的训练结果可供自行按需索取。

单个模型的训练结果默认YOLOv3-tiny

 全系列三个模型的训练结果总集

这篇关于AI助力农作物自动采摘,基于YOLOv3全系列【yolov3tiny/yolov3/yolov3spp】参数模型开发构建作物生产场景下番茄采摘检测计数分析系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/683974

相关文章

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

python中Hash使用场景分析

《python中Hash使用场景分析》Python的hash()函数用于获取对象哈希值,常用于字典和集合,不可变类型可哈希,可变类型不可,常见算法包括除法、乘法、平方取中和随机数哈希,各有优缺点,需根... 目录python中的 Hash除法哈希算法乘法哈希算法平方取中法随机数哈希算法小结在Python中,

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

Java Stream的distinct去重原理分析

《JavaStream的distinct去重原理分析》Javastream中的distinct方法用于去除流中的重复元素,它返回一个包含过滤后唯一元素的新流,该方法会根据元素的hashcode和eq... 目录一、distinct 的基础用法与核心特性二、distinct 的底层实现原理1. 顺序流中的去重

C++ 检测文件大小和文件传输的方法示例详解

《C++检测文件大小和文件传输的方法示例详解》文章介绍了在C/C++中获取文件大小的三种方法,推荐使用stat()函数,并详细说明了如何设计一次性发送压缩包的结构体及传输流程,包含CRC校验和自动解... 目录检测文件的大小✅ 方法一:使用 stat() 函数(推荐)✅ 用法示例:✅ 方法二:使用 fsee

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF