《RTC_TongueNet:An improved tongue image segmentation model based on DeepLabV3》
本人前段时间的论文《RTC_TongueNet:An improved tongue image segmentation model based on DeepLabV3》目前已经见刊,在此写下复现过程代码。
模型在deeplabv3的基础上增加了新的残差模块,transformer和eca注意力机制
数据集地址:https://m.tb.cn/h.g0SQYpt?tk=iSFRWriTTta
项目的github:tqinger/RTC_TongueNet (github.com)https://github.com/tqinger/RTC_TongueNet
代码使用:
主要修改train.py中的参数配置:
修改数据集路径之后就可以运行
parser.add_argument("--data-path", default=r"C:\Users\Public\data\shetou", help="VOCdevkit root")
数据集介绍:
实验中我们使用的数据集有两个,数据集的具体介绍如下:
(1)数据集1:该数据集的舌象是由恒定光源的专业舌象仪在半封闭状态下采集的,总共300张图片,图片大小为768×576,图片格式为jpg。数据集已经标注,带有标记好的掩码文件。
(2)数据集2:由北京中医药大学第三附属医院在临床实践中采集的舌图数据集。该数据集由专业的舌象仪采集,共有642张图片组成,图像大小为2592×1944,格式为png。采集的患者原始图片带有仪器的轮廓及患者面部信息,进一步人工裁剪后保留了鼻子以下部位构建了我们自己的数据集。数据集由专业人员使用Labelme工具软件对舌体进行标注,数据集的标注结果已经过医生专家的确认和完善。
deeplabv3模型介绍:
DeepLabv3是由谷歌开发的一种语义分割网络,采用端对端的训练方法。DeepLabV3使用ResNet卷积神经网络做为主干网进行特征提取;为防止下采样导致的分辨率降低,在卷积操作的最后一个Block不再下采样,而是将普通卷积层替换为空洞卷积层;提取到的特征送入Atrous Spatial Pyramid Pooling(ASPP),ASPP对输入以不同采样率的空洞卷积并行采样来提取高层语义信息,从而实现多尺度的特征提取;ASPP输出的特征信息在通道维度上进行拼接并通过1´1卷积降低通道数,最后通过1个1´1的卷积层进一步融合信息得到输出。
改进的Deeplabv3:
改进的残差结构:
为更好的解决网络退化问题,本文对残差网络进行了改进。当输入特征层宽和高为输出特征层两倍时,输入的特征图将经过两个分支,主分支通过一个3×3卷积,捷径分支为1×1卷积。当输入特征层宽和高等于输出特征层时,输入的特征层将经过三个分支,主分支为3×3卷积,一个捷径分支为1×1卷积,另一个捷径分支只通过一个BN层,如图所示。与ResNet中的残差结构相比,改进后的残差结构主分支由两个卷积层改为一个卷积层,中间间隔的卷积操作更少,即将浅层信息映射到深层网络的频率更快了;且不管哪种捷径分支都经过了BN层,BN层进一步解决了梯度消失与梯度爆炸问题。
改进的Transformer:
首先,对于给定的输入张量X∈RH×W×C,使用一个3×3的卷积操作对局部信息进行建模,整合局部信息之后对输出张量进行1×1的卷积操作得到张量XL∈RH×W×D,此操作是为了得到更高维度的局部信息(C,D为通道数即维度,且C<D),接着进行展开(unfold)时将张量XL转化为N个非重叠的patches XU ∈ RP×N×D,其中P = wh, N = WH/P,D为通道数,N为patch的个数,w和h分别为patch的宽和高,对于每个p∈{1,···,p},patch之间的关系通过使用Transformer进行编码
ECA注意力机制加入ASPP
DeepLabV3模型中使用ASPP结构去尽可能更多的整合全局信息并提取有用信息。本文尝试改进ASPP结构,在concat操作之后添加ECA注意力机制,实验表明,添加ECA注意力机制更有利于五个并行操作之后各输出结果之间的信息交互,也可以进一步获取有用信息
实验结果:
Network | Dataset2 | Dataset1 | ||
MIOU | MPA | MIOU | MPA | |
FCN | 0.869 | 0.935 | 0.862 | 0.911 |
UNet | 0.936 | 0.971 | 0.924 | 0.951 |
LRASPP | 0.926 | 0.961 | 0.903 | 0.930 |
DeepLabV3 | 0.941 | 0.976 | 0.931 | 0.968 |
RTC_TongueNet(ours) | 0.950 | 0.979 | 0.941 | 0.979 |