美文网首页
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