美文网首页
2019-01-19

2019-01-19

作者: 幽并游侠儿_1425 | 来源:发表于2019-01-21 17:08 被阅读30次

一、更改参数,训练Unet神经网络

1、更改的两个方向:

(1)batch_size改大

(2)训练集改多,比如可以改成800.

(3)epoch可以稍微改小,从30改成20。

2、复习训练和跑训练集的方法

参考自己的文章“在Linux服务器上跑Python Unet程序”,其实自己记录得不多,这里重新写一遍跑的方法吧。

(1)服务器选择:用greenpill跑;

(2)在自己电脑上改好代码(参数和需要用到的数据集);

(i)改train数据集:

在Unet_project文件夹下的Data文件夹下的两个文件夹:“Data”和“GT_One_Class”分别代表原始图片和对应的ground truth。先把这里改掉。

注意,需要用到“renamer”软件来确保原始图片和groundtruth的对应名称是一样的。

这次我把前13个原始图像生成的扩增图像作为训练集,一共有871张图片。

注意:数据集从最后一个字为1的文件夹里复制粘贴,这里的名字是改过的。

其次检查名称是否对应:

第一个groudtruth图的名称是:“DS01_01.tif_0b2db155-af35-4c31-9586-f29fecb7e695”

第一个original图的名称是:“DS01_01.tif_0b2db155-af35-4c31-9586-f29fecb7e695”

是对应的,可能因为之前改过名字了。现在就不用改了。

(ii)改参数:

主要是改batch_size和epochs这两个量。

在“main.py”里,batch_size是从batch_size = args.batchsize这句话中得到的。其实就是从函数“get_args”中得到的。

所以改参数,实际上就改函数“get_args”里的变量就可以了。

我把batch_size改成了5,epoches还是30。

(3)放到服务器上运行

(i)把文件通过Winscp传到greenpill上。

(ii)运行python文件的方法:

直接先把目录转移到你需要运行的python文件的目录下,然后输入如下指令:python main.py 就可以了。其中“main.py”是我需要运行的文件。

转移目录的方法:比如:cd  /home/duola/file

(iii)用windows打开ubuntu软件,输入 ssh  用户名@主机地址,进而键入密码。

(iv)返回上一级的方法:cd -就可以了

3、复习测试集的test方法

(1)这个文件“result_visualization"位于visualization文件夹里,是进行测试用的。

(2)测试前需要把由train的代码生成的结果“weights0.pth”放入visualization文件夹内。这个“weights0.pth”文件本身的路径在Unet_project的Checkpoints下。

(3)测试前需要把visualization文件夹下的“img_test”文件夹下的“Data”和“GT_One_Class”文件夹分别存上测试图的data和groundtruth

我放上剩余的由original_14和original_15扩增得到了图,一共有129张。

(4)然后把文件夹cd到test的python文件result_visualization.py所在的文件夹中,然后跑这个python程序。

4、运行时出现的问题

(1)服务器 oom了

可能是:train的图片数量太多了?(不是这个原因)batch_size太大了?(是这个原因)

改main.py的参数,还是把batch改成2吧,然后直接丢到greenpill里把这个文件换掉。

从命令行里运行的batch_size可以看出新的文件覆盖掉了原来的文件。然后正常开始跑了。说明batch_size设置成5不行,设置成2才可以。

(2)跑一个epoch的时间:10分钟

5、写一个能够一口气跑出所有test图并且保存的代码

(1)远程调试教程:(非常重要!)

https://www.jianshu.com/p/9b362cdee2ab

(2)需要改result_visualization.py的代码:

新建一个python文件叫做:result_visualization_1.py

(3)研究see_results这个函数:

see_results这个函数是从dir_img里导入原图,dir_cmp里导入groundtruth,用这个函数“get_dataloader_show”来导入。

(4)研究get_data_loader_show这个函数

(i)在这个“get_dataloader_show”函数里,这一句其实我没有太看懂:ids = [f[:-4] for f in os.listdir(dir_img)]

是只读第一个名字吗?

这个函数的返回值是一个dataloader

我新建了一个test进行测试。文件名为“test_1.py”,保存在visualization这个文件夹内。

其实不用写test的,只需要这一句:

ids = [f[:-4] for f in os.listdir("./img_test/"+args.dataset+"/")],即把dir_img具体化就可以了。

结果发现ids读取了全部图片的名字(不包括文件后缀。)

我进而输入了type(ids)查看文件类型。发现是一个list。
(ii)loader = get_dataloader_show(dir_img, dir_cmp)这里的loader是什么呢?是只包含一个图还是包含了很多个图呢?

loader 是一个class类型的数据。

在class中有一个函数叫getitem,作用是ask for an image。是可以根据输入的index获取一张图。

(5) 研究result_visualization_1.py 里for (data, gt) in loader:这段循环,到底是对一个图循环还是对loader里的所有图循环?

我在test_1.py中跑了,惊讶地发现结果是把所有的结果放在同一张图上。类似这种效果:

这个感觉非常好哎!那我下一次可以试着用10个图生成这个结果图吧。

(6)实际尝试:

一次处理10张照片又oom了。

6、结果总结

(1)original_image_14我处理了第一幅图和前10幅图;
(2)original_image_15我处理了第一幅图和前10幅图;

二、评价结果

https://github.com/lucianolorenti/ImageSegmentationEvaluation.jl

https://github.com/martinkersner/py_img_seg_eval  这个代码特别好

我需要找pixel-based matrix

那么我还是自己写吧,基于https://github.com/martinkersner/py_img_seg_eval这个代码自己去写。

1、np.unique函数:该函数是去除数组中的重复数字,并进行排序之后输出。返回值通常是一个列表。

参考网址:https://blog.csdn.net/u012193416/article/details/79672729

2、for in enumerate这个循环:

例如:

3、explanation:

n_cl : number of classes included in ground truth segmentation

n_ij : number of pixels of class i predicted to belong to class j

t_i : total number of pixels of class i in ground truth segmentation

4、还是自己写程序会更快一点吧

参考文章:https://blog.csdn.net/hjxu2016/article/details/79104607

读入图片的代码:

from PIL import Image

import numpy as np

I = Image.open('./cc_1.png')

I.show()   

I.save('./save.png')

I_array = np.array(I)

print I_array.shape

这理我发现了一个问题:保存的图片的格式是png格式的。肯定不行,我需要改成“.tiff”格式

争取在1点前出完图:结果:在1:30完成了出图和对应图的PPT的书写。

争取在2点前写完evaluation的代码:结果:可能在3点左右才能写完?3:18写完

主要参考文献是学长发给我的那篇论文。

在代码里我需要计算出以下几个量:

n_tp:groundtruth为正,预测也为正

n_tn:groundtruth为负,预测也为负

n_fp:groundtruth为负,但是预测为正

n_fn:groundtruth为正,但是预测为负

正为前景(即255),负为背景(即0)

出现了问题:n_tp,n_tn,n_fp,n_fn的总和和图片的像素之和对应不上。

解决办法:我放到matlab里看一看吧。

出现问题的原因是:

prediction里有介于0~255之间的值,我的处理方法是:大于255/2的都视为255,小于255/2的视为0。

争取在4点前做完PPT:在3:41的时候我写完了定量分析部分的PPT。争取在4:00前写完

其实主要是定量分析部分。

至于那边要求的数据扩增部分,参考:“(1-2)Python3.6进行图片及对应groundtruth的data augmentation”这篇文章进行增加。

增加完了。可以睡了。

相关文章

网友评论

      本文标题:2019-01-19

      本文链接:https://www.haomeiwen.com/subject/yvlxjqtx.html