Unet做单类别分割的详细步骤

参考文章:https://blog.csdn.net/ECHOSON/article/details/122914826

我是参考上面这个文章来做的,但是在做实验的过程中还是出现了很多问题,所以这里还是自己写一篇文章记录一下每一步出现的问题。

前面的代码下载和环境配置等步骤直接参考上文即可。这里我们直接来到数据处理这一步。

1.数据处理

在进行数据处理时,当我们使用labelme标注完jpg图片产生了json文件后,就需要进行数据格式转换。我在这一步就开始出现问题了。

首先与参考文章中所说的不同,我们需要将标注产生的json文件全部放到一个文件夹中,文件夹中只能包含json文件,不能包含原始的jpg图片,否则labelme2seg.py程序无法正常运行。所以建议大家新建两个文件夹,一个【jsons】文件夹和一个【labels】文件夹,将标注后产生的json文件全部复制到【jsons】文件夹中,【labels】文件夹暂时为空。

在运行labelme2seg.py文件前将下图红框中标注的两个文件地址改为自己刚刚创建的【jsons】文件夹和【labels】文件夹的地址,然后再右键【Run Labelme2seg.py】运行程序,进行数据格式转换。

 运行成功后会在【jsons】文件夹中出现每个json文件对应的【_json】文件夹,其中包含了【img.png】、【label.png】、【label_names.txt】、【label_viz.png】,如下图所示:

 以及【labels】文件夹中会出现每个文件对应的【png】文件,如下图所示:

扫描二维码关注公众号,回复: 15902897 查看本文章

 出现的问题:运行labelme2seg.py文件时报错【TypeError: '>' not supported between instances of 'NoneType' and 'int】

 起初根据报错内容我一直以为是程序源码有问题,但是在尝试了很多别人的方法对代码进行修改后发现还是一直报同样的错误,问题无法解决。后来实在无解于是便请教了我的导师,不得不说老师还是牛的,我花了一两天的时间都解决不了的问题导师很快就把结果都跑出来了并且也告诉我了这个报错出现的原因。

报错原因:有一个json标注文件中的一个标注只有一个point,无法确定一个封闭区间,程序无法正常执行。

解决方法:去掉那个标注后,程序可以正常执行。

使用labelme标注工具去掉json标注文件中的某个标注点的方法可以参考我的上篇文章:https://blog.csdn.net/m0_63604019/article/details/130619996

 2.模型训练

在进行模型训练前,首先在项目的主目录下创建一个【dataset】文件夹用来存放自己的数据集,【dataset】文件夹中再创建【results】、【Test_Images】、【Test_Labels】、【Training_Images】、【Training_Labels】五个文件夹。

其中,【results】文件夹用来存放后续的测试结果,再将数据处理后得到的【json】文件(注意:是labelme对jpg图片标注后产生的json文件,不是我们创建的jsons文件夹)和我们创建的【labels】文件夹中的png文件分别分为两个部分,一部分放到【Test_Images】、【Test_Labels】这两个文件夹中,另一部分放到【Training_Images】、【Training_Labels】这两个文件夹中。

比如,将【20230428_174717_V_Center.json】文件放到了【Training_Images】文件夹中的话,那么它对应的【labels】文件夹中的【20230428_174717_V_Center.png】文件就需要放到【Training_Labels】文件夹中。

当数据集处理好了后,我们打开【train,py】文件,将data_path这里的数据集位置改为刚刚创建的【dataset】的绝对路径,然后右键【Run train.py】运行即可。

运行成功后,模型将会保存在本地目录下:

 在运行【train.py】程序时,我又出现了一个报错。

报错内容:ValueError: num_samples should be a positive integer value, but got num_samp=0

报错原因:代码中的shuffle参数设置错误。源代码中的shuffle参数设置的是shuffle=True

 解决方法:因为已经有batch_size了,就不需要shuffle来进行随机了,将shuffle设置为shuffle=False即可。

3.模型训练

打开【test.py】文件,将代码中22行的三个文件路径修改为对应的自己创建的文件夹路径:

 再将59行的模型参数的地址改为训练好的模型的地址,即训练后得到的【best_model.pth】文件的地址:

 修改完成之后右键【Run train.py】开始运行,当出现如下图所示字段则表示程序运行完成。

运行的结果将会保存在项目主目录的【results】文件夹下,运行产生的【png】文件保存在项目的【dataset】->【results】文件夹中。

 在运行【test.py】文件时,我又又又出现了一个问题。

报错内容:AttributeError: module 'numpy' has no attribute 'int'. `np.int` was a deprecated alias for the builtin `int`. To avoid this error in existing code, use `int` by itself. Doing this will not modify any behavior and is safe. ......

报错原因:numpy的版本过高导致的。

解决方法:将已安装的numpy卸载后重新安装指定的较低版本(比如我们先安装1.18.5版本的试试)

卸载指令:pip uninstall numpy

安装指令:pip install numpy==1.18.5

此时如果所指定的版本过低,不符合环境所需要求时,在安装过程中会报错,显示要求numpy>=1.20,但是低版本的numpy还是会安装成功。

 那么我们就再重复一下上面的步骤,先删除已安装的numpy,再直接安装满足环境所需的numpy的最低版本即可。比如这里显示要求numpy>=1.20,那我们在安装时就直接设置numpy==1.20。

猜你喜欢

转载自blog.csdn.net/m0_63604019/article/details/130629454