【果树农药喷洒机器人】Part4:果树冠层图像实例分割模型优化

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨
📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】
📢:文章若有幸对你有帮助,可点赞 👍 收藏 ⭐不迷路🙉
📢:内容若有错误,敬请留言 📝指正!原创文,转载请注明出处

文章目录

  • 一、引言
  • 二、数据集制作
    • 2.1图像采集
    • 2.2图像标注与增强
  • 三、构建柑橘树冠实例分割模型结构
    • 3.1优化特征提取网络
    • 3.2U-Net++替换FCN


一、引言

为准确获取柑橘树冠的生长信息,实现果树喷药机器人的精准喷施,对处于多种生长阶段的柑橘树冠进行图像分割为基础前提。而对树冠进行图像分割过程中面临的诸多问题。首先,难以从众多树冠候选个体中选择喷施对象。再者,树冠边缘的复杂性导致分割不够精细,从而影响对树冠特征参数的准确评估。
本章选取果园内的柑橘树为试验对象,基于深度相机搭建视觉感知系统,采集树冠的彩色和深度图像作为检测样本,用于训练实例分割模型,使用深度图像分割法剔除有效喷施范围外的冗余图像信息。为提高分割精度,提出一种在Mask R-CNN基础上改进的实例分割模型,称为MSEU R-CNN。将SE模块[68]与ResNet[69]相融合作为MSEU R-CNN的骨干网络,以提高对树冠特征的提取能力,抑制无关特征的提取;在掩膜分支中引入U-Net++语义分割网络,以进一步提高图像分割质量。算法具体实现流程如图3-1所示。
在这里插入图片描述

二、数据集制作

2.1图像采集

本试验数据采集于浙江省台州市椒江区的某个柑橘种植园,图像采集时间为2022年2月5日至8日,上午9:00至下午6:00。使用Intel公司生产的型号为RealSense D435i深度相机采集了766张自然环境下的柑橘树RGB图像和深度图像,分辨率分别为1280像素 × 720像素、848像素 × 480像素,并保存为PNG格式。为尽可能地模拟柑橘树喷药机器人的真实作业环境,拍摄了包括不同光照强度(清晨、中午、下午)、不同光照角度(逆光、顺光)、多种背景干扰、不同拍摄角度(正视、侧视)以及不同生长时期(幼苗期、茂盛期、结果期)的柑橘树图像,示例图像如图3-2所示。
在这里插入图片描述

2.2图像标注与增强

柑橘树冠形状大多是不规则的,其边缘极为复杂,若用传统的标注工具(Labelme、Labelimg)来精细化地标注树冠,必然耗费大量的时间。本文采用交互式标注工具EIseg[71]对彩色图像和RGB-D图像中的柑橘树冠进行自动标注。该标注软件具有智能交互式功能,通过多次点击图像中树冠区域,软件便能自动分割出整个树冠,大大节省了图像标注的时间成本。由图3-4的RGB-D和彩色树冠图像的标注结果可知,EIseg自动生成的轮廓紧贴树冠边缘,标注结果的精度较高,可作为掩膜标签。之后输出COCO格式的标注文件,标签类别共4种,包括幼苗期树冠、茂盛期树冠、结果期树冠以及背景。图像标注完成后,为提高实例分割模型检测树冠的泛化能力,通过随机亮度变化、增强对比度、随机旋转和添加高斯噪声对原始图像数据进行增强,以幼苗期的橘树为例,增强过程如图3-5所示。
在这里插入图片描述

在这里插入图片描述

三、构建柑橘树冠实例分割模型结构

Mask R-CNN作为经典的实例分割模型,通过在Faster R-CNN基础上引入全卷积神经网络(Fully Convolutional Networks,FCN),实现了像素级的多目标检测与分割。为进一步提高该模型的性能,以实现对多生长周期柑橘树冠的精确分割,本文通过改进Mask R-CNN,提出MSEU R-CNN实例分割模型,其整体结构如图3-6所示。
SE注意力机制模块与ResNet相融合,结合特征金字塔网络(Feature Pyramid Networks,FPN)组成主干网络(Backbone),对输入图像进行特征提取,并输出大量候选框(Anchors)。然后,使用区域建议网络(Region Proposal Network,RPN)筛选候选框,保留可能存在树冠的区域(Region of Interest,ROI),接着ROI被传输到感兴趣区域对齐层(Region of Interest Align,ROIAlign),通过双线性插值方式将其映射成固定维数的特征向量。最后将映射完成的特征输入到三条分支,其中全连接层负责树冠的分类和包围框回归;U-Net++掩膜分支对检测到的树冠进行语义分割,生成高精度的树冠掩膜。

在这里插入图片描述

3.1优化特征提取网络

ResNet残差模块结构如图3-7(a)所示,具备良好的特征提取能力,但只关注图像特征的空间信息,忽略了特征通道间的相关性,导致图像特征信息未被充分利用。SE模块是由Hu等提出的一种注意力机制结构,本文通过嵌入SE模块对ResNet进行优化,构造成新的特征提取网络SE-ResNet,其结构如图3-7(b)所示。SE模块通过对图像特征间的相关性进行建模,重新标定不同特征通道的权重,并根据之前的特征通道通过乘法对其进行加权,实现各通道上对原始特征的重校准,增强对关键通道域的注意力,抑制无效特征通道。如图3-7(b)虚线框所示,SE模块结构主要包括压缩、激励操作以及重校准操作。
在这里插入图片描述

由于幼苗期树冠相比茂盛期和结果期要小很多,为提高对幼苗树冠这类小目标的检测能力,经典方法是在训练或测试阶段,采用图像金字塔方式对图片进行多尺度变化增强,但会极大地增加图像金字塔计算量。本章采用特征金字塔网络,以避免上述问题的出现,同时也能较好地处理物体检测中多尺度变化问题,其网络结构如图3-8所示。SE-ResNet由5个阶段组成,因为conv1占用的很大一部分内存,所以没有被包含在金字塔中。对应于conv2,conv3,conv4与conv5,分别生成一个不同尺度的特征图,表示为[C2, C3, C4, C5]。使用上述由SE-ResNet输出的特征图映射作为FPN的输入,建立特征金字塔,并输出新特征[P2, P3, P4, P5]。
在这里插入图片描述

3.2U-Net++替换FCN

Mask R-CNN的掩膜分支采用FCN提取图像的语义信息,对局部语义信息有较好的敏感度,但忽略了上下文信息,导致图像特征传输过程中,浅层网络的像素位置特征会有一定程度的丢失。为更好地结合图像的浅层与深层特征,MSEU R-CNN模型引入了U-Net++,通过替换原始掩膜分支以提升模型的分割性能。
如图3-9所示,U-Net++由卷积单元、下采样和上采样模块以及卷积单元之间的跳过连接组成,每个节点代表一个卷积模块,将4个不同语义层级的特征图进行组合,充分利用不同层的图像特征,可以提升模型的泛化性与稳定性。通过在U-Net[76]模型基础上重新设计了跳过路径,U-Net++利用密集的跳层链接实现对各卷积层多尺度特征的融合,从而实现更加密集且灵活的特征传播;从垂直方向上看,各节点均融合来自前一节点不同分辨率的特征图像,最大程度地增加每个特征层间的相互联系,这种多尺度特征融合结构从而提高了模型的分割精度和收敛速度。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/87377.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java旋转数组中的最小数字(图文详解版)

目录 1.题目描述 2.题解 分析 具体实现 方法一(遍历): 方法二(排序): 方法三(二分查找): 1.题目描述 有一个长度为 n 的非降序数组,比如[1,2,3,4,5]&a…

使用Python发送HTML格式的邮件

使用Python发送HTML格式的邮件 😇博主简介:我是一名正在攻读研究生学位的人工智能专业学生,我可以为计算机、人工智能相关本科生和研究生提供排忧解惑的服务。如果您有任何问题或困惑,欢迎随时来交流哦!😄 …

宿舍管理系统--前后端分离式项目架构流程复盘(三万字详解)

文章目录 🐒个人主页🏅JavaEE系列专栏📖前言:【🎇前端】先创建Vue-cli项目(版本2.6.10,仅包含babel),请选择此项目并创建 【整理简化项目模板】【🎀创建路由】…

R语言安装包Seurat

环境Ubuntu22,R4.1 also installing the dependencies ‘curl’, ‘openssl’, ‘httr’, ‘plotly’ R包安装的时候报了这个错误ERROR: dependencies httr, plotly are not available for package Seurat 解决方法,退出R,在terminal中键入…

C语言——指针进阶

本章重点 字符指针数组指针指针数组数组传参和指针传参函数指针函数指针数组指向函数指针数组的指针回调函数指针和数组面试题的解析 1. 字符指针 在指针的类型中我们知道有一种指针类型为字符指针 char* int main() { char ch w; char *pc &ch; *pc w; return 0; }…

Flink学习记录

可以快速搭建一个Flink编写程序 mvn archetype:generate \-DarchetypeGroupIdorg.apache.flink \-DarchetypeArtifactIdflink-quickstart-java \-DarchetypeVersion1.17.1 \-DgroupIdcom.zxx.langhuan \-DartifactIdlanghuan-flink \-Dversion1.0.0-SNAPSHOT \-Dpackagecom.zx…

ffmepg滤镜

视频按顺时针方向旋转90度 ffplay -vf transpose1 -i juren-30s.mp4 ffplay -f lavfi -i testsrc -vf transpose1 -f lavfi -i testsrc这个滤镜是ffmpeg给用户的一个测试使用的视频 视频水平翻转(左右翻转) -vf hflip 实现慢速播放,声音速度是原始速度的50% ffpla…

智慧家庭如何落地?三翼鸟把答案写在用户家里

近年来,学术界流行一句话,“把论文写在中国大地上”。 一项新技术从实验室到千万家,落地难、转化低,是技术创新经常碰到的问题。所以,如何让新技术扎根大地、扎根真实需求,普惠人间,是中国产学研…

构建Docker容器监控系统 (1)(Cadvisor +InfluxDB+Grafana)

目录 Cadvisor InfluxDBGrafana 1. Cadvisor 2.InfluxDB 3.Grafana 开始部署: 下载组件镜像 创建自定义网络 创建influxdb容器 创建数据库和数据库用户 创建Cadvisor 容器 准备测试镜像 创建granafa容器 访问granfana 添加数据源 Add data source 新建 …

开发过程中遇到的问题以及解决方法

巩固基础,砥砺前行 。 只有不断重复,才能做到超越自己。 能坚持把简单的事情做到极致,也是不容易的。 开发过程中遇到的问题以及解决方法 简单易用的git命令 git命令: 查看有几个分支:git branch -a 切换分支&#…

设计模式(4)装饰模式

一、介绍: 1、应用场景:把所需的功能按正确的顺序串联起来进行控制。动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。 当需要给一个现有类添加附加职责,而又不能采用生成子类的方法…

Linux查看GPU显卡/CPU内存/硬盘信息

显卡信息命令/CPU内存/硬盘 1.显卡2、CPU内存3、硬盘 1.显卡 nvidia-smi nvidia-smi(显示一次当前GPU占用情况) nvidia-smi -l(每秒刷新一次并显示) watch -n 5 nvidia-smi (其中,5表示每隔6秒刷新一次终端…

2498. 青蛙过河 II;2568. 最小无法得到的或值;1954. 收集足够苹果的最小花园周长

2498. 青蛙过河 II 核心思想:这题有点开脑洞,就是如果想让代价最小只能是隔一个石头跳,因为其他方法的路径都会形成比这种方法大的结果,然后我们只需要统计出间隔石头的最大值即可。 2568. 最小无法得到的或值 核心思想&#xf…

在Ubuntu中使用Docker启动MySQL8的天坑

写在前面 简介: lower_case_table_names 是mysql设置大小写是否敏感的一个参数。 1.参数说明: lower_case_table_names0 表名存储为给定的大小和比较是区分大小写的 lower_case_table_names 1 表名存储在磁盘是小写的,但是比较的时候是不区…

白帽黑帽与linux安全操作

目录 白帽黑帽 Linux安全 白帽黑帽 白帽(White Hat)和黑帽(Black Hat)通常用于描述计算机安全领域中的两种不同角色。白帽黑客通常被认为是合法的安全专家,他们通过合法途径寻找和修复安全漏洞,帮助企业和…

Unity之ShaderGraph 节点介绍 Procedural节点

程序化 噪声Gradient Noise(渐变或柏林噪声)Simple Noise(简单噪声)Voronoi(Voronoi 噪声) 形状Ellipse(椭圆形)Polygon(正多边形)Rectangle(矩形…

JavaScript 运行机制详解:再谈Event Loop

一、为什么JavaScript是单线程? JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊。 JavaScript的单线程,与它的用途有关。…

【JVM】类装载的执行过程

文章目录 类装载的执行过程1.加载2.验证3.准备4.解析5.初始化6.使用7.卸载 类装载的执行过程 类装载总共分为7个过程,分别是 加载,验证,准备、解析、初始化、使用、卸载 1.加载 将类的字节码文件加载到内存(元空间)中。这一步会…

AWS中Lambda集成SNS

1.创建Lambda 在Lambda中,创建名为AWSSNSDemo的函数 use strict console.log(loading function); var aws require(aws-sdk); var docClient new aws.DynamoDB.DocumentClient(); aws.config.regionap-southeast-1;exports.handler function(event,context,cal…

详细记录Pycharm配置已安装好的Conda虚拟环境

当安装好conda环境之后,想要在Pycharm中使用,那么就要在Pycharm中导入,我这里使用的pycharm-professional-2023.2这个版本,下面是详细步骤: 1.打开File->Settings: 2.找到Project——>Python Inter…