语义分割的整体实现代码大致思路很简单,但是具体到细节,就有很多可说的东西。
之前写过一篇文章,可能有些地方现在又有了新的思路或者感受,或者说之前没有突出重点。
作为一个小白,这里把自己知道的知识写一下,事无巨细,希望看到的人能有所收获。
一、文件思路
总的来说,语义分割代码可以分为如下几个部分:
- data:图像数据
- data/train:训练集数据
- data/train/img:训练集原始图像img
- data/train/label:训练集原始图像label
- data/val:验证集数据
- data/val/img:验证集原始图像img
- data/val/label:验证集原始图像label
- dataset:将本地数据转化成pytorch对应的DataSet的文件
- model:网络模型
- utils:工具文件
- utils/args:参数类
- utils/utils:通用方法类
- train.py:训练网络代码
当然,这只是一种划分文件的思路,还有很多不错的思路,大家选择一种即可。
二、代码实现思路
代码实现思路其实就是对上面文件的诠释了。
1、图像数据
没有图像数据啥也做不了,所以我们首先要从数据说起。
针对数据来讲,有哪些需要注意的事项呢?
- 图像数据是否过大
- 图像数据是否需要增强预处理
- 图像数据是否需要提前切分为测试集和验证集
1、图像数据过大
当图像数据过大时,很容易造成内存满的问题,导致我们训练失败。
方法:A、采用cv2.resize将图像缩小。B、将图像split为小图像。
2、图像提前预处理
图像提前预处理是为了让图像更好的去训练,如果原始图像存在过于模糊等问题,那么我们就需要做一些预处理操作。
方法:采用各种数据增强库,如:albumentations库,对图像亮度、对比度、锐度等进行增强。
3、图像数据是否提前切分为测试集和验证集
一般来说,我们在代码实现阶段可以将图像进行切分,当然,如果图像数据表示很明显简单,我们完全可以手动将数据分为测试集和验证集,这就免了在代码中实现对图像读取切分等操作了,自愿而为。
2、将本地图像数据集转化为pytorch的DataSet
本地图像数据执行完第一步之后,我们便来到了这一步。
为什么要将本地图像数据集转化为pytorch的DataSe