基于FCN网络实现的多类别图像分割任务

1、前言

FCN 作为图像分割的开山之作,将分割任务作为逐个像素点的分类任务

之前完成了基于unet、resnet+unet、deeplab等等网络的分割任务,具体的可以参考本专栏:

图像分割_听风吹等浪起的博客-CSDN博客

因为FCN网络的实现较为复杂,当然有很多现成的代码实现FCN分割网络。不过torchvision中其实已经封装好了,这里我们直接利用这个torchvision完成即可

2、具体实现的思路

这里介绍代码实现的逻辑,具体的参考之前文章

2.1 数据处理

首先是对数据的处理,因为要完成的分割是属于有监督学习,并且label是和数据同样size的灰度图像,所以两者间的对应特别重要

有的label标签是全黑的,或者是那种白色区域很明显的,其实都是一样的。

因为图像分割是逐个像素点的分类任务,而你把分类的值设为1(全黑)或者255(白色区域)其实是一样的,只不过加载数据的时候需要处理下

这里还是使用之前博文unet处理的方式,通过便利mask图像,找到灰度值有几类,这样其实就是分割网络的输出有几类。

如下,可以看到总共有5个灰度值,也就代表了这个数据集是五分割的任务,0代表背景,也算作分割之一

需要注意的是,网络的输出是需要呈0 1 2 这种自然数,因为5分割的输出是5个特征图,而特征图的索引就是0 1 2 3 4,含义是每个特征图负责预测某个灰度值。

例如猫、狗、猪,三个分类任务,最后输出的张量必须是3,在3中找出最大概率的那个索引就是对应猫、狗、猪的某一类。

而网络是不知道猫、狗、猪是什么玩意,只知道0 1 2 ,我们人为规定0是猫、2是猪。

这里dataset的实现如下:

2.2 FCN网络的实现

torchvision给了我们两个backbone,resnet50和resnet101,这里我们全部实现。

其中weights参数是是否导入官方的预训练权重

2.3 数据预处理

预处理是黑匣子,对于分割这种任务,知道预处理后的图像是什么样子很有必要,这里也实现一下

其中控制台会输出这样,这样是正常的,可以看到mask的灰度值被映射到了0 1 2 3 4中

需要注意的是,如果出现了255是正常的,因为这里使用了多尺度的随机缩放,255负责填充,在train的时候,代码会自动忽略255的部分

不过有的时候出现255,上面的图像可能会出现异常。

个人猜测,plt会自动将灰度图像调色,这样哪怕mask灰度靠的很近也会很明显的展示。要是出现255的话,调色可能会冲突?

3、对比实验

这里利用FCN对腹部多脏器的五分割进行实验,效果如下:

这里仅仅测试了20个epoch,网络并未收敛

resnet50:

resnet101:

4、代码使用

训练脚本的超参数如下:

  • backbone 选择resnet50 or resnet101作为FCN的特征提取网络
  • pretrained 是否载入官方预训练权重
  • base_size 在这个值的基础上对图像进行随机缩放0.8倍-1.2倍之间
  • crop_size 中心裁剪,这个值可以设置为数据的大小
  • img_f、mask_f :用于加载数据,因为有的数据和mask图像的文件名不一致,导致找不到对应的标签。在这里填入相应的后缀即可
  • vis 是否保存预处理数据的结果

数据的摆放还是和以前一样

输出的文件:

依次为:权重、mask灰度值信息、loss和iou分别在train和test数据集上的曲线、学习率衰减曲线、训练日志、可视化数据图像

训练控制台打印如下:

代码位置: 基于FCN网络对腹部多脏器数据集的5分割实战资源-CSDN文库

相关推荐
寒月霜华20 分钟前
机器学习-模型验证
人工智能·深度学习·机器学习
救救孩子把1 小时前
3-机器学习与大模型开发数学教程-第0章 预备知识-0-3 函数初步(多项式、指数、对数、三角函数、反函数)
人工智能·数学·机器学习
CareyWYR1 小时前
每周AI论文速递(250908-250912)
人工智能
张晓~183399481211 小时前
短视频矩阵源码-视频剪辑+AI智能体开发接入技术分享
c语言·c++·人工智能·矩阵·c#·php·音视频
deephub1 小时前
量子机器学习入门:三种数据编码方法对比与应用
人工智能·机器学习·量子计算·数据编码·量子机器学习
AI 嗯啦1 小时前
计算机视觉----opencv实战----指纹识别的案例
人工智能·opencv·计算机视觉
max5006001 小时前
基于多元线性回归、随机森林与神经网络的农作物元素含量预测及SHAP贡献量分析
人工智能·python·深度学习·神经网络·随机森林·线性回归·transformer
trsoliu1 小时前
前端基于 TypeScript 使用 Mastra 来开发一个 AI 应用 / AI 代理(Agent)
前端·人工智能
白掰虾2 小时前
STM32N6&AI资料汇总
人工智能·stm32·嵌入式硬件·stm32n6·stm32ai
爱思德学术3 小时前
中国计算机学会(CCF)推荐学术会议-C(软件工程/系统软件/程序设计语言):MSR 2026
人工智能·机器学习·软件工程·数据科学