从零开始学习语义分割。比赛地址
我的代码地址
新手一个,随学随记,请勿喷我
也不知道自己输出的这个图对不对,反正就瞎看
网络:Unet
- 无数据增强
- 无depth信息
- 原版网络
预处理:
- 转换格式 (tips: cv2读入的图片是BGR格式,shape是(H, W, C),我选择了先转为RGB再灰度化)
- 灰度化 黑白图片
- Resize
- ToTensor
后处理: (网络写了半天,数据处理写了两天,麻了)
- sigmoid
- 转为numpy 数据范围从[0-1]变为[0-255]
- Resize
- mask2rle 对mask进行encode,这样才能传入submission.csv
结果:
Loss:
IoU:
LB:
总结和问题
根据loss和iou的情况选择了第34轮保存的模型参数,并生成了最终结果。据说直接使用unet应该在0.68左右?我这个好像右的厉害。
另外,loss和iou抖动的好像有些厉害,在自己电脑上拿batchsize=25跑了50epoch,之前在colab上以batchsize=50跑了100epoch,那个loss和iou好像没这个抖动的这么厉害。不知道跟batchsize这个参数有多大关系。但是基本都在20-40轮就效果不错了。
问题1:一个很蠢的问题,前一天还能正常运行的代码,第二天预测的时候一直在自动杀死进程。改了一天的BUG,一开始一直以为是爆显存,后来才觉得是不是爆了内存,查了半天代码发现是不知道什么时候按到了什么键删除了一行代码,导致预测的图片从18000张101x101图片变成了18000x128张101x101的图片,怪不得炸了。
第二版:对应xxx_2.py网络:Res_unet
- 无数据增强
- 基础模块使用残差块
- 无depth
预处理: 同第一版
后处理: 同第二版
结果:
Loss:
IoU:
LB:
总结:
这次Private score增加了0.02。
使用的第38轮的模型参数
代码中添加了logging,即保存log文件。以前是直接打印,不方便对比,这次添加了Log文件。
网络:Res_UNet
- 使用depth
- 无数据增强
预处理: 同上
后处理: 同上
结果:
Loss:
IoU:
LB:
总结:
感觉加了depth,也没有较好的提升,或许是抖动的问题?甚至Score还掉了。
这个题就先这样吧,数据增强什么的也没做,因为这次的代码写的有些凌乱,文件也越来越多,所以我想后续换个题,重新写代码,争取把自己的代码写成自己的模板,方便后续使用。



