1、MobileUnet 网络
Unet是一种卷积神经网络(CNN)架构,通常用于图像分割任务
Unet架构由编码器和解码器组成。编码器负责捕获上下文并从输入图像中提取特征,而解码器负责上采样并生成分割掩模。
Unet中的编码器由多个卷积层组成,后面是最大池化层。每个卷积层对输入图像应用一组可学习的滤波器,在每个后续层提取更高级的特征。最大池化层减少了特征图的空间维度,捕获了最重要的信息,同时丢弃了一些细粒度的细节。
Unet中的解码器由上卷积层组成,也称为转置卷积层。这些层提升了特征图,逐渐增加了它们的空间维度,同时保持了它们的通道深度。解码器还包括跳过连接,它将相应的层从编码器连接到解码器。这些跳过连接有助于保留空间信息并提高分割输出的质量。
Unet被广泛用于各种图像分割任务,包括生物医学图像分割、细胞计数和物体检测。它的架构和设计使其在分割具有复杂结构和不同大小对象的图像方面特别有效。跳跃连接的使用也使其在上采样过程中不太容易丢失空间信息。
Unet网络搭建参考:UNet - unet网络-CSDN博客
MobileNet是一种轻量级的深度学习模型架构,专为计算资源有限的移动和嵌入式设备而设计。它由谷歌开发,于2017年发布。
MobileNet是专门为快速高效而设计的,非常适合移动设备上的图像分类、对象检测和图像分割等任务。它通过使用深度可分离卷积来实现效率,将标准卷积分为单独的深度和点卷积。这降低了计算复杂度,同时最大限度地减少了精度的降低。
MobileNet有几种变体,如MobileNetV1、MobileNetV2和MobileNetV3。每个版本都对原始架构进行了改进和优化,例如更高的准确性、更快的推理速度和更少的内存占用。
总体而言,MobileNet是边缘计算和实时应用程序的热门选择,在这些应用程序中,资源限制是一个问题。
Mobilenet网络搭建:MobileNet V1 图像分类_mobile netv1实现图片分级的流程-CSDN博客
MobileUnet是一种专为移动设备设计的卷积神经网络(CNN)架构。它是一种轻量级且高效的神经网络模型,可用于各种计算机视觉任务,如图像分类、对象检测和语义分割。
MobileUnet的架构基于流行的U-Net架构,该架构以其在医学图像分割任务中的有效性而闻名。然而,MobileUnet已经针对移动设备进行了优化,减少了推理所需的参数和操作数量,同时仍然保持了高精度。
MobileUnet通过使用深度可分离卷积来实现其效率,该卷积将深度卷积(用单独的核对每个输入通道进行滤波)和逐点卷积(将深度卷积的输出与线性运算相结合)分开。这降低了网络的计算复杂性,同时仍然有效地捕获空间信息。
MobileUnet架构由编码器和解码器组成。编码器负责从输入图像中提取特征,而解码器对特征进行上采样以生成最终输出。编码器和解码器之间的跳过连接有助于保留细粒度细节并提高网络性能。
总体而言,MobileUnet是一个强大而高效的CNN架构,可以在计算资源有限的移动设备上实现实时计算机视觉任务。它已被广泛应用于各种移动应用,如图像识别、增强现实和自动驾驶。
2、实验
本项目采用python=3.0、pytorch实现
项目下载:基于Unet-MobileNet对腹部肝脏(LIver)图像分割实战代码【包含完整代码、数据集等等】资源-CSDN文库
更多分割项目:图像分割_听风吹等浪起的博客-CSDN博客
2.1 数据集
数据集采用腹部肝脏(Liver)分割,数据如下:
json文件如下:
{
"0": "background",
"255": "liver"
}
2.2 训练
训练参数如下:
parser = argparse.ArgumentParser(description="MobileUnet segmentation")
parser.add_argument("--batch-size", default=4, type=int)
parser.add_argument("--num-classes", default=2, type=int) # 背景 +1
parser.add_argument("--epochs", default=100, type=int)
parser.add_argument('--lr', default=0.01, type=float)
parser.add_argument('--lrf',default=0.001,type=float) # 最终学习率 = lr * lrf
parser.add_argument("--img_f", default='.png', type=str) # 数据图像的后缀
parser.add_argument("--mask_f", default='_mask.png', type=str) # mask图像的后缀
args = parser.parse_args()
预处理可视化结果:
摆放好数据集即可训练,代码会自动训练并且在验证集上进行评估
2.3 结果
生成结果如下:
这里简单绘制了iou、dice、recall、precision等曲线,如下:
DICE:
IOU:
precision:
recall:
loss:
曲线的数值来自于网络训练,并且都被保存在train和val的txt文件中,如下:
train:
epoch:99
precision: ['0.9994', '0.9921']
recall: ['0.9993', '0.9936']
iou: ['0.9987', '0.9858']
dice: ['0.9994', '0.9928']
mean precision: 0.9957,mean recall: 0.9964,mean dice: 0.9961,mean iou: 0.9922
epoch:100
precision: ['0.9994', '0.9921']
recall: ['0.9993', '0.9937']
iou: ['0.9987', '0.9858']
dice: ['0.9994', '0.9929']
mean precision: 0.9958,mean recall: 0.9965,mean dice: 0.9961,mean iou: 0.9923
val:
epoch:99
precision: ['0.9851', '0.9588']
recall: ['0.9957', '0.8685']
iou: ['0.9809', '0.8372']
dice: ['0.9904', '0.9114']
mean precision: 0.9719,mean recall: 0.9321,mean dice: 0.9509,mean iou: 0.9091
epoch:100
precision: ['0.9846', '0.9590']
recall: ['0.9958', '0.8642']
iou: ['0.9805', '0.8334']
dice: ['0.9901', '0.9092']
mean precision: 0.9718,mean recall: 0.9300,mean dice: 0.9497,mean iou: 0.9070
2.4 推理
推理的话就是predict 脚本,输入预测图像路径即可:
推理的gt+images:
推理的gt图像: