【计算机视觉】FCN、Seg-Net、U-Net模型进行图像分割实战(附源码和数据集 超详细必看)

简介: 【计算机视觉】FCN、Seg-Net、U-Net模型进行图像分割实战(附源码和数据集 超详细必看)

需要源码和数据集请点赞关注收藏后评论区留言私信~~~

一、图像分割的概念

图像分割(image segmentation)技术是计算机视觉领域的重要研究方向,是图像识别、图像语义理解的重要一环。图像分割是指将图像分成若干具有相似性质的区域的过程,从数学角度来看,图像分割是将图像划分成互不相交的区域的过程。如下图所示,图像中的每个像素被分到不同的类别。与目标检测算法相比较,图像分割算法更适合精细的图像识别任务,更适合目标的精确定位、复杂形状物体的识别、图像的语义理解任务。

图像分割可以进一步地分为语义分割与实例分割,语义分割是指需要进一步判断图像中哪些像素属于哪类目标,但是语义分割不区分属于相同类别的不同实例,与此不同的是,实例分割可以区分出属于不同实例的那些像素

二、图像分割评价标准

对分割结果的评价其实就是对像素级分类的评价,基于像素点分类的MaxF1评价分割效果是比较常用的一种方式,F-Measure是一种统计量,F-Measure又称为F-Score,是准确率Precision和召回率Recall的加权调和平均,是信息检索领域常用的一个评价标准,常用于评价分类模型的好坏,在F-Measure函数中,当参数B=1时就是常见的F1,它综合了Precision和Recall的结果,当F1较高时则能说明试验方法比较有效,对于输出的置信度图,通过设置不同的像素级分类阈值可以选择出最大的F-Measure

下图为三种分割算法在VOC2012测试机上性能表示,其中DeepLab的分割准确率最高,FCN的分割速度最高,SegNet则在分割的准确率和速度中都是最低

三、图像分割项目实战

需要全部源码请点赞关注收藏后评论区留言私信~~~

数据集简介

Cityscapes数据库拥有5000张在城市环境中驾驶场景的图像(2975train,500 val,1525test),如下图所示。可以利用下面的代码测试分割的图像中车辆、行人、自行车及街景。

代码如下

FCN32的模型构建代码如下

from keras.applications import vgg16
from keras.models import Model,Sequential
from keras.layers import Conv2D, Conv2DTranspose, Input, Cropping2D, add, Dropout, Reshape, Activation
from keras.utils import plot_model
def FCN32(nClasses, input_height, input_width):
    assert input_height % 32 == 0
    assert input_width % 32 == 0
    img_input = Input(shape=( input_height, input_width,3))
    model = vgg16.VGG16(
        include_top=False,
        weights='imagenet',input_tensor=img_input,
        pooling=None,
        classes=1000)
    assert isinstance(model,Model)
    o=Conv2D(filters=4096,kernel_size=(7,7),padding="same",activation="relu",name="fc6")(model.output)
    o=Dropout(rate=0.5)(o)
    o = Conv2D(filters=4096, kernel_size=(1, 1), padding="same", activation="relu", name="fc7")(o)
    o=Dropout(rate=0.5)(o)
    o = Conv2D(filters=nClasses, kernel_size=(1,1), padding="same",activation="relu",kernel_initializer="he_normal",
               name="score_fr")(o)
    o=Conv2DTranspose(filters=nClasses,kernel_size=(32,32),strides=(32,32),padding="valid",activation=None,
                      name="score2")(o)
    o=Reshape((-1,nClasses))(o)
    o=Activation("softmax")(o)
    fcn8=Model(inputs=img_input,outputs=o)
    # mymodel.summary()
    return fcn8
if __name__ == '__main__':
    m = FCN32(15,320, 320)
    m.summary()
    plot_model(m, show_shapes=True, to_file='model_fcn32.png')
    print(len(m.layers))

模型图如下

FCN8模型构建代码如下

from keras.applications import vgg16
from keras.models import Model,Sequential
from keras.layers import Conv2D, Conv2DTranspose, Input, Cropping2D, add, Dropout, Reshape, Activation
def FCN8_helper(nClasses,  input_height, input_width):
    assert input_height % 32 == 0
    assert input_width % 32 == 0
    img_input = Input(shape=(input_height, input_width, 3))
    model = vgg16.VGG16(
        include_top=False,
        weights='imagenet',input_tensor=img_input,
        pooling=None,
        classes=1000)
    assert isinstance(model,Model)
    o = Conv2D(filters=4096, kernel_size=(7, 7), padding="same", activation="relu", name="fc6")(model.output)
    o = Dropout(rate=0.5)(o)
    o = Conv2D(filters=4096, kernel_size=(1, 1), padding="same", activation="relu", name="fc7")(o)
    o = Dropout(rate=0.5)(o)
    o = Conv2D(filters=nClasses, kernel_size=(1, 1), padding="same", activation="relu", kernel_initializer="he_normal",
               name="score_fr")(o)
    o = Conv2DTranspose(filters=nClasses, kernel_size=(2, 2), strides=(2, 2), padding="valid", activation=None,
                        name="score2")(o)
    fcn8 = Model(inputs=img_input, outputs=o)
    # mymodel.summary()
    return fcn8
def FCN8(nClasses, input_height, input_width):
    fcn8=FCN8_helper(nClasses, input_height, input_width)
    # Conv to be applied on Pool4
    skip_con1 = Conv2D(nClasses, kernel_size=(1, 1), padding="same", activation=None,kernel_initializer="he_normal",
                       name="score_pool4")( fcn8.get_layer("block4_pool").output)
    Summed = add(inputs=[skip_con1, fcn8.output])
    x = Conv2DTranspose(nClasses, kernel_size=(2, 2), strides=(2, 2), padding="valid", activation=None,
                        name="score4")(Summed)
    ###
    skip_con2 = Conv2D(nClasses, kernel_size=(1, 1), padding="same", activation=None,kernel_initializer="he_normal",
                       name="score_pool3")( fcn8.get_layer("block3_pool").output)
    Summed2 = add(inputs=[skip_con2, x])
    #####
    Up = Conv2DTranspose(nClasses, kernel_size=(8, 8), strides=(8, 8),
                         padding="valid", activation=None, name="upsample")(Summed2)
    Up = Reshape((-1, nClasses))(Up)
    Up = Activation("softmax")(Up)
    mymodel=Model(inputs=fcn8.input,outputs=Up)
    return mymodel
if __name__ == '__main__':
    m = FCN8(15,320, 320)
    from keras.utils import plot_model
    plot_model(m, show_shapes=True, to_file='model_fcn8.png')
    print(len(m.layers))

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
机器学习/深度学习 监控 算法
基于计算机视觉(opencv)的运动计数(运动辅助)系统-源码+注释+报告
基于计算机视觉(opencv)的运动计数(运动辅助)系统-源码+注释+报告
497 3
|
人工智能 测试技术 API
AI计算机视觉笔记二十 九:yolov10竹签模型,自动数竹签
本文介绍了如何在AutoDL平台上搭建YOLOv10环境并进行竹签检测与计数。首先从官网下载YOLOv10源码并创建虚拟环境,安装依赖库。接着通过官方模型测试环境是否正常工作。然后下载自定义数据集并配置`mycoco128.yaml`文件,使用`yolo detect train`命令或Python代码进行训练。最后,通过命令行或API调用测试训练结果,并展示竹签计数功能。如需转载,请注明原文出处。
1461 5
|
存储 人工智能 自然语言处理
关于计算机视觉中的自回归模型,这篇综述一网打尽了
这篇综述文章全面介绍了自回归模型在计算机视觉领域的应用和发展。文章首先概述了视觉中的序列表示和建模基础知识,随后根据表示策略将视觉自回归模型分为基于像素、标记和尺度的三类框架,并探讨其与生成模型的关系。文章详细阐述了自回归模型在图像、视频、3D及多模态生成等多方面的应用,列举了约250篇参考文献,并讨论了其在新兴领域的潜力和面临的挑战。此外,文章还建立了一个GitHub存储库以整理相关论文,促进了学术合作与知识传播。论文链接:https://arxiv.org/abs/2411.05902
478 1
|
机器学习/深度学习 算法 计算机视觉
计算机视觉实战项目3(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A*路径规划+单目测距与测速+行人车辆计数等)
计算机视觉实战项目3(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A*路径规划+单目测距与测速+行人车辆计数等)
|
编解码 机器人 测试技术
2024年6月计算机视觉论文推荐:扩散模型、视觉语言模型、视频生成等
6月还有一周就要结束了,我们今天来总结2024年6月上半月发表的最重要的论文,重点介绍了计算机视觉领域的最新研究和进展。
754 8
|
人工智能 测试技术 PyTorch
AI计算机视觉笔记二十四:YOLOP 训练+测试+模型评估
本文介绍了通过正点原子的ATK-3568了解并实现YOLOP(You Only Look Once for Panoptic Driving Perception)的过程,包括训练、测试、转换为ONNX格式及在ONNX Runtime上的部署。YOLOP由华中科技大学团队于2021年发布,可在Jetson TX2上达到23FPS,实现了目标检测、可行驶区域分割和车道线检测的多任务学习。文章详细记录了环境搭建、训练数据准备、模型转换和测试等步骤,并解决了ONNX转换过程中的问题。
|
开发框架 前端开发 .NET
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
集成于VS 2019,EXT.NET前端和ASP.NET后端,搭配MSSQL 2018数据库。系统覆盖样品管理、数据分析、报表和项目管理等实验室全流程。应用广泛,包括生产质检(如石化、制药)、环保监测、试验研究等领域。随着技术发展,现代LIMS还融合了临床、电子实验室笔记本和SaaS等功能,以满足复杂多样的实验室管理需求。
349 3
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
|
自然语言处理 监控 自动驾驶
大模型在自然语言处理(NLP)、计算机视觉(CV)和多模态模型等领域应用最广
【7月更文挑战第26天】大模型在自然语言处理(NLP)、计算机视觉(CV)和多模态模型等领域应用最广
1448 11
|
编解码 边缘计算 自然语言处理
2024年5月计算机视觉论文推荐:包括扩散模型、视觉语言模型、图像编辑和生成、视频处理和生成以及图像识别等各个主题
五月发布的计算机视觉领域重要论文涵盖了扩散模型、视觉语言模型、图像生成与编辑及目标检测。亮点包括:1) Dual3D提出双模式推理策略,实现高效文本到3D图像生成;2) CAT3D利用多视图扩散模型创建3D场景,仅需少量图像;3) Hunyuan-DiT是多分辨率的中文理解扩散Transformer,可用于多模态对话和图像生成;4) 通过潜在扩散模型从EEG数据重建自然主义音乐,展示复杂音频重建潜力。此外,还有关于视觉语言模型和图像编辑的创新工作,如BlobGEN用于合成具有控制性的图像。
755 3
|
机器学习/深度学习 人工智能 自然语言处理
计算机视觉借助深度学习实现了革命性进步,从图像分类到复杂场景理解,深度学习模型如CNN、RNN重塑了领域边界。
【7月更文挑战第2天】计算机视觉借助深度学习实现了革命性进步,从图像分类到复杂场景理解,深度学习模型如CNN、RNN重塑了领域边界。AlexNet开启新时代,后续模型不断优化,推动对象检测、语义分割、图像生成等领域发展。尽管面临数据隐私、模型解释性等挑战,深度学习已广泛应用于安防、医疗、零售和农业,预示着更智能、高效的未来,同时也强调了技术创新、伦理考量的重要性。
423 1

热门文章

最新文章