全卷积神经网路【U-net项目实战】U-Net网络练习题: Kaggle - 2018 Data Science Bowl

因为Kaggle有该比赛,而且code写的很简单易懂,于是乎拿来玩一下。
https://www.kaggle.com/keegil/keras-u-net-starter-lb-0-277?scriptVersionId=2164855/notebook
与U-Net相关的开源项目与code很多,各种框架的版本都有:
https://github.com/jakeret/tf_unet

1 训练集的构造

因为使用的是比赛数据,赛方已经很好地帮我们做好了前期数据整理的工作,所以目前来说可能很方便的制作训练集、测试集然后跑模型。这里下载得到的数据为提供图像中单个物体的掩膜。其中,笔者认为最麻烦的就是标注集的构造(掩膜)。
原图:

在这里插入图片描述
掩膜图:mask
在这里插入图片描述
从掩膜列表可以到,比赛中是把每个细胞的掩膜都分开来了。来看一下这个掩膜标注内容如何:

mask = np.zeros((IMG_HEIGHT, IMG_WIDTH, 1), dtype=np.bool)
Y_train = np.zeros((len(train_ids), IMG_HEIGHT, IMG_WIDTH, 1), dtype=np.bool)
for mask_file in next(os.walk(path + '/masks/'))[2]:
    mask_ = imread(path + '/masks/' + mask_file)
    mask_ = np.expand_dims(resize(mask_, (IMG_HEIGHT, IMG_WIDTH), mode='constant', 
                                  preserve_range=True), axis=-1)
    mask = np.maximum(mask, mask_)
Y_train[n] = mask

读入(imread)掩膜图,图像的格式为:(m,n);

resize,掩膜的尺寸缩放在128*128

np.expand_dims步骤改变图像维度为(m,n,1);

np.maximum,当出现很多掩膜的时候,有些掩膜会重叠,那么就需要留下共有的部分;

Y_train的数据格式已经定义为bool型,那么最后存储得到的数据即为(x,m,n,1),且数据格式为True/False:

array([[[[False],
         [False],
         [False],
         ..., 
         [False],
         [False],
         [False]],

        [[False],
         [False],
         [False],
         ..., 
         [False],
...

其他X_train训练数据集,就会被存储成:(x,m,n,3),同时需要resize成128*128

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

2 预测

预测就可以用model.predict(X_test, verbose=1),即可以得到结果。那么得到的结果是(128,128,1)的,那么就是一个图层,也就是说U-Net出来的结果是单标签的,如果是多标签那么可以多套模型,可参考:Kaggle-卫星图像分割与识别。
预测出来的结果为单图层,可以重新回到原尺寸:

resize(np.squeeze(preds_test[i]),
     (sizes_test[i][0], sizes_test[i][1]), mode='constant', preserve_range=True)

3 结果提交

图像分割在提交结果的时候,主要就是掩膜了。那么掩膜的提交需要编码压缩:
Run-Length Encoding(RLE)行程长度的原理是将一扫描行中的颜色值相同的相邻像素用一个计数值和那些像素的颜色值来代替。例如:aaabccccccddeee,则可用3a1b6c2d3e来代替。对于拥有大面积,相同颜色区域的图像,用RLE压缩方法非常有效。由RLE原理派生出许多具体行程压缩方法。
那么图像压缩出来的结果即为:

'137795 3 138292 25 138802 29 139312 32 139823 34 140334 36 140845 38 141356 40 141867 42 142371 51 142881 54 143391 57 143902 59 144414 59 144925 61 145436 62 145948 63 146459 65 146970 66 147482 66 147994 66 148506 66 149017 67 149529 67 150041 67 150553 67 151065 67 151577 66 152089 66 152602 65 153114 64 153626 64 154138 63 154650 63 155162 63 155674 63 156187 62 156699 62 157212 60 157724 60 158236 60 158749 59 159261 59 159773 58 160285 58 160798 56 161310 56 161823 55 162335 54 162848 53 163361 52 163874 50 164387 49 164899 48 165412 47 165925 45 166439 42 166953 40 167466 38 167980 35 168495 31 169009 28 169522 26 170036 23 170549 21 171062 18 171577 12 172093 4'

那么下图就是出来的结果了,第一张为原图,第二张为标注的掩膜图,第三张为预测图。
在这里插入图片描述

发布了662 篇原创文章 · 获赞 191 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/weixin_43838785/article/details/104482554