使用Unet进行脊柱分割爬坑记录

被一个非常不起眼的小bug搞得精疲力尽,本着bug不过夜的信仰,终于在晚上10.30成功debugg,记录一下

使用Unet网络训练自己的脊柱分割网络

首先准备训练集,一开始这个数据集是用github上的一个完整的代码进行处理的,下载下来的数据集是nii.gz 格式,先解压缩,然后用nibabel模块进行读取并转成png
问题就出在转格式这一块了
转出的png文件是黑色的,后来怀疑是不是这个数据集被我转坏了,用PIL+numpy读取后发现,有数值,只不过ROI区域的数值为1,其余地方为0,也就没当回事

因为原本的那个训练代码使用keras写的,并且没有注释,写的也很乱,所以重新下载了一个训练代码。
然而发现在我这个数据集上并不好用,甚至开始怀疑这个数据集的真实性,用ITK-SNAP发现,label是存在的,标注无误,然后开始从训练代码层面开始找

在datalader发现了引发bug所在

# 从文件中读取图像
        png = np.array(png)
        modify_png               = np.zeros_like(png)
        modify_png[png <= 127.5] = 1

这段代码对读取的图像的像素值进行了修正,导致我的脊柱数据集中所有的像素点全部被置成1,在训练过程中一直都出现loss=0的情况毕竟max就是1
而这个数据集中的label的max是255,而roi区域即边缘区域是0。所以把我的数据集的roi区域改成255就可以了,即png *255即可

你可能感兴趣的:(从掉坑到爬坑,深度学习)