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

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

U-net最先用做生物图像识别,后来在目标检测、图像转换以及Tone Mapping,Reverse Tone Mapping不少地方都有应用,它区别于早期卷积神经网络的特色是早期的卷积层结果和最后基层的结果是采用级联的形式做为新的神经网络层。而U-net网络名称来源于这样一张图:
(图片来源于百度)
前面的下采样,提取出信息,后面进行具备“新特性”图像的重建,由于整个形状酷似U型因此被称为U-net
由图中能够看出,U-net主要由conv+relu,maxpooling,up-conv,conv1*1几个部分构成,使用TensorFlow函数化这几个部分结果以下:
一、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

二、maxpoolinggithub

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

三、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

四、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

五、conv1*1app

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架构以下ide

 

(图片来源于百度)函数

学习过程当中碰到一位GitHub大佬发表的项目,连接以下: 性能

并未实现本身的代码,本周只是对代码进行了解读
首先解压缩打开项目文件后运行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的强大之处在于

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

二、较深的卷积层感知域较大,可以学习到一些更加抽象的特征

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

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

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

相关文章
相关标签/搜索