ITPub博客

首页 > 应用开发 > Python > U-net基础入门(包括纠错过程)

U-net基础入门(包括纠错过程)

原创 Python 作者:ckxllf 时间:2020-04-02 14:33:48 0 删除 编辑

  原文在此:U-net:运行你的第一个U-net进行图像分割

  代码: Github代码

  接下来我将就我自己运行原博主代码的调试过程进行一些记录。

  1.libtiff

  有关libtiff库的导入,我认为大家还是使用下载好文件后,进入你的运行环境中,用

  pip instll 下载好的文件路径

  安装最为稳妥

  注意:博主blog中的文件结构与他代码中使用的文件结构是有一定出入的,个人认为是在后续更改代码的时候忘记更改博客中的说明了,所以截至今天2020-04-02,请大家先以我的说明为准,如果再产生新的错误,大家根据报错来进行新的更改。

  2.U-Net 文件夹结构

  –Unet-master

  –deform

  –train

  –label

  0.tif

  1.tif

  ……

  29.tif

  train

  0.tif

  1.tif

  ……

  29.tif

  –my_test

  data. py

  unet. py

  –npydata

  –results

  –test

  0.tif

  1.tif

  ……

  29.tif

  test

  0.tif

  1.tif

  ……

  29.tif

  注:–黑体表示的是文件夹;斜体表示的是文件。

  接下来就要根据这个文件结构来进行代码的调试运行。

  (PS:之后的报错还需要对这个结构进行更改)

  3.data.py

  报错1:

  FileNotFoundError: [Errno 2] No such file or directory: '../npydata/imgs_train.npy' wei shen me

  解决方法:

  确认你的data.py文件是否在’my_test’文件夹中。

  windows中’…/'表示返回上层文件,所以,data.py应该是和’npydata’文件夹的子文件同一级别。

  报错2:

  FileNotFoundError: [Errno 2] No such file or directory: '../test/test\\0.tif'

  解决方法:

  完全按照上述的文件夹结构布局,这个问题自然解决。

  原博主的测试图片文件保存在’test’文件夹当中,在Github中,‘test’&'train’文件夹同在’images’文件夹下。

  我猜测博主是复制’images/test’文件夹后又将’images/test’文件夹复制了一遍。(正因为这一点,在之后的一个报错中我明白了为什么会产生错误。博主这么做是有意的。)

  成功运行’data.py’文件后得到以下结果:

  ------------------------------

  Creating training images...

  ------------------------------

  []

  0

  loading done

  Saving to .npy files done.

  ------------------------------

  Creating test images...

  ------------------------------

  30

  loading done

  Saving to imgs_test.npy files done.

  ------------------------------

  load train images...

  ------------------------------

  (0, 512, 512, 1) (0, 512, 512, 1)

  其他:

  注意此次结果中的‘0’的显示

  ……………………………………

  []

  0

  loading done

  ……………………………………

  (0, 512, 512, 1) (0, 512, 512, 1)

  在运行’data.py’文件中我还遇到了一些Warning,这个也是预告着之后会出问题。如下:

  ../Unet-master/my_test/data.py:207: RuntimeWarning: Mean of empty slice.

  mean = imgs_train.mean(axis = 0)

  ..\lib\site-packages\numpy\core\_methods.py:78: RuntimeWarning: invalid value encountered in true_divide

  ret, rcount, out=ret, casting='unsafe', subok=False)

  同时,在’npydata’文件夹下生成三个’.npy’文件

  –npydata

  imgs_mask_train.npy

  imgs_test.npy

  imgs_train.npy

  4.unet.py

  报错1.1:

  TypeError: 'module' object is not callable

  解决方法:

  更改问题代码。

  因为tensorflow不同的版本,语法的使用会有所不同。

  #更改前

  merge6 = merge([crop4,up6], mode = 'concat', concat_axis = 3)

  #更改后

  merge6 = Concatenate([drop4,up6],axis=3)

  同理更改merge7,8,9:

  #更改后

  merge7 = Concatenate(axis=3)([conv3, up7])

  ...

  merge8 = Concatenate(axis=3)([conv2, up8])

  ...

  merge9 = Concatenate(axis=3)([conv1, up9])

  ...

  报错1.2:

  NameError: name 'Concatenate' is not defined

  解决方法:

  ‘from keras.layers import Concatenate ’

  把Concatenate模块(module)载入后才能调用。

  报错2:

  UnboundLocalError: local variable 'batch_index' referenced before assignment

  解决方法1:

  这次先说报错原因,在’data.py’的报错1中的其他提到了注意‘0’的显示,这说明程序其实并没能够载入数据到.npy文件当中去,代码产生了错误。而这个错误的原因是原作者对代码编写时对路径的定义产生了问题。

  class dataProcess(object):

  def __init__(self, out_rows, out_cols,

  data_path = "../deform/train",

  label_path = "../deform/label",

  test_path = "../test",

  npy_path = "../npydata",

  img_type = "tif"

  ):

  data_path & label_path的路径定义和之后的代码产生了冲突,为了解决这一冲突,不得已把文件结构变得更加复杂化。 郑州做人流哪家医院好 http://mobile.sptdnk.com/

  还记的以开始所说的要对结构进行更改吗?

  U-Net 文件夹结构

  –Unet-master

  –deform

  –label

  0.tif

  1.tif

  ……

  29.tif

  train(注意这个train文件夹只是命名为train,里面的tif文件是label文件)

  0.tif

  1.tif

  ……

  29.tif

  –train

  0.tif

  1.tif

  ……

  29.tif

  train

  0.tif

  1.tif

  ……

  29.tif

  –my_test

  data. py

  unet. py

  –npydata

  –results

  –test

  0.tif

  1.tif

  ……

  29.tif

  +test

  0.tif

  1.tif

  ……

  29.tif

  #修改文件结构前

  imgs = glob.glob(self.data_path+"/*."+self.img_type)

  >>无任何结果显示

  #修改文件结构后

  imgs = glob.glob(self.data_path+"/*."+self.img_type)

  >>'../deform/train\\0.tif','../deform/train\\1.tif',...

  #修改文件结构前

  midname = imgname[imgname.rindex("/")+1:]

  >>无任何结果显示

  #修改文件结构后

  midname = imgname[imgname.rindex("/")+1:]

  >>'train\0.tif','train\1.tif',...

  img = load_img(self.data_path + "/" + midname,grayscale = True)

  label = load_img(self.label_path + "/" + midname,grayscale = True)

  #(注意这个midname其实是'train\*.tif',所以之后的文件结构更改时,'deform-label-train'文件夹只是命名为train,里面的tif文件是label的文件)

  解决方法2:

  这个bug还有一个简单的解决方式,因为会出现这个问题,说明你用的应该是windows系统,而正因为此,系统的分隔符判定不同。

  #修改前

  midname = imgname[imgname.rindex("/")+1:]

  #修改后

  midname = imgname[imgname.rindex("\\")+1:]

  使用这个方法,你的文件结构就可以简化。

  #存放图片的文件结构

  | --deform

  | |

  | |--label

  | | | 0.tif

  | | | 1.tif

  | | | ……

  | | | 29.tif

  | | |

  | |--train

  | | | 0.tif

  | | | 1.tif

  | | | ……

  | | | 29.tif

  | | |

  |--test

  | | 0.tif

  | | 1.tif

  | | ……

  | | 29.tif

  | |

  当你把所有以上的代码报错都解决了,重新运行data.py,生成3个.npy文件,保存在’npydata’文件夹中,然后运行unet.py,代码就可以跑通了,但是结果如何还无法保证。

  5.因为会有

  报错*

  FileNotFoundError: [Errno 2] No such file or directory: '../results/imgs_mask_test.npy'

  解决方法:

  #定位

  print('predict test data')

  imgs_mask_test = model.predict(imgs_test, batch_size=1, verbose=1)

  #添加代码

  path = '../results'

  if not os.path.exists(path):

  os.mkdir(path)

  #定位

  np.save('../results/imgs_mask_test.npy', imgs_mask_test)

  原理

  可以参考我的另一篇blog。

  同理,你之前遇到的任何可能的文件夹错误都可以使用这一个方法来解决。

  结束语

  今天先记录一下U-net学习的第一步,之后的过程有需要继续更新。

  最后让大家看那么久的文字过意不去,最后贴上文件结构图:

  运行程序前的结构:

  deform下包含两个文件夹,label和train。

  my_test文件夹下面是两个主要的.py文件。

  label和train文件夹下是训练用的图片,为了减少计算,我只放了两张图在里面,同理test文件夹也一样。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69945560/viewspace-2684151/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: Python PyQt5简介
请登录后发表评论 登录
全部评论

注册时间:2019-08-16

  • 博文量
    204
  • 访问量
    262635