语义分割实战——基于EGEUNet神经网络印章分割系统3:含训练测试代码、数据集和GUI交互界面
第一步准备数据印章分割-深度学习图像分割数据集印章分割数据可直接应用到一些常用深度学习分割算法中比如FCN、Unet、SegNet、DeepLabV1、DeepLabV2、DeepLabV3、DeepLabV3、PSPNet、RefineNet、HRnet、Mask R-CNN、Segformer、DUCK-Net模型等数据集总共有2000对图片数据质量非常高甚至可应用到工业落地的项目中第二步搭建模型本文选择EGEUNet其网络结构分别如下第三步训练代码1损失函数为dice_loss focal_loss2网络代码class EGEUNet(nn.Module): def __init__(self, num_classes1, input_channels3, c_list[8, 16, 24, 32, 48, 64], bridgeTrue, gt_dsFalse): super().__init__() self.bridge bridge self.gt_ds gt_ds self.encoder1 nn.Sequential( nn.Conv2d(input_channels, c_list[0], 3, stride1, padding1), ) self.encoder2 nn.Sequential( nn.Conv2d(c_list[0], c_list[1], 3, stride1, padding1), ) self.encoder3 nn.Sequential( nn.Conv2d(c_list[1], c_list[2], 3, stride1, padding1), ) self.encoder4 nn.Sequential( Grouped_multi_axis_Hadamard_Product_Attention(c_list[2], c_list[3]), ) self.encoder5 nn.Sequential( Grouped_multi_axis_Hadamard_Product_Attention(c_list[3], c_list[4]), ) self.encoder6 nn.Sequential( Grouped_multi_axis_Hadamard_Product_Attention(c_list[4], c_list[5]), ) if bridge: self.GAB1 group_aggregation_bridge(c_list[1], c_list[0]) self.GAB2 group_aggregation_bridge(c_list[2], c_list[1]) self.GAB3 group_aggregation_bridge(c_list[3], c_list[2]) self.GAB4 group_aggregation_bridge(c_list[4], c_list[3]) self.GAB5 group_aggregation_bridge(c_list[5], c_list[4]) print(group_aggregation_bridge was used) if gt_ds: self.gt_conv1 nn.Sequential(nn.Conv2d(c_list[4], 1, 1)) self.gt_conv2 nn.Sequential(nn.Conv2d(c_list[3], 1, 1)) self.gt_conv3 nn.Sequential(nn.Conv2d(c_list[2], 1, 1)) self.gt_conv4 nn.Sequential(nn.Conv2d(c_list[1], 1, 1)) self.gt_conv5 nn.Sequential(nn.Conv2d(c_list[0], 1, 1)) print(gt deep supervision was used) self.decoder1 nn.Sequential( Grouped_multi_axis_Hadamard_Product_Attention(c_list[5], c_list[4]), ) self.decoder2 nn.Sequential( Grouped_multi_axis_Hadamard_Product_Attention(c_list[4], c_list[3]), ) self.decoder3 nn.Sequential( Grouped_multi_axis_Hadamard_Product_Attention(c_list[3], c_list[2]), ) self.decoder4 nn.Sequential( nn.Conv2d(c_list[2], c_list[1], 3, stride1, padding1), ) self.decoder5 nn.Sequential( nn.Conv2d(c_list[1], c_list[0], 3, stride1, padding1), ) self.ebn1 nn.GroupNorm(4, c_list[0]) self.ebn2 nn.GroupNorm(4, c_list[1]) self.ebn3 nn.GroupNorm(4, c_list[2]) self.ebn4 nn.GroupNorm(4, c_list[3]) self.ebn5 nn.GroupNorm(4, c_list[4]) self.dbn1 nn.GroupNorm(4, c_list[4]) self.dbn2 nn.GroupNorm(4, c_list[3]) self.dbn3 nn.GroupNorm(4, c_list[2]) self.dbn4 nn.GroupNorm(4, c_list[1]) self.dbn5 nn.GroupNorm(4, c_list[0]) self.final nn.Conv2d(c_list[0], num_classes, kernel_size1) self.apply(self._init_weights) def _init_weights(self, m): if isinstance(m, nn.Linear): trunc_normal_(m.weight, std.02) if isinstance(m, nn.Linear) and m.bias is not None: nn.init.constant_(m.bias, 0) elif isinstance(m, nn.Conv1d): n m.kernel_size[0] * m.out_channels m.weight.data.normal_(0, math.sqrt(2. / n)) elif isinstance(m, nn.Conv2d): fan_out m.kernel_size[0] * m.kernel_size[1] * m.out_channels fan_out // m.groups m.weight.data.normal_(0, math.sqrt(2.0 / fan_out)) if m.bias is not None: m.bias.data.zero_() def forward(self, x): out F.gelu(F.max_pool2d(self.ebn1(self.encoder1(x)), 2, 2)) t1 out # b, c0, H/2, W/2 out F.gelu(F.max_pool2d(self.ebn2(self.encoder2(out)), 2, 2)) t2 out # b, c1, H/4, W/4 out F.gelu(F.max_pool2d(self.ebn3(self.encoder3(out)), 2, 2)) t3 out # b, c2, H/8, W/8 out F.gelu(F.max_pool2d(self.ebn4(self.encoder4(out)), 2, 2)) t4 out # b, c3, H/16, W/16 out F.gelu(F.max_pool2d(self.ebn5(self.encoder5(out)), 2, 2)) t5 out # b, c4, H/32, W/32 out F.gelu(self.encoder6(out)) # b, c5, H/32, W/32 t6 out out5 F.gelu(self.dbn1(self.decoder1(out))) # b, c4, H/32, W/32 if self.gt_ds: gt_pre5 self.gt_conv1(out5) t5 self.GAB5(t6, t5, gt_pre5) gt_pre5 F.interpolate(gt_pre5, scale_factor32, modebilinear, align_cornersTrue) else: t5 self.GAB5(t6, t5) out5 torch.add(out5, t5) # b, c4, H/32, W/32 out4 F.gelu(F.interpolate(self.dbn2(self.decoder2(out5)), scale_factor(2, 2), modebilinear, align_cornersTrue)) # b, c3, H/16, W/16 if self.gt_ds: gt_pre4 self.gt_conv2(out4) t4 self.GAB4(t5, t4, gt_pre4) gt_pre4 F.interpolate(gt_pre4, scale_factor16, modebilinear, align_cornersTrue) else: t4 self.GAB4(t5, t4) out4 torch.add(out4, t4) # b, c3, H/16, W/16 out3 F.gelu(F.interpolate(self.dbn3(self.decoder3(out4)), scale_factor(2, 2), modebilinear, align_cornersTrue)) # b, c2, H/8, W/8 if self.gt_ds: gt_pre3 self.gt_conv3(out3) t3 self.GAB3(t4, t3, gt_pre3) gt_pre3 F.interpolate(gt_pre3, scale_factor8, modebilinear, align_cornersTrue) else: t3 self.GAB3(t4, t3) out3 torch.add(out3, t3) # b, c2, H/8, W/8 out2 F.gelu(F.interpolate(self.dbn4(self.decoder4(out3)), scale_factor(2, 2), modebilinear, align_cornersTrue)) # b, c1, H/4, W/4 if self.gt_ds: gt_pre2 self.gt_conv4(out2) t2 self.GAB2(t3, t2, gt_pre2) gt_pre2 F.interpolate(gt_pre2, scale_factor4, modebilinear, align_cornersTrue) else: t2 self.GAB2(t3, t2) out2 torch.add(out2, t2) # b, c1, H/4, W/4 out1 F.gelu(F.interpolate(self.dbn5(self.decoder5(out2)), scale_factor(2, 2), modebilinear, align_cornersTrue)) # b, c0, H/2, W/2 if self.gt_ds: gt_pre1 self.gt_conv5(out1) t1 self.GAB1(t2, t1, gt_pre1) gt_pre1 F.interpolate(gt_pre1, scale_factor2, modebilinear, align_cornersTrue) else: t1 self.GAB1(t2, t1) out1 torch.add(out1, t1) # b, c0, H/2, W/2 out0 F.interpolate(self.final(out1), scale_factor(2, 2), modebilinear, align_cornersTrue) # b, num_class, H, W if self.gt_ds: return (torch.sigmoid(gt_pre5), torch.sigmoid(gt_pre4), torch.sigmoid(gt_pre3), torch.sigmoid(gt_pre2), torch.sigmoid(gt_pre1)), torch.sigmoid(out0) else: return torch.sigmoid(out0)第四步统计一些指标训练过程中的loss和miou第五步搭建GUI界面第六步整个工程的内容项目完整文件下载请见演示与介绍视频的简介处给出➷➷➷https://www.bilibili.com/video/BV1Qpz4BfECo/​

相关新闻

工信部教考中心《系统可靠性工程师(高级)》开课通知

工信部教考中心《系统可靠性工程师(高级)》开课通知

2026/7/6 13:58:54 阅读更多 →
STM32F0实战:基于HAL库开发【2.3】

STM32F0实战:基于HAL库开发【2.3】

2026/7/3 21:00:51 阅读更多 →
机房U位管理别瞎忙!这套系统让运维效率翻倍

机房U位管理别瞎忙!这套系统让运维效率翻倍

2026/7/6 17:21:32 阅读更多 →

最新新闻

MobileNetV3-Small 1.0 与 ShuffleNetV2 1.0x 移动端部署对比:ImageNet 精度与 3 款手机推理速度实测

MobileNetV3-Small 1.0 与 ShuffleNetV2 1.0x 移动端部署对比:ImageNet 精度与 3 款手机推理速度实测

MobileNetV3-Small 1.0 与 ShuffleNetV2 1.0x 移动端部署实战评测:精度、速度与内存占用全解析在移动端AI应用开发中,模型选型往往需要在精度、推理速度和内存占用之间寻找平衡点。本文将通过完整的Benchmark测试流程,对比分析MobileNetV3-Sm…

2026/7/8 23:30:50 阅读更多 →
轮式永磁吸附爬壁机器人 ADAMS 2023 运动仿真:菱形结构转向滑移率降低 15% 分析

轮式永磁吸附爬壁机器人 ADAMS 2023 运动仿真:菱形结构转向滑移率降低 15% 分析

轮式永磁吸附爬壁机器人 ADAMS 2023 运动仿真:菱形结构转向滑移率降低 15% 分析在工业检测领域,爬壁机器人正逐渐取代传统人工检测方式,成为储罐、船舶等大型钢结构表面检测的主力军。其中,轮式永磁吸附爬壁机器人因其结构简单、运…

2026/7/8 23:28:49 阅读更多 →
LVI-SAM 1.0 多传感器外参配置:3个关键参数详解与 4 类数据集适配实战

LVI-SAM 1.0 多传感器外参配置:3个关键参数详解与 4 类数据集适配实战

LVI-SAM 1.0 多传感器外参配置:3个关键参数详解与 4 类数据集适配实战当你在ROS环境下成功部署LVI-SAM后,真正的挑战才刚刚开始——如何让这套融合了视觉、激光雷达和IMU的SLAM系统在你的硬件平台上精准工作?本文将深入解析传感器外参配置这一…

2026/7/8 23:28:49 阅读更多 →
汽车ABS系统4通道4传感器配置:从单轮模型到整车控制的3种算法对比

汽车ABS系统4通道4传感器配置:从单轮模型到整车控制的3种算法对比

汽车ABS系统4通道4传感器配置:从单轮模型到整车控制的3种算法对比 当你在湿滑路面上紧急制动时,方向盘突然失去转向能力,那种失控感足以让任何经验丰富的驾驶员心跳加速。这正是现代汽车电子控制系统中最关键的防抱死制动系统(ABS…

2026/7/8 23:24:47 阅读更多 →
RAG 混合检索实战:稠密向量 + 关键词,各取所长

RAG 混合检索实战:稠密向量 + 关键词,各取所长

RAG 混合检索实战:稠密向量 关键词,各取所长 一、向量搜索找不到"HTTP 502"——它不知道这是错误码 向量搜索擅长语义匹配。问"怎么修复服务器报错",能召回相关文章。但问"HTTP 502 怎么解决",向…

2026/7/8 23:22:46 阅读更多 →
LBL/SBL/USBL 3大水声定位系统对比:精度、成本与部署复杂度实测分析

LBL/SBL/USBL 3大水声定位系统对比:精度、成本与部署复杂度实测分析

LBL/SBL/USBL 3大水声定位系统对比:精度、成本与部署复杂度实测分析在深海勘探、水下机器人导航和海洋资源开发等领域,水下定位技术扮演着至关重要的角色。面对几千米深的复杂水下环境,工程师和科研人员需要在长基线(LBL&#xff…

2026/7/8 23:22:46 阅读更多 →

日新闻

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: …

2026/7/8 0:00:48 阅读更多 →
MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N1 到批处理的全路径 一、从"功能正确"到"性能可接受"——MyBatis 批量操作的三段式进化 MyBatis 在日常增删改查场景中几乎是无感的——实体映射直观、SQL 控制灵活。但当数据量从千级上升到十万级、百万级,许…

2026/7/8 0:00:48 阅读更多 →
工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

1. 工业负载控制方案概述在工业自动化、电机驱动和照明控制等高需求场景中,可靠地控制电感和电阻负载是核心挑战之一。TPD2015FN作为东芝的8通道高端智能功率开关IC,配合PIC18F45K22微控制器,能够构建一套稳定、高效的负载控制系统。这套组合…

2026/7/8 0:02:48 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/8 16:14:06 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/8 16:59:55 阅读更多 →

月新闻