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

news2025/4/17 5:37:19

文章目录

  • 一、引言
  • 二、数据集制作
    • 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.coloradmin.cn/o/843266.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

职责链模式(C++)

定义 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。 应用场景 在软件构建过程中,一个请求可能被多个对象处理,…

防火墙第二次作业

一、什么是防火墙? 百度给出个一个定义:防火墙技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安全性的一种技术。 通俗的来讲&#…

wordpress 打开缓慢处理

gravatar.com 头像网站被墙 追踪发现请求头像时长为21秒 解决方案一 不推荐,容易失效,网址要是要稳定为主,宁愿头像显示异常,也不能网址打不开 网上大部分搜索到的替换的CDN网址都过期了,例如:gravatar.du…

2023眼瞅着过半了,外包到底有没有前途?进来看看

讲一下我的故事和想法,你们自己寻思一下 我25岁,中级测试,外包,薪资13.5k,人在上海。 内卷什么的就不说了,而且人在外包那些高级精英年薪大几十的咱也接触不到,就说说外包吧。 假设以我为界限…

SpringCloud整体架构概览

什么是SpringCloud 目标 协调任何服务,简化分布式系统开发。 简介 构建分布式系统不应该是复杂的,SpringCloud对常见的分布式系统模式提供了简单易用的编程模型,帮助开发者构建弹性、可靠、协调的应用程序。SpringCloud是在SpringBoot的基…

GPU显存泄露/显存溢出/显存爆炸 解决方案

问题描述 最近在跑一个基于pytorch的强化学习代码,在训练过程中显存增大非常明显,迭代不到200个iteration就可以占据70G的显存。由于博主是第一次在pytorch实现的强化学习算法上加入自己的实现,很没有应对经验,现将调试过程记录下…

Docker制作SpringBoot镜像

Dcokerfile目录 编写Dockerfile FROM openjdk:8 #发布到网上时只会把jar包和Dockerfile发布上去RUN mkdir -p /opt/javaCOPY app.jar /opt/java/app.jar #地址映射 #CMD ["--server.port8080"] #对外暴露端口(可以任意修改) EXPOSE 15009 #执行命令 #ENTRYPOINT [&q…

linux系统为什么需要mount

mount 命令用来挂载文件系。 根据百度百科:mount是Linux下的一个命令,它可以将分区挂接到Linux的一个文件夹下,从而将分区和该目录联系起来,因此我们只要访问这个文件夹,就相当于访问该分区了。 比如我在NAND FLASH上…

微信小程序开发【从0到1~入门篇】2023.08

一个小程序主体部分由三个文件组成,必须放在项目的根目录,如下: 文件必须作用app.js是小程序逻辑app.json是小程序公告配置app.wxss否小程序公告样式表 3. 小程序项目结构 一个小程序页面由四个文件组成,分别是: 文…

FL Studio Producer Edition 21 v21.0.3 Build 3517 Windows/mac官方中文版

FL Studio Producer Edition 21 v21.0.3 Build 3517 Windows FL Studio Producer Edition 21 v21.0.3 Build 3517 Windows/mac官方中文版是一个完整的软件音乐制作环境或数字音频工作站(DAW)。它代表了 25 多年的创新发展,将您创作、编曲、录…

Spring Boot通过切面实现方法耗时情况

Spring Boot通过切面实现方法耗时情况 依赖 <dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.9.1</version></dependency>自定义注解 package com.geekmice.springbootself…

【广州华锐视点】海上石油钻井VR在线实训平台

随着科技的不断发展&#xff0c;VR元宇宙平台已经成为了越来越多领域的培训工具。在海上石油钻井实训中&#xff0c;VR元宇宙平台也能够发挥重要的作用&#xff0c;为学员提供更加真实、直观的培训体验。 首先&#xff0c;VR元宇宙平台可以模拟真实的海上钻井作业环境。通过VR眼…

项目出bug,找不到bug,如何拉回之前的版本

1.用gitee如何拉取代码 本文为转载于「闪耀太阳a」的原创文章原文链接&#xff1a;https://blog.csdn.net/Gufang617/article/details/119929145 怎么从gitee上拉取代码 1.首先找到gitee上想要拉取得代码URL地址 点击复制这里的https地址 1 ps:&#xff08;另外一种方法&…

C++/Qt读写ini文件

今天介绍C/Qt读写ini文件&#xff0c;ini文件一般是作为配置文件来使用&#xff0c;比如一些程序的一些默认参数会写在一个ini文件中&#xff0c;程序运行时会进行对应的参数读取&#xff0c;详细可以查看百度ini文件的介绍。https://baike.baidu.com/item/ini%E6%96%87%E4%BB%…

Linux命令200例:sed对文本进行修改、替换和删除等操作的强大工具(常用)

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &…

Framework才是Android 开发的热门技术~

相信大家都有感觉到今年的市场竞争的激烈&#xff0c;投出简历并不像往年一样立马就有回应&#xff0c;大多是这种情况&#xff1a;投出简历没有停歇&#xff0c;状态却是70%未读&#xff0c;30%已读。 这种情况并不是说市场落寞了&#xff0c;不招人了&#xff0c;而是经过了…

Windows下调试UEFI程序:Visual Studio调试

以edk2\MdeModulePkg\Application\HelloWorld这个项目作为调试目标。 1. 使用VS2017建立Makefile工程 VS2017, 新建 project&#xff0c;取名X64dbg_vs。 Visual C > Other > Makefile Project, 注意项目路径为HelloWord程序路径。 随便填写config中的字符串&#xff…

决策树和随机森林对比

1.用accuracy来对比 # -*-coding:utf-8-*-""" accuracy来对比决策树和随机森林 """ from sklearn.tree import DecisionTreeClassifier from sklearn.ensemble import RandomForestClassifier from sklearn.datasets import load_wine#(178, 13…

C++ STL vector

目录 一.认识vector 二.vector的使用 1.vector的构造函数 2.vector的迭代器 2.1 begin&#xff08;&#xff09;&#xff0c;end&#xff08;&#xff09; 2.2 rbegin&#xff08;&#xff09;&#xff0c;rend&#xff08;&#xff09; 2.3 迭代器初始化对象 3. vector…

宝塔Linux面板点击SSL闪退打不开?怎么解决?

宝塔Linux面板点击SSL证书闪退如何解决&#xff1f;旧版本的宝塔Linux面板确实存在这种情况&#xff0c;如何解决&#xff1f;升级你的宝塔Linux面板即可。新手站长分享宝塔面板SSL闪退的解决方法&#xff1a; 宝塔面板点击SSL证书闪退解决方法 问题&#xff1a;宝塔Linux面板…