基于ASF-YOLO融合空间特征和尺度特征的新型注意力尺度序列融合模型开发构建医学场景下细胞分割检测识别系统,以【BCC、DSB2018数据集为基准】

作者提出了一种新的基于注意尺度序列融合的YOLO框架(ASF-YOLO),该框架结合了空间和尺度特征,实现了准确快速的细胞实例分割。基于YOLO分割框架,我们使用尺度序列特征融合(SSFF)模块来增强网络的多尺度信息提取能力,并使用三重特征编码器(TPE)模块来融合不同尺度的特征图以增加详细信息。我们进一步引入了一种通道和位置注意机制(CPAM)来集成SSFF和TPE模块,该模块专注于信息通道和空间位置相关的小对象,以提高检测和分割性能。在两个细胞数据集上的实验验证表明,所提出的ASFYOLO模型具有显著的分割精度和速度。在2018年数据科学碗数据集上,它实现了0.91的盒mAP、0.887的掩码mAP和47.3 FPS的推理速度,优于最先进的方法。

首先看下实例效果:

官方论文在这里,如下所示:

YOLO框架一般由backbone、neck和head三个主要组件构成。backbone网络是卷积神经网络,用于从不同的粒度下提取图像特征。CSPDarknet53是基于YOLOv4进行改进的backbone网络,被用作YOLOv5的主干网络。它包含了C3模块(包括3个卷积层)和ConvBNSiLU模块。在YOLOv5和YOLOv8的backbone中,有5个级别的特征提取分支:P1、P2、P3、P4和P5,与YOLO网络的输出相关联。YOLOv5 v7和YOLOv8是基于YOLO的主流架构之一,不仅可以用于检测和分类任务,还可以处理分割任务。 

作者开发了一种新颖的特征融合网络架构,由两个主要组件网络组成,可以提供小目标分割的互补信息:
SSSF模块,它将来自多个尺度图像的全局或高级语义信息组合在一起;
TFE模块,它可以捕捉小目标目标的局部精细细节。将局部和全局特征信息相结合可以产生更准确的分割图。 

为了识别密集重叠的小目标,一种方法是通过放大图像以参考和比较不同尺度下的形状或外观变化。然而,由于YOLO的backbone网络中的不同特征层具有不同的尺寸,传统的FPN融合机制只对小尺寸特征图进行上采样,并将其添加到前一层特征中,从而忽略了较大尺寸特征层中丰富的详细信息。为此,研究人员提出了TFE(Texture Feature Enhancement)模块,它将大、中、小尺寸的特征进行分离,并添加了较大尺寸的特征图,然后进行特征放大以增强详细特征信息。 

为了整合详细特征信息和多尺度特征信息,研究人员提出了CPAM(Channel and Position Attention Module)。CPAM的结构如图5所示,它由两个部分组成。第一个部分是通道注意网络,它从TFE(输入1)接收输入,用于提取不同通道中包含的代表性特征信息。第二个部分是位置注意网络,它接收来自通道注意网络和SSFF(输入2)的输出,并进行叠加,用于引入位置信息。通过这种方式,CPAM能够融合不同注意力机制,综合利用通道和位置信息,以提高目标识别的性能。

想要进一步了解论文详情,建议还是自行移步阅读原论文,这里就不再赘述了。

作者同时开源了项目,地址在这里,如下所示:

目前还没有什么热度。

这里主要是基于两个医学场景下的数据集来进行实验的,简单看下数据集:

【BCC】

【DSB2018】

使用如下训练参数设置进行训练:

parser = argparse.ArgumentParser()
parser.add_argument('--weights', type=str, default='weights/yolov5l-seg.pt', help='initial weights path')
parser.add_argument('--cfg', type=str, default='models/segment/asf-yolo.yaml', help='model.yaml path')
parser.add_argument('--data', type=str, default='data/bcc.yaml', help='dataset.yaml path')
parser.add_argument('--hyp', type=str, default='data/hyps/hyp.scratch-low.yaml', help='hyperparameters path')
parser.add_argument('--epochs', type=int, default=100, help='total training epochs')
parser.add_argument('--batch-size', type=int, default=8, help='total batch size for all GPUs, -1 for autobatch')
parser.add_argument('--imgsz', '--img', '--img-size', type=int, default=640, help='train, val image size (pixels)')
parser.add_argument('--rect', action='store_true', help='rectangular training')
parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training')
parser.add_argument('--nosave', action='store_true', help='only save final checkpoint')
parser.add_argument('--noval', action='store_true', help='only validate final epoch')
parser.add_argument('--noautoanchor', action='store_true', help='disable AutoAnchor')
parser.add_argument('--noplots', action='store_true', help='save no plot files')
parser.add_argument('--evolve', type=int, nargs='?', const=300, help='evolve hyperparameters for x generations')
parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')
parser.add_argument('--cache', type=str, nargs='?', const='ram', help='image --cache ram/disk')
parser.add_argument('--image-weights', action='store_true', help='use weighted image selection for training')
parser.add_argument('--device', default='0', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%%')
parser.add_argument('--single-cls', action='store_true', help='train multi-class data as single-class')
parser.add_argument('--optimizer', type=str, choices=['SGD', 'Adam', 'AdamW'], default='SGD', help='optimizer')
parser.add_argument('--sync-bn', action='store_true', help='use SyncBatchNorm, only available in DDP mode')
parser.add_argument('--workers', type=int, default=8, help='max dataloader workers (per RANK in DDP mode)')
parser.add_argument('--project', default='runs/train-seg', help='save to project/name')
parser.add_argument('--name', default='improve', help='save to project/name')
parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')
parser.add_argument('--quad', action='store_true', help='quad dataloader')
parser.add_argument('--cos-lr', action='store_true', help='cosine LR scheduler')
parser.add_argument('--label-smoothing', type=float, default=0.0, help='Label smoothing epsilon')
parser.add_argument('--patience', type=int, default=100, help='EarlyStopping patience (epochs without improvement)')
parser.add_argument('--freeze', nargs='+', type=int, default=[0], help='Freeze layers: backbone=10, first3=0 1 2')
parser.add_argument('--save-period', type=int, default=-1, help='Save checkpoint every x epochs (disabled if < 1)')
parser.add_argument('--seed', type=int, default=0, help='Global training seed')
parser.add_argument('--local_rank', type=int, default=-1, help='Automatic DDP Multi-GPU argument, do not modify')

# Instance Segmentation Args
parser.add_argument('--mask-ratio', type=int, default=4, help='Downsample the truth masks to saving memory')
parser.add_argument('--no-overlap', action='store_true', help='Overlap masks train faster at slightly less mAP')

return parser.parse_known_args()[0] if known else parser.parse_args()

训练启动,日志输出如下:

训练完成截图如下所示:
 

等待训练完成后我们来看下具体的结果内容。

【BCC实验结果】

【F1】

F1分数是精确率和召回率的调和平均值,它综合考虑了两者的性能指标。F1值曲线可以帮助我们确定在不同精确率和召回率之间找到一个平衡点,以选择最佳的阈值。

【Recall】

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

【Precision】

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

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

【Batch实例】

到这里我们完成了在BCC数据集的完整实验内容,接下来我们开始构建基于DSB2018数据集上的实验内容,由于整体的建模操作过程同BCC数据集是完全一致的,所以这里就不再赘述相关节点的内容,直接来看对应的实践,训练输出如下:

训练完成截图如下:

等待训练完成后我们来看下具体的结果内容。

【DSB2018实验结果】

【F1】

F1分数是精确率和召回率的调和平均值,它综合考虑了两者的性能指标。F1值曲线可以帮助我们确定在不同精确率和召回率之间找到一个平衡点,以选择最佳的阈值。

【Recall】

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

【Precision】

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

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

【Batch实例】

整体训练可视化如下:

为了使用方便,这里也开发了对应的可视化界面系统,实例推理效果如下所示:

到这里本文的实践学习就全部结束了,感兴趣的话也都可以自己动手实践一下!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pybind11:对比C++和Python解线性方程组的速度

前言 上篇博客介绍了如何在用pybind11实现ndarray和C数组的转换自由&#xff0c;pybind11&#xff1a;实现ndarray转C原生数组&#xff08;没看过的朋友可以去看一看&#xff09;下面我们以一个实际的算法例子演示一下如何使用这个技术&#xff0c;方便的实现 Python 调用 C 写…

基于linux系统的Tomcat+Mysql+Jdk环境搭建(三)centos7 安装Tomcat

Tomcat下载官网&#xff1a; Apache Tomcat - Which Version Do I Want? JDK下载官网&#xff1a; Java Downloads | Oracle 中国 如果不知道Tomcat的哪个版本应该对应哪个版本的JDK可以打开官网&#xff0c;点击Whitch Version 下滑&#xff0c;有低版本的&#xff0c;如…

Caused by: java.net.ConnectException: 拒绝连接: hadoop104/192.168.124.130:4142

项目场景&#xff1a;hadoop102接收消息&#xff0c;自定义拦截器&#xff0c;包含hello的发往hadoop103,不包含的发往hadoop104 报错原因&#xff1a; 原因1&#xff1a; 应该先开启接收方&#xff08;服务端&#xff09;&#xff0c;hadoop103,hadoop104,最后开启hadoop10…

编译android的C版本Lua库

本文讲述如何使用android studio 编译最新版本的Lua开源库),请自行下载。 我们提供的Demo,可以自行下载,工程结构如下: 本文编译的是Lua 5.4.6的版本,编译采用cmake的方式,我们支持编译静态库和动态库(我们在这一讲里:“Lua与***C在Android上的互调”是使用静态库)…

智能优化算法应用:基于JAYA算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于JAYA算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于JAYA算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.JAYA算法4.实验参数设定5.算法结果6.参考文献7.MA…

大数据与深度挖掘:如何在数字营销中与研究互动

数字营销最吸引人的部分之一是对数据的内在关注。 如果一种策略往往有积极的数据&#xff0c;那么它就更容易采用。同样&#xff0c;如果一种策略尚未得到证实&#xff0c;则很难获得支持进行测试。 数字营销人员建立数据信心的主要方式是通过研究。这些研究通常分为两类&…

Vue3快速上手笔记

Vue3快速上手 1.Vue3简介 2020年9月18日&#xff0c;Vue.js发布3.0版本&#xff0c;代号&#xff1a;One Piece&#xff08;海贼王&#xff09;耗时2年多、2600次提交、30个RFC、600次PR、99位贡献者github上的tags地址&#xff1a;https://github.com/vuejs/vue-next/release…

Docker单机部署OceanBase

文章目录 说明机器软硬件要求指导文档本次部署环境说明 OceanBase单机部署&#xff08;Docker&#xff09;一&#xff1a;拉取 OceanBase 数据库相关镜像二&#xff1a;启动 OceanBase 数据库实例完整启动日志展示 三&#xff1a;连接实例遇到报错&#xff1a;没有mysql客户端 …

selenium-grid4.3.0两种模式记录

selenium-grid4.3.0两种模式记录 本文运行&#xff0c;需要提前配置好Java11以及安装好Chrom、Firefox、Safari其中一个浏览器&#xff0c;如果是Chrom、Firefox需要下载对应版本的驱动&#xff0c;并给 webdriver 配置环境变量&#xff0c;Safari浏览器Mac系统会自带&#xf…

HiveSql语法优化二 :join算法

Hive拥有多种join算法&#xff0c;包括Common Join&#xff0c;Map Join&#xff0c;Bucket Map Join&#xff0c;Sort Merge Buckt Map Join等&#xff0c;下面对每种join算法做简要说明&#xff1a; Common Join Common Join是Hive中最稳定的join算法&#xff0c;其通过一个M…

案例067:基于微信小程序的小区租拼车管理信息系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

【MySQL】(DDL) 数据库操作

创建&#xff1a; create database 数据库名称; //创建数据库 create database if not exists 数据库名 ; //创建数据库并添加判断 &#xff08;如果存在就不创建不存在就创建 &#xff09; create database 数据库名 default charset 字符集 ; //创建数据库并设置字符集 查…

计算机毕业设计 基于SpringBoot的二手物品交易管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

漏刻有时数据可视化Echarts组件开发(42)动态创建DIV容器

效果展示 引入外部文件 <script src"js/jquery.min.js"></script><script type"text/javascript" src"js/echarts.5.4.3.min.js"></script>CSS层叠样式表 实现一行3列效果&#xff0c;自动换行&#xff1b; .ecbox {he…

HNU-计算机网络-实验3-应用层和传输层协议分析(PacketTracer)

计算机网络 课程基础实验三应用层和传输层协议分析&#xff08;PacketTracer&#xff09; 计科210X 甘晴void 202108010XXX 【给助教的验收建议】 如果是助教&#xff0c;比起听同学读报告&#xff0c;更好的验收方式是随机抽取一个场景&#xff08;URL/HTTPS/FTP&#xff09…

Kafka-日志索引

Kafka的Log日志梳理 Topic下的消息是如何存储的&#xff1f; 在搭建Kafka服务时&#xff0c;在server.properties配置文件中通过log.dir属性指定了Kafka的日志存储目录。 实际上&#xff0c;Kafka的所有消息就全都存储在这个目录下。 这些核心数据文件中&#xff0c;.log结尾…

Flask学习三:模型操作

ORM flask 通过Model操作数据库&#xff0c;不管你的数据库是MySQL还是Sqlite&#xff0c;flask自动帮你生成相应数据库类型的sql语句&#xff0c;所以不需要关注sql语句和类型&#xff0c;对数据的操作flask帮我们自动完成&#xff0c;只需要会写Model就可以了 flask使用对象关…

[渗透测试学习] Keeper - HackTheBox

信息搜集 nmap扫描一下端口 nmap -sV -sC -p- -v --min-rate 1000 10.10.11.227发现有两个端口&#xff0c;22端口为ssh服务&#xff0c;80端口是http服务 尝试访问一下80端口 提示我们要访问tickets.keeper.htb/rt/&#xff0c;访问发现不行 那么把该域名添加到hosts里面 …

数据库——关系数据的规范化:范式判断【知识点罗列+例题讲解】

知识点罗列&#xff1a; 各种范式之间的关系 1.第一范式1NF&#xff1a; 如果关系模式R中所有的属性都具有原子性&#xff0c;均是不可再分的&#xff08;一个属性不能再被分解成更小的数据单元&#xff09;&#xff0c;则称R属于第一范式&#xff0c;简称1NF&#xff0c;记作R…

springMVC-模型数据的处理

一、数据放入到request域当中 1、把获取的数据放入request域中&#xff0c; 方便在跳转页面去显示 <a>添加主人信息</a> <form action"vote/vote04" method"post" >主人id&#xff1a;<input type"text" name"id&q…