基于yolov5-v7.0开发构建裸土实例分割检测识别模型
创始人
2024-05-07 08:23:25
0

yolov5在v7.0的版本中加入了对图像实例分割的全面支持,这里主要就是想基于v7.0的分支来开发构建裸土分割模型,其实在实际计算的时候模型是可以连带着检测任务一起输出结果的,这里我从结果形式上面直观来看应该就是在推理阶段直接基于分割的结果计算得到的检测框吧,还没有具体去看这块的具体逻辑,但是猜测应该是这样的。

首先来看下效果图:

这里我直接使用的是官方v7.0分支的代码,项目地址在这里,如下所示:

如果不会使用可以参考我的教程:

《基于yolov5-v7.0开发实践实例分割模型超详细教程》

这里就不再赘述了。

简单看下数据集:

标注数据实例如下所示:

0 0.37676635514018686 0.6521515867310259 0.2720934579439252 0.6739755571531272 0.18517757009345792 0.6842456608811749 0.08611214953271028 0.707353394269282 0.0038691588785046633 0.7022183424052583 0.024429906542056075 0.8382972168018897 0.08611214953271028 0.8382972168018897 0.1384485981308411 0.8370134538358837 0.19078504672897195 0.8100544315497586 0.2440560747663551 0.7741090685015919 0.28611214953271025 0.7497175721474786 0.3384485981308411 0.7587039129095203 0.35900934579439253 0.7741090685015919 0.38891588785046727 0.7882304611276574 0.4253644859813083 0.7933655129916812 0.43657943925233644 0.7856629351956453 0.4393831775700934 0.7484338091814727 0.48891588785046725 0.7445825202834548 0.49826168224299067 0.7227585498613536 0.43751401869158874 0.6675567423230974 0.41134579439252333 0.6675567423230974 0.4141495327102804 0.7035021053712642 0.41975700934579435 0.7278936017253774 0.4029345794392523 0.7368799424874191 0.36928971962616824 0.6957995275752284
0 0.5982616822429906 0.6316113792749306 0.6375140186915887 0.6316113792749306 0.7085420560747663 0.6290438533429188 0.7646168224299065 0.6290438533429188 0.827233644859813 0.6097874088528293 0.916018691588785 0.5738420458046626 0.998 0.6126373626373627 0.998 0.7445054945054945 0.9496635514018692 0.7445825202834548 0.9337757009345794 0.7445825202834548 0.8748971962616822 0.7278936017253774 0.8122803738317755 0.7112046831672999 0.7786355140186916 0.7112046831672999 0.6973271028037383 0.7086371572352881 0.6365794392523364 0.7060696313032762 0.6057383177570094 0.6893807127451987 0.5833084112149532 0.6637054534250796
0 0.5814392523364486 0.7510013351134847 0.6319065420560748 0.7625552018075382 0.7141495327102804 0.7676902536715621 0.7571401869158878 0.7689740166375679 0.8010654205607476 0.7818116462976276 0.8150841121495327 0.7946492759576871 0.8197570093457943 0.8267433501078361 0.810411214953271 0.8575536612919791 0.7758317757009345 0.8780938687480743 0.7571401869158878 0.8806613946800863 0.7487289719626168 0.856269898325973 0.7309719626168223 0.8280271130738419 0.7150841121495326 0.8164732463797884 0.5991962616822429 0.8100544315497586 0.5515327102803738 0.8113381945157645 0.5403177570093458 0.8126219574817706 0.5496635514018691 0.7869466981616514 0.5674205607476636 0.7651227277395501

我这里只有一个类别,所以index都是0.

这里我使用的是yolov5n轻量级的分割模型,对应的yaml 修改如下:

#Parameters
nc: 1  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.25  # layer channel multiple
anchors:- [10,13, 16,30, 33,23]  # P3/8- [30,61, 62,45, 59,119]  # P4/16- [116,90, 156,198, 373,326]  # P5/32#Backbone
backbone:# [from, number, module, args][[-1, 1, Conv, [64, 6, 2, 2]],  # 0-P1/2[-1, 1, Conv, [128, 3, 2]],  # 1-P2/4[-1, 3, C3, [128]],[-1, 1, Conv, [256, 3, 2]],  # 3-P3/8[-1, 6, C3, [256]],[-1, 1, Conv, [512, 3, 2]],  # 5-P4/16[-1, 9, C3, [512]],[-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32[-1, 3, C3, [1024]],[-1, 1, SPPF, [1024, 5]],  # 9]#Head
head:[[-1, 1, Conv, [512, 1, 1]],[-1, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 6], 1, Concat, [1]],  # cat backbone P4[-1, 3, C3, [512, False]],  # 13[-1, 1, Conv, [256, 1, 1]],[-1, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 4], 1, Concat, [1]],  # cat backbone P3[-1, 3, C3, [256, False]],  # 17 (P3/8-small)[-1, 1, Conv, [256, 3, 2]],[[-1, 14], 1, Concat, [1]],  # cat head P4[-1, 3, C3, [512, False]],  # 20 (P4/16-medium)[-1, 1, Conv, [512, 3, 2]],[[-1, 10], 1, Concat, [1]],  # cat head P5[-1, 3, C3, [1024, False]],  # 23 (P5/32-large)[[17, 20, 23], 1, Segment, [nc, anchors, 32, 256]],  # Detect(P3, P4, P5)]

主要就是修改nc=1

在data目录下编写baresoil.yaml,如下:

内容如下:

#Dataset
path: ./datasets/baresoil-seg  
train: images/train 
val: images/train  
test:  images/train # Classes
names:0: baresoil

最后修改一下train.py,如下:

红框中是我自己修改的部分,可以根据自己的实际需求进行修改即可。

如果不修改--workers的话可能会报错:

AttributeError: 'NoneType' object has no attribute 'python_exit_status'

所以建议修改为0.

默认执行100次epoch的迭代计算,日志输出如下所示:

可以看到:这里分别输出了box和mask的各种指标,可以看到模型是在同时完成检测和分割两种任务的计算。

训练完成后结果目录如下所示:

详情如下:

混淆矩阵:

检测实例:

相关内容

热门资讯

不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
安卓文字转语音tts没有声音 安卓文字转语音TTS没有声音的问题在应用中比较常见,通常是由于一些设置或者代码逻辑问题导致的。本文将...
APK正在安装,但应用程序列表... 这个问题可能是由于以下原因导致的:应用程序安装的APK文件可能存在问题。设备上已经存在同名的应用程序...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
报告实验.pdfbase.tt... 这个错误通常是由于找不到字体文件或者文件路径不正确导致的。以下是一些解决方法:确认字体文件是否存在:...