• 语义分割 FCN-DenseNet 应用入门



    1. 简介

    在计算机视觉领域,语义分割指的是将数字图像细分为多个图像子区域的过程
    语义分割的目的是简化或改变图像的表示形式,使得图像更容易理解和分析
    语义分割通常用于定位图像中的物体和边界(线,曲线等)
    更精确的,语义分割是对图像中的每个像素加标签的一个过程,
    这一过程使得具有相同标签的像素具有某种共同视觉特性
    在这里插入图片描述
    语义分割的领域非常多,无人车、地块检测、表计识别等等


    2. 源码

    根据GitHub上开源的代码 Sharpiless FCN-DenseNet 进行一些更改:

    1. 调整数据集分布
    2. 新增训练和检验过程可视化
    3. 新增数据集处理工具
    4. 新增预训练模型
    5. 新增少许自定义参数等

    可以通过以下渠道下载:


    3. 数据集


    3.1 开源数据集

    本案例使用飞桨里的一个例子的 Oxford-IIIT Pet数据集
    里面包含了宠物照片和对应的标签数据
    宠物图片在 /images
    标签数据在 /annotations/trimaps
    具体详情参考 飞桨官方文档说明
    在这里插入图片描述
    这边标签是灰度图,还需要在处理一下,利用 tool_img2mask.py 根据实际情况将所有标签图片转换为所需的格式

    在这里插入图片描述
    左边为原图标签,宠物为1,背景为2,边缘为3,这里处理后只保留宠物特征

    然后通过 tool_img2data.py 将原图和标签打乱并按比例分配到新的地址成为训练集和测试集
    原图训练集:/resources/images/data/train/img
    标签训练集:/resources/images/data/train/mask
    原图测试集:/resources/images/data/test/img
    标签测试集:/resources/images/data/test/mask

    在这里插入图片描述
    在这里插入图片描述


    3.2 自定义数据集


    3.2.1 建立数据集文件夹

    在工程中新建文件夹 /resources/images/data_json,将所有数据原图均放置于此

    在这里插入图片描述
    这里以Oxford-IIIT Pet数据集的第一张图片为例


    3.2.2 标注

    使用 开源的数据标注工具Labelme
    安装也比较简单,版本不要太高了,后面用的时候会有问题:

    $ pip3 install labelme==3.16.2
    
    • 1

    /resources/images/data_json启动 Labelme

    $ labelme
    
    • 1

    在这里插入图片描述
    保存为 json 格式,并在同一地址,后续方便转换处理

    在这里插入图片描述


    3.2.3 转化

    此时再通过 tool_json2dataset.py 转化所有文件并生成原图和标签图片
    在这里插入图片描述
    此时所有可以利用的数据均在 /resources/images/dataset 文件夹中

    然后同样通过 tool_dataset2data.pydataset 中的原图和标签打乱并按比例分配到新的地址成为训练集和测试集
    原图训练集:/resources/images/data/train/img
    标签训练集:/resources/images/data/train/mask
    原图测试集:/resources/images/data/test/img
    标签测试集:/resources/images/data/test/mask


    4. 训练

    为了有足够强大的数据,这里使用处理过的Oxford-IIIT Pet数据集
    根据自己电脑硬件合理调整参数进行训练,执行train.py文件

    在这里插入图片描述
    默认每5次迭代验证并保存最优的模型于 parameters_densenet121 文件夹

    parser.add_argument('--svae_interval', type=int, default=5)  # svae interval
    
    • 1

    5. 验证

    执行test.py文件
    在这里插入图片描述
    可以在 resources/images/data/test 看到分割的效果图:
    在这里插入图片描述
    抽取mask里的图片出来对比效果:
    在这里插入图片描述
    还是可以的


    谢谢

  • 相关阅读:
    国产RK3399开发板如何在Ubuntu保留文件系统
    torch F.unfold()举例
    ubuntu系统开启ssh用户名密码登录
    C语言基础小操作
    JAVA线程和线程池
    Flutter高仿微信-第35篇-单聊-视频通话
    互联网数据管理平台
    弹性数据库连接池探活策略调研(三)——DBCP
    主干网络篇 | YOLOv8 更换主干网络之 VanillaNet |《华为方舟实验室最新成果》
    【前端】HTTP —— HTTP 协议中的细节(超详细!!)
  • 原文地址:https://blog.csdn.net/qq_32618327/article/details/125654652