TensorFlow中的语义分割套件

描述

该存储库用作语义细分套件。目标是轻松实现,训练和测试新的语义细分模型!完成以下内容:

  • 训练和测试方式
  • 资料扩充
  • 几种最先进的模型。轻松随插即
  • 能够使用任何数据集
  • 评估包括准确性,召回率,f1得分,平均准确性,每类准确性和平均IoU
  • 绘制损失函数和准确性

欢迎提出任何改进此存储库的建议,包括希望看到的任何新细分模型。

也可以签出Transfer Learning Suite

引用

如果发现此存储库有用,请考虑使用回购链接将其引用:)

前端

当前提供以下特征提取模型:

模型

当前提供以下细分模型:

  • 基于SegNet的编解码器。该网络使用VGG样式的编码器/解码器,其中解码器中的升采样是使用转置卷积完成的。
  • 具有基于SegNet的跳过连接的编解码器。该网络使用VGG样式的编码器/解码器,其中解码器中的升采样是使用转置卷积完成的。另外,采用从编码器到解码器的附加跳过连接。
  • 用于语义分割的移动UNet。将MobileNets深度可分离卷积与UNet的思想相结合,以建立一个高速,低参数的语义分割模型。
  • 金字塔场景解析网络。在本文中,通过金字塔池模块以及所提出的金字塔场景解析网络(PSPNet)来应用基于不同区域的上下文聚合的全局上下文信息的功能。请注意,原始的PSPNet使用具有扩展卷积的ResNet,但是一个是此存储库仅具有常规ResNet
  • The One Hundred Layers Tiramisu:用于语义分割的完全卷积DenseNet。使用下采样-上采样样式的编码器-解码器网络。每个阶段(即池化层之间的阶段)都使用密集块。此外,还连接了从编码器到解码器的跳过连接。在代码中,这是FC-DenseNet模型。
  • 对Atrous卷积语义图像分割的再思考。这是DeepLabV3网络。使用Atrous空间金字塔池通过使用多个atrous速率来捕获多尺度上下文。这产生了一个大的接受场。
  • RefineNet:用于高分辨率语义分割的多路径优化网络。一个多路径优化网络,该网络显式地利用降采样过程中的所有可用信息,以实现使用远程残差连接的高分辨率预测。这样,可以使用早期卷积中的细粒度特征直接完善捕获更深层的高级语义特征。
  • 用于街道场景语义分割的全分辨率残差网络。通过使用网络中的两个处理流,将多尺度上下文与像素级精度结合在一起。残留流以全图像分辨率传输信息,从而可以精确地遵守分割边界。池化流经过一系列池化操作以获得可靠的功能以进行识别。两个流使用残差以全图像分辨率耦合。在代码中,这是FRRN模型。
  • 大内核问题-通过全球卷积网络改进语义分割。提出了一个全球卷积网络来解决语义分割的分类和本地化问题。使用较大的可分离内核扩展接收场,并使用边界细化块进一步提高边界附近的定位性能。
  • AdapNet:不利环境条件下的自适应语义分段通过使用具有无规则卷积的多尺度策略执行较低分辨率的处理,来修改ResNet50体系结构。这是使用双线性放大而不是转置卷积的稍微修改的版本,因为发现给出了更好的结果。
  • ICNet用于高分辨率图像的实时语义分割。提出了一种基于压缩PSPNet的图像级联网络(ICNet),该网络在适当的标签指导下合并了多分辨率分支,以应对这一挑战。大多数处理都是在低分辨率下高速完成的,多尺度辅助损耗有助于获得准确的模型。请注意,对于此模型,已经实现了网络,但尚未集成其训练
  • 带有可分解卷积的编解码器用于语义图像分割。这是DeepLabV3 +网络,在常规DeepLabV3模型的顶部添加了解码器模块。
  • DenseASPP在街道场景中的语义分割。使用膨胀卷积结合密集连接的多种不同尺度
  • 用于单通语义分割的密集解码器快捷连接。在细分模型的解码器阶段使用密集连接的密集解码器快捷连接。注意:由于ResNeXt模块的构造,该网络需要花费一些额外的时间来加载
  • BiSeNet:用于实时语义分割的双边分割网络。BiSeNet使用步幅较小的空间路径来保存空间信息并生成高分辨率特征,同时使用具有快速下采样策略的并行上下文路径来获得足够的接收场。
  • 或者自己制作并即插即用!

文件和目录

  • train.py对选择的数据集进行训练。默认为CamVid
  • test.py在选择的数据集上进行测试。默认为CamVid
  • predict.py使用新近训练的模型对单个图像进行预测
  • helper.py快速助手功能,用于数据准备和可视化
  • utils.py用于打印,调试,测试和评估的实用程序
  • models包含所有模型文件的文件夹。使用来构建模型,或使用预先构建的模型
  • CamVid用于语义分割的CamVid数据集作为测试平台。这是32类版本
  • checkpoints训练期间每个时期的检查点文件
  • Test测试结果包括图像,每类准确性,准确性,召回率和f1分数

安装

该项目具有以下依赖性:

  • Numpy的 sudo pip install numpy
  • OpenCV Python sudo apt-get install python-opencv
  • TensorFlow sudo pip install --upgrade tensorflow-gpu

用法

唯一要做的就是按照以下结构设置文件夹:

├── "dataset_name"

|   ├── train

|   ├── train_labels

|   ├── val

|   ├── val_labels

|   ├── test

|   ├── test_labels

将一个文本文件放在数据集目录下,称为“ class_dict.csv”,其中包含类列表以及R,G,B颜色标签,以可视化分割结果。这种字典通常随数据集一起提供。这是CamVid数据集的示例:

name,r,g,b

Animal,64,128,64

Archway,192,0,128

Bicyclist,0,128, 192

Bridge,0, 128, 64

Building,128, 0, 0

Car,64, 0, 128

CartLuggagePram,64, 0, 192

Child,192, 128, 64

Column_Pole,192, 192, 128

Fence,64, 64, 128

LaneMkgsDriv,128, 0, 192

LaneMkgsNonDriv,192, 0, 64

Misc_Text,128, 128, 64

MotorcycleScooter,192, 0, 192

OtherMoving,128, 64, 64

ParkingBlock,64, 192, 128

Pedestrian,64, 64, 0

Road,128, 64, 128

RoadShoulder,128, 128, 192

Sidewalk,0, 0, 192

SignSymbol,192, 128, 128

Sky,128, 128, 128

SUVPickupTruck,64, 128,192

TrafficCone,0, 0, 64

TrafficLight,0, 64, 64

Train,192, 64, 128

Tree,128, 128, 0

Truck_Bus,192, 128, 192

Tunnel,64, 0, 64

VegetationMisc,192, 192, 0

Void,0, 0, 0

Wall,64, 192, 0

注意:如果使用的是依赖于预训练的ResNet的任何网络,则需要使用提供的脚本下载预训练的权重。当前是:PSPNet,RefineNet,DeepLabV3,DeepLabV3 +,GCN。

然后,可以简单地运行train.py!查看可选的命令行参数:

usage: train.py [-h] [--num_epochs NUM_EPOCHS]

[--checkpoint_step CHECKPOINT_STEP]

[--validation_step VALIDATION_STEP] [--image IMAGE]

[--continue_training CONTINUE_TRAINING] [--dataset DATASET]

[--crop_height CROP_HEIGHT] [--crop_width CROP_WIDTH]

[--batch_size BATCH_SIZE] [--num_val_images NUM_VAL_IMAGES]

[--h_flip H_FLIP] [--v_flip V_FLIP] [--brightness BRIGHTNESS]

[--rotation ROTATION] [--model MODEL] [--frontend FRONTEND]

optional arguments:

-h, --help            show this help message and exit

--num_epochs NUM_EPOCHS

Number of epochs to train for

--checkpoint_step CHECKPOINT_STEP

How often to save checkpoints (epochs)

--validation_step VALIDATION_STEP

How often to perform validation (epochs)

--image IMAGE         The image you want to predict on. Only valid in

"predict" mode.

--continue_training CONTINUE_TRAINING

Whether to continue training from a checkpoint

--dataset DATASET     Dataset you are using.

--crop_height CROP_HEIGHT

Height of cropped input image to network

--crop_width CROP_WIDTH

Width of cropped input image to network

--batch_size BATCH_SIZE

Number of images in each batch

--num_val_images NUM_VAL_IMAGES

The number of images to used for validations

--h_flip H_FLIP       Whether to randomly flip the image horizontally for

data augmentation

--v_flip V_FLIP       Whether to randomly flip the image vertically for data

augmentation

--brightness BRIGHTNESS

Whether to randomly change the image brightness for

data augmentation. Specifies the max bightness change

as a factor between 0.0 and 1.0. For example, 0.1

represents a max brightness change of 10% (+-).

--rotation ROTATION   Whether to randomly rotate the image for data

augmentation. Specifies the max rotation angle in

degrees.

--model MODEL         The model you are using. See model_builder.py for

supported models

--frontend FRONTEND   The frontend you are using. See frontend_builder.py

for supported models

结果

这些是带有11个类的CamVid数据集的一些示例结果(先前的研究版本)。

在训练中,使用的批处理大小为1,图像大小为352x480。以下结果适用于训练了300个纪元的FC-DenseNet103模型。使用RMSProp的学习速率为0.001,衰减率为0.995。没有像本文中那样使用任何数据增强。也没有使用任何类平衡。这些只是一些快速而肮脏的示例结果。

请注意,检查点文件未上传到此存储库,因为对于GitHub太大(大于100 MB

原始精度

准确性

天空

93.0

94.1

建造

83.0

81.2

37.8

38.3

94.5

97.5

路面

82.2

87.9

77.3

75.5

标志符号

43.9

49.7

围栏

37.1

69.0

汽车

77.3

87.0

行人

59.6

60.3

单车

50.5

75.3

未贴标签

不适用

40.9

全球

91.5

89.6

损失与时代

 累积 vs时代

   

TensorFlow中的语义分割套件的更多相关文章

  1. 利用NVIDIA-NGC中的MATLAB容器加速语义分割

    利用NVIDIA-NGC中的MATLAB容器加速语义分割 Speeding Up Semantic Segmentation Using MATLAB Container from NVIDIA NG ...

  2. 语义分割(semantic segmentation) 常用神经网络介绍对比-FCN SegNet U-net DeconvNet,语义分割,简单来说就是给定一张图片,对图片中的每一个像素点进行分类;目标检测只有两类,目标和非目标,就是在一张图片中找到并用box标注出所有的目标.

    from:https://blog.csdn.net/u012931582/article/details/70314859 2017年04月21日 14:54:10 阅读数:4369 前言 在这里, ...

  3. 语义分割之车道线检测Lanenet(tensorflow版)

    Lanenet 一个端到端的网络,包含Lanenet+HNet两个网络模型,其中,Lanenet完成对车道线的实例分割,HNet是一个小网络结构,负责预测变换矩阵H,使用转换矩阵H对同属一条车道线的所 ...

  4. PyTorch中的MIT ADE20K数据集的语义分割

    PyTorch中的MIT ADE20K数据集的语义分割 代码地址:https://github.com/CSAILVision/semantic-segmentation-pytorch Semant ...

  5. 笔记︱图像语义分割(FCN、CRF、MRF)、论文延伸(Pixel Objectness、)

    图像语义分割的意思就是机器自动分割并识别出图像中的内容,我的理解是抠图- 之前在Faster R-CNN中借用了RPN(region proposal network)选择候选框,但是仅仅是候选框,那 ...

  6. 人工智能必须要知道的语义分割模型:DeepLabv3+

    图像分割是计算机视觉中除了分类和检测外的另一项基本任务,它意味着要将图片根据内容分割成不同的块.相比图像分类和检测,分割是一项更精细的工作,因为需要对每个像素点分类,如下图的街景分割,由于对每个像素点 ...

  7. 语义分割--全卷积网络FCN详解

    语义分割--全卷积网络FCN详解   1.FCN概述 CNN做图像分类甚至做目标检测的效果已经被证明并广泛应用,图像语义分割本质上也可以认为是稠密的目标识别(需要预测每个像素点的类别). 传统的基于C ...

  8. 自动网络搜索(NAS)在语义分割上的应用(一)

    [摘要]本文简单介绍了NAS的发展现况和在语义分割中的应用,并且详细解读了两篇流行的work:DARTS和Auto-DeepLab. 自动网络搜索 多数神经网络结构都是基于一些成熟的backbone, ...

  9. FCN与U-Net语义分割算法

    FCN与U-Net语义分割算法 图像语义分割(Semantic Segmentation)是图像处理和是机器视觉技术中关于图像理解的重要一环,也是 AI 领域中一个重要的分支.语义分割即是对图像中每一 ...

随机推荐

  1. Python中的Pexpect模块的简单使用

    Pexpect 是一个用来启动子程序并对其进行自动控制的 Python 模块. Pexpect 可以用来和像 ssh.ftp.passwd.telnet 等命令行程序进行自动交互.以下所有代码都是在K ...

  2. Docker网络配置进阶

    Docker启动会默认创建docker0虚拟网桥,是Linux的一个bridge,可以理解成一个软件交换机.它会在挂载到它的网口之间进行转发. 之后所有容器都是在172.17.0.x的网段上,并且可以 ...

  3. 密码学系列之:NIST和SHA算法

    目录 简介 SHA1 SHA2 SHA3 简介 SHA算法大家应该都很熟悉了,它是一个用来计算hash的算法,目前的SHA算法有SHA1,SHA2和SHA3种.这三种算法都是由美国NIST制定的. N ...

  4. IntelliJ IDEA打开Maven项目,Spring boot所有依赖红名,不可用

    导入外部的springboot项目时,出现报红线,无论怎么刷新maven就是不下载依赖包,情况如下 解决办法: 1)直接去自己的maven仓库,找到Spring boot,然后直接删除下面的文件 2) ...

  5. phpstorm 实现分屏显示

  6. .NET之生成数据库全流程

    开篇语 本文主要是回顾下从项目创建到生成数据到数据库(代码优先)的全部过程.采用EFCore作为ORM框架. 本次示例环境:vs2019.net5.mysql 创建项目 本次事例代码是用过vs2019 ...

  7. 2021最新Java面试题全集-20210326版

    在手撕了数千道网络流传的面试题,外加十多个不眠之夜, 终于从里面精心挑选出约500道题目, 做为大家求职.跳槽前复习准备面试使用. 一:挑选题目的原则: 常考的.常被面试问到的 题目有一定的深度和难度 ...

  8. 日常Bug排查-系统失去响应-Redis使用不当

    日常Bug排查-系统失去响应-Redis使用不当 前言 日常Bug排查系列都是一些简单Bug排查,笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材_. Bug现场 开发反应线上系统出现失去响 ...

  9. JAVA并发(1)-AQS(亿点细节)

    AQS(AbstractQueuedSynchronizer), 可以说的夸张点,并发包中的几乎所有类都是基于AQS的. 一起揭开AQS的面纱 1. 介绍 为依赖 FIFO阻塞队列 的阻塞锁和相关同步 ...

  10. VSCode·备份&还原配置及拓展项

    阅文时长 | 0.54分钟 字数统计 | 924字符 主要内容 | 1.引言&背景 2.备份VSCode配置 3.还原VSCode配置 4.Syncing常用命令 5.声明与参考资料 『VSC ...