本周学习的是U-net神经网络,据了解,U-net论文的作者是参加ISBI竞赛取得效果后发表的文章供大家学习,论文原文链接:

https://arxiv.org/abs/1505.04597
U-net最早用作生物图像识别,后来在目标检测、图像转换以及Tone Mapping,Reverse Tone Mapping很多地方都有应用,它区别于早期卷积神经网络的特点是早期的卷积层结果和最后基层的结果是采用级联的形式作为新的神经网络层。而U-net网络名称来源于这样一张图:
(图片来源于百度)
前面的下采样,提取出信息,后面进行具有“新特性”图像的重建,因为整个形状酷似U型所以被称为U-net
由图中可以看出,U-net主要由conv+relu,maxpooling,up-conv,conv1*1几个部分构成,使用TensorFlow函数化这几个部分结果如下:
1、conv+relu
1 def conv_relu_layer(net,numfilters,name):
2     network = tf.layers.conv2d(net,
3                         activation=tf.nn.relu,
4                         filters= numfilters,
5                         kernel_size=(3,3),
6                         padding='Valid',
7                         name= "{}_conv_relu".format(name))
8      return network

2、maxpooling

1 def maxpool(net,name):
2     network = tf.layers.max_pooling2d(net,
3                     pool_size= (2,2),
4                     strides = (2,2),
5                     padding = 'valid',
6                     name = "{}_maxpool".format(name))
7     return network

3、up-conv

1 def up_conv(net,numfilters,name):
2     network = tf.layers.conv2d_transpose(net,
3                     filters = numfilters,
4                     kernel_size= (2,2),
5                     strides= (2,2),
6                     padding= 'valid',
7                     activation= tf.nn.relu,
8                     name = "{}_up_conv".format(name))
9     return network

4、copy-prop

1 def copy_crop(skip_connect,net):
2     skip_connect_shape = skip_connect.get_shape()
3     net_shape = net.get_shape()
4     print(net_shape[1])
5     size = [-1,net_shape[1].value,net_shape[2].value,-1]
6     skip_connect_crop = tf.slice(skip_connect,[0,0,0,0],size)
7     concat = tf.concat([skip_connect_crop,net],axis=3)
8     return concat

5、conv1*1

def conv1x1(net,numfilters,name):return tf.layers.conv2d(net,filters=numfilters,strides=(1,1),kernel_size=(1,1),name = "{}_conv1x1".format(name),padding='SAME')

 1 #define input data
 2 input  = tf.placeholder(dtype=tf.float32,shape = (64,572,572,3))
 3
 4
 5 #define downsample path
 6 network = conv_relu_layer(input,numfilters=64,name='lev1_layer1')
 7 skip_con1 = conv_relu_layer(network,numfilters=64,name='lev1_layer2')
 8 network = maxpool(skip_con1,'lev2_layer1')
 9 network = conv_relu_layer(network,128,'lev2_layer2')
10 skip_con2 = conv_relu_layer(network,128,'lev2_layer3')
11 network = maxpool(skip_con2,'lev3_layer1')
12 network = conv_relu_layer(network,256,'lev3_layer1')
13 skip_con3 = conv_relu_layer(network,256,'lev3_layer2')
14 network = maxpool(skip_con3,'lev4_layer1')
15 network = conv_relu_layer(network,512,'lev4_layer2')
16 skip_con4 = conv_relu_layer(network,512,'lev4_layer3')
17 network = maxpool(skip_con4,'lev5_layer1')
18 network = conv_relu_layer(network,1024,'lev5_layer2')
19 network = conv_relu_layer(network,1024,'lev5_layer3')
20
21 #define upsample path
22 network = up_conv(network,512,'lev6_layer1')
23 network = copy_crop(skip_con4,network)
24 network = conv_relu_layer(network,numfilters=512,name='lev6_layer2')
25 network = conv_relu_layer(network,numfilters=512,name='lev6_layer3')
26
27 network = up_conv(network,256,name='lev7_layer1')
28 network = copy_crop(skip_con3,network)
29 network = conv_relu_layer(network,256,name='lev7_layer2')
30 network = conv_relu_layer(network,256,'lev7_layer3')
31
32
33 network = up_conv(network,128,name='lev8_layer1')
34 network = copy_crop(skip_con2,network)
35 network = conv_relu_layer(network,128,name='lev8_layer2')
36 network = conv_relu_layer(network,128,'lev8_layer3')
37
38
39 network = up_conv(network,64,name='lev9_layer1')
40 network = copy_crop(skip_con1,network)
41 network = conv_relu_layer(network,64,name='lev9_layer2')
42 network = conv_relu_layer(network,64,name='lev9_layer3')
43 network = conv1x1(network,2,name='lev9_layer4')

利用TensorFlow实现的U-net架构如下

(图片来源于百度)

学习过程中碰到一位GitHub大佬发表的项目,链接如下:

https://github.com/shuyucool/U-net-segmentation
并未实现自己的代码,本周只是对代码进行了解读
首先解压缩打开项目文件后运行data.py会在data文件夹下的

aug_label,aug_train,aug_merge,mergre,npydata文件夹生成数据增强后的图片
augimgs_mask_train.npy:所有增强后的"ground truth"数据,数据增强源是'data/train/label'路径下的图片
augimgs_train.npy : 所有增强后的"原图"数据,数据增强源是'data/train/image'路径下的图片
imgs_test.npy:'test'文件夹中的数据
unet.py文件用来训练模型,训练好的模型的最优参数会保存在unet.hdf5下
test_predict.py进行模型结果的可视化
imgs_mask_test.npy是对test文件夹下的测试图像进行预测得到的结果

运行test_predict.py即可将模型预测得到的结果进行可视化

最后data_version.py可以将测试集及其结果集保存为指定的图片格式以及指定的路径

注意程序最好在Ubuntu上跑,Windows中要进行很多改动

U-net的本质还是从cnn上改写过来的,之前对cnn了解并不是很深入,这次特别对cnn做了一些了解

与此同时通过查询资料了解到cnn的强大之处在于

1、较浅的卷积层感知域较小,容易学习到一些局部区域的特征

2、较深的卷积层感知域较大,能够学习到一些更加抽象的特征

这些抽象特征对物体的大小、位置和方向等敏感性更低,从而有助于分类性能的提高

而对u-net的根本认识还是要基于FCN啊,往后几天不打算往后进行什么,主要还是扎实基础

以上就是本周进度了,加油!

转载于:https://www.cnblogs.com/zdm-code/p/11442672.html

软件工程学习进度第九周暨暑假学习进度之第九周汇总相关推荐

  1. 软件工程学习进度第七周暨暑期学习进度之第七周汇总

    本周的学习重心依旧是深度学习,主要实践项目为基于TensorFlow深度学习框架的字母.数字组成的验证码识别.在上周进行了mnist手写数字识别之后,本以为验证码识别是一件很简单的事,但实践起来发现并 ...

  2. 软件工程学习进度第三周暨暑期学习进度之第三周汇总

    第三周,本周并未将重心放在java学习上,只是在教数据结构的刘老师留的暑假作业PTA练习题上使用java进行编程,本周的重心主要放在机器学习上,javaweb只是了解了一部分jQuery的内容,优化了 ...

  3. 软件工程学习进度第八周暨暑期学习进度之第八周汇总

    本周的主要工作是win10+TensorFlow环境下的FCN全卷积神经网络的实现 FCN对图像进行像素级的分类,从而解决了语义级别的图像分割问题.与经典的CNN在卷积层使用全连接层得到固定长度的特征 ...

  4. 软件工程学习进度第六周暨暑期学习进度之第六周汇总

    本周通过深度学习的卷积神经网络(CNN)实现了mnist数据集手写数字识别(前段时间实现的是全连接神经网络做的手写数字识别),使用全连接时识别准确率在91%左右,这个精度在手写数字中实在不高,但是使用 ...

  5. 软件工程学习进度第五周暨暑期学习进度之第五周汇总

    博文内容中字符过多,拒绝显示 转载于:https://www.cnblogs.com/zdm-code/p/11300609.html

  6. 软件工程学习进度第四周暨暑期学习进度之第四周汇总

    本周进度主要有javaweb制作的学生信息管理系统的分页查询功能以及分页插件的实现,web前端中css的页面布局方式.浮动和清除浮动的方法,css动画,元素定位类型,以及css图片精灵和钩子,另外实现 ...

  7. 深度学习笔记第一门课第一周:深度学习引言

    本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...

  8. 《机器学习》周志华 学习笔记

    <机器学习>周志华 学习笔记 第一章 绪论 1.1 引言 机器学习:致力于研究如何通过计算的手段,利用经验来改善系统自身的性能. 经验:"经验"通常以"数据& ...

  9. 2014暑假学习总结

    计算机:B/S扫尾 java开始     假期伊始,计算机学习在B/S尾巴阶段,也是最有意思的一段,主要学习了javascript(三周),css+div(2天),JQuery(一周),Ajax(一周 ...

最新文章

  1. 智能驾驶L2发展策略
  2. python 习题集锦
  3. virtual box卸载后无法正常安装
  4. 聚集索引:SQL Server 进阶 Level 3
  5. 3.7 非极大值抑制-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  6. 云端的ABAP Restful服务开发
  7. ASP.NET MVC+LINQ开发一个图书销售站点(9):编辑目录
  8. 传统数仓不够怎么办?不妨看看这个银行的混合数仓实践,建议收藏
  9. C 语言取整的几种方法6,C语言有以下几种取整方法:
  10. 《海外社交媒体营销》一一2.2 根据你的公司特点,制订适合自己的营销计划...
  11. 升级到新SQL Server版本
  12. J2EE 快速开发框架 Wabacus 3.3 版功能列表
  13. 将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库
  14. 58移动开发 App 工厂
  15. CommonAPI编写代码
  16. Molecular Contrastive Learning of Representations via Graph Neural Networks
  17. linux系统mysql密码忘记了怎么办_Linux中MySQL密码忘了怎么办
  18. Mysql操作语句大全
  19. 深入理解Mysql事务ACID特性以及事务隔离级别
  20. SQL入门SQL基本介绍

热门文章

  1. python信用卡客户_Python开发之基于模板匹配的信用卡数字识别功能
  2. 开源 微软 语音识别_能用嘴,绝不动手!支持跨屏的语音输入法,它来了!
  3. MySQL substr函数使用详解
  4. 初探ECS-Linux,后期还会更新。
  5. 递归算法造成的问题分析与解决
  6. 76.Nodejs Express目录结构
  7. python--httplib模块使用
  8. flume多个source
  9. 如何判断单链表是否存在环
  10. sencha touch 入门学习资料大全