Tensorflow入门与实战学习笔记(十三)-FNN图像语义分割
目录
1 图像语义分割
1.1 应用场景:
1.1.1 街景的语义分割
1.2 圖像语义分割的实质
1.3 网络结构
1.4 两种实现方式
1.4.1 采用了上采样
特点:
1.4.2 输入和输出
1.4.3 全卷积
1.5 上采样Upsampling
1.5.1 反向操作
1.5.2 差值法
1.5.3 反池化
1.5.4 反卷积(转置卷积)
2 图像语义分割网络FCN的跳接结构
2.1 FCN效果
2.2 FCN的缺点
3 图像语义分割网络FCN代码实现-预训练网络
3.1 预训练网络
3.2 创建子模型样例
3.3 获取中间层
3.3.1 上取样
3.4 模型预测
3.5 预测结果
3.6 绘图损失函数
3.7 训练中的图像
1 图像语义分割
上图为语义分割的一个实例,其目标是预测出图像中每一个像素的类标签
图像语义分割是图像处理和是计算机视觉技术中关于图像理解的重要一环
语义分割对图像中每一个像素点,我们只对类别进行分割,不对实体进行分割
1.1 应用场景:
1、自动驾驶起床
2、医学图像诊断
3、无人机着陆点判断
1.1.1 街景的语义分割
1.2 圖像语义分割的实质
语义分割的目标:
一般是将一-张RGB图像(height*width*3) 或是灰度图(height*width*1)作为输入,输出的是分割图,其中每一个像素包含了其类别的标签(height* width*1)
具体来说对于这么一张图,我们有五个分类
目前在图像分割领域比较成功的算法,有很大一部分都来自于同一 个先驱: Long等人提出的Fully Convolutional Network (FCN),或者叫全卷积网络。
FCN将分类网络转换成用于分割任务的网络结构,并证明了在分割问题上,可以实现端到端的网络训练。FCN成为了深度学习解决分割问题的奠基石。
1.3 网络结构
分类网络结构尽管表面上来看可以接受任意尺寸的图片作为输入(猫和狗),但是由于网络结构最后全连接层的存在,使其丢失了输入的空间信息,因此,这些网络并没有办法直接用于解决诸如分割等稠密估计的问题。
从而使得网络结构可以适应像素级的稠密估计任务。从而使得网络结构可以适应像素级的稠密估计任务。
1.4 两种实现方式
- 使用预训练网络,自己来写卷积层
- UNET
Unet是2015年诞生的模型,它几乎是当前segmentation项目中应用最广的模型。
Unet能从更少的训练图像中进行学习。当它在少于40张图的生物医学数据集_上训练时,IOU值仍能达到92%。
1.4.1 采用了上采样
特点:
- 本质上 分类网络+上采样=原有图像大小
- 在上采样的过程中结合前面信息再进行上采样,
- 是全卷积网络可以输入任意大小的网络
1.4.2 输入和输出
网络的输入可以为任意尺寸的彩色图像;输出与输入尺寸相同,通道数为: n (目标类别数) +1 (背景)
1.4.3 全卷积
网络在CNN卷积部分不用全连接而是替换成卷积的目的是允许输入的图片为超过某一尺寸的任意大小。
1.5 上采样Upsampling
由于在卷积过程中,我们的特征图像变得很小(比如长宽变为原图像的1/32),为了得到原图像大小的稠密像素预测,我们需要进行上采样。
1.5.1 反向操作
与下采样进行对比,有容易想到三种方式,分别对应最大池化、平均池化和卷积操作的反过来使用。
就得到了我么的上采样
- 1.插值法
- 2.反池化
- 3.反卷积(转置卷积)
1.5.2 差值法
将两个权重相加除以二
1.5.3 反池化
最大池化
平均池化
1.5.4 反卷积(转置卷积)
在这里我们使用反卷积,非常非常重要
我们有内置的函数,strides默认是不放大的 =2为两倍
类自编码器结构
如果采用下图所示的类自编码器结构,或者直接对最后一-层的特征图进行上采样的到原图大小的分割,我们会损失很多细节。
2 图像语义分割网络FCN的跳接结构
2.1 FCN效果
将底层(stride 32)的预测(FCN-32s) 进行2倍的上采样得到的图像,并与从poo|4层(stride 16)进行的预测融合起来(相加)这一部分的网络被称为FCN-16s。随后将这部分的预测再进行一次2倍的 上采样并与从pool3层得到的预测融合起来,这一部分的网络被称为FCN-8s。
当我们的上取样次数一定高度的时候,提取的特征越好
增加Skips结构将最后一层的预测(有更富的全局信息)和更浅层(有更多的局部细节)的预测结合起来,
这样可以在遵守全局预测的同时进行局部预测。
2.2 FCN的缺点
得到的结果还不够精细,对细节不够敏感;
没有考虑像素与像素之间的关系,缺乏空间一致性等。
3 图像语义分割网络FCN代码实现-预训练网络
3.1 预训练网络
采用VGG18,我们把最后的输出做一个上采样
3.2 创建子模型样例
3.3 获取中间层
3.3.1 上取样
3.4 模型预测
3.5 预测结果
3.6 绘图损失函数
num = 3
for image,mask in test_dataset.take(1):pred_mask = model.predict (image)# 取出预测的是哪一个类,像素点1,2,3 具体的分类pred_mask = tf.argmax (pred_mask, axis=-1)# 扩展维度,取前面所有的维度pred_mask = pred_mask[..., tf.newaxis]plt.figure (figsize=(10,10))for i in range (num):plt.subplot (num,3, i*num+1)# 原始图像plt.imshow (tf. keras. preprocessing. image. array_ to_ img (image[i]))# 真实分割图plt.subplot (num, 3,i*num+2)plt.imshow (tf. keras. preprocessing. image. array_ _to_ img (mask[i]))# 预测图plt.subplot (num, 3, i*num+3)plt.imshow (tf. keras. preprocessing. image. array_ to_ img(pred_ mask[i]))
3.7 训练中的图像
Tensorflow入门与实战学习笔记(十三)-FNN图像语义分割相关推荐
- JetpackCompose从入门到实战学习笔记2——Modifier的简单使用
JetpackCompose从入门到实战学习笔记2--Modifier的简单使用 1.Image的使用: @Composable fun Image(modifier: Modifier) {Row ...
- MongoDB 入门教程实战学习笔记-31-mongo 聚合查询管道 Aggregation Pipieline
aggregation 聚合操作处理数据记录并返回计算结果. 聚合操作将多个文档中的值组合在一起, 并且可以对分组数据执行各种操作以返回单个结果. mongodb 提供了三种执行聚合的方法: 聚合管道 ...
- FPGA入门到实战-学习笔记
ref:腾讯教育 FPGA入门到实战-录播课-上海V3学院 https://ke.qq.com/course/66019 老师:尤恺元 第1课 掌握Verilog HDL的高级编码知识 授课日期: 老 ...
- 深度学习100问:图像语义分割有哪些经典的上采样方法?
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 大家都知道目前主流的语义分割模型都是编码-解码框架的.通过编码器不 ...
- Tensorflow C++ API调用Keras模型实现RGB图像语义分割
我的实验是基于PSPNet模型实现二维图像的语义分割,下面的代码直接从得到的h5文件开始往下做... 也不知道是自己的检索能力出现了问题还是咋回事,搜遍全网都没有可以直接拿来用的语义分割代码,东拼西凑 ...
- Mysql 主从复制实战(学习笔记十三)
https://www.cnblogs.com/along21/p/8011596.html https://blog.csdn.net/qq3401247010/article/details/78 ...
- 微信小程序入门与实战学习(笔记一:第一章)
什么是微信小程序 张小龙的定义: 1.无需下载安装即可使用 2.用户"用完即走",无需关心是否安装太多应用 3.应用将无处不在,随时可用 [CP2 (人与服务) 小程序] 1.业务 ...
- 视频教程-DeepLabv3+图像语义分割实战:训练自己的数据集-计算机视觉
DeepLabv3+图像语义分割实战:训练自己的数据集 大学教授,美国归国博士.博士生导师:人工智能公司专家顾问:长期从事人工智能.物联网.大数据研究:已发表学术论文100多篇,授权发明专利10多项 ...
- 视频教程-U-Net图像语义分割实战:训练自己的数据集-计算机视觉
U-Net图像语义分割实战:训练自己的数据集 大学教授,美国归国博士.博士生导师:人工智能公司专家顾问:长期从事人工智能.物联网.大数据研究:已发表学术论文100多篇,授权发明专利10多项 白勇 ¥8 ...
最新文章
- 快速上手的Glide4.x教程
- DIV+CSS中标签ul ol li dl dt dd用法
- SPRING多个占位符配置文件解析源码研究--转
- 微信小程序学习笔记(四)
- pandas全表查询定位某个值所在行列
- leetcode585. 2016年的投资(SQL)
- 正则表达式 Mather类的使用
- Java基础教程:IO流与文件基础
- syslog-ng按源ip保存记录
- python随机产生10个随机数_python(random模块)取10以内的随机数
- 2021年7月文章精选
- Spring Cloud与微服务学习总结(11)——spring cloud-openFeign 声明式远程调用总结
- 零基础带你学习MySQL—字符串相关的函数(十三)
- iOS6中旋转的略微改变
- JDK帮助文档(中文版)
- 关于MSHTML控件使用的问题
- 计算机二级修改并应用基本简历模板,2020年新版个人简历模板大全可编辑(word版).docx...
- linux常用小知识点
- vue多次引用组件,减少每个页面import的方法
- Docker(五)进阶:Docker卷(volumes)