1 训练过程经常遇到的问题

1.1 损失值为nan

(1)损失函数写错了
(2)未进行归一化或者标准化

1.2 训练效果差

先看损失值,再看准确率和miou等

1.2.1 损失值很低,正确率很高,但miou很差

正负样本失衡
正负样本比例差别太大了,比如语义分割,可能是1:20000

解决:平衡正负样本的比例,
(1)减小样本的大小,这样提高正样本的比例
(2)增加focal_loss损失函数,增加正样本损失值的比例
(3)样本错标漏标严重

1.2.2 损失值来回变,准确率或者miou忽大忽小

1 学习率太大了,在最优点附近来回跳动,改进学习率,最好使用动态学习率,开始大,最后小。
2 批次量太小了,梯度下降方向不一致。
3 样本错标漏标严重,机器也不知道哪个是哪个不是

1.2.3 损失值大于0.0001

说明还没拟合,欠拟合

1.3 识别效果差

1.3.1 欠拟合

看训练过程的损失值,是否还在一直下降,可能是训练的epoch太少了。

1.3.2 过拟合

拟合的太好了,说明样本太少,或者训练次数太多,
(1)增加样本量,尤其是其它类型的
(2) 减少epoch提前停止训练,保存模型

1.3.3 样本类型太少

训练样本包含的类型太少,模型对没见过的图像识别不来。

1.4 速度慢

1.4.1 没用gpu

问题
有时候直接使用gpu的tensorflow时,会报错,这时候可能是gpu内存爆了,不要着急去使用cpu,先用第一种方式试一试,不行了再用cpu,cpu实在太慢了

1 使用gpu,
physical_device = tf.config.experimental.list_physical_devices(“GPU”)
tf.config.experimental.set_memory_growth(physical_device[0], True)
使用cpu的时候需要把这个删除了

2 使用cpu
#os.environ[“CUDA_VISIBLE_DEVICES”] = “-1”

1.4.2 参数确实太多了

用轻量级模型

2 遥感识别遇到的问题

2.1 正负样本失衡

2.1.1 增加负样本

正负样本失衡的时候,先把带有正样本的找出来训练,但是测试结果会很差,尤其当识别整幅影像的时候,需要加入丰富的负样本,这样才能得到一个比较好的结果。

2.1.2 样本迭代

需要边训练样本,边看效果,边增加修改样本,这样迭代多次才能达到一个好的效果。不能只看miou指标,在视觉上指标好,结果也有时候出现一些会出现明显从错误。这是很致命的,你大部分很好,但是一些不该识别错误的地方却识别错了,让人就怀疑你的准确性了。

2.1.3 整体设计和训练时随机应变结合

开始有个整体设计,但是训练时会出现各种结果,要及时调整
调整放方向,先从大方向改进,再微调:
(1)换模型
(2)样本改进
(3)训练epoch增加减少,至少几千个样本训练100epoch,
当出现了比较好的结果以后,再尝试其它改进,改进只是为了略微增强模型效果,上面3个才是影响结果的主要因素:
(1)批次量
(2)学习率
(3)激活函数
(4)结构调整
(5)样本增强,增加泛化性。

2.2 迭代迭代再迭代

做工程的时候一定要注意迭代,不断的迭代
每次迭代看的效果如下:
(1)损失值是否还可以下降
(2)训练集,验证集的结果
(3)整景影像的识别结果。

当上面3个方向基本ok了,模型就几乎差不多了,再进行一些小的改进。

2.3 注意开始的评价指标设计

开始的指标一定要设计好了,每进行一次实验,根据实验进行下一步的计划设计。

2.4 一定要注意是哪里出现问题

(1)是样本涵盖类型不全,样本制作错误,还是整幅样本不平衡
(2)还是模型欠拟合过拟合
(3)还是模型识别能力就有问题,需要换模型

2.5 样本一定要准确

样本决定了识别结果,模型算法只是为了接近这个结果。通过样本的迭代发现哪里有一些难分错分样本,放到样本数据集中,让模型学到更多的内容。

2.6 深度学习只是遥感影像处理过程的一部分

深度学习技术只是遥感影像分类中的一个方法,整个工程的实现一定要关注遥感影像处理的各个部分,每个部分都要实现,预处理,后处理等,不能只局限于深度学习。

遥感影像处理——遥感影像处理全流程_xiaotiig的博客-CSDN博客_遥感影像数据处理 https://blog.csdn.net/xiaotiig/article/details/112556242

2.7 每种影像有不同的用处和玩法

无人机、亚米级分辨率的影像,几十米、几百米分辨率的影像都有自己的作用,不要说30米的识别不出房子,只不过看你怎么说了。在多大程度上能识别出来,尽管分辨率大,但是还是有用的。

2.8 多看论文和技术博客

做项目事情前一定要调研,看别人是怎么做的,你学习好了再指定计划去做。不要一拿到任务就赶紧去弄。

3 学习率

主要改变损失值下降的快慢,
太大会导致损失值来回跳动
太小会导致收敛速度慢,需要更多的epoch

4 批次量

一般越大越好
但是太大可能超出电脑内存

5 其它一些超参数

(1)损失函数对不对,合不合适
(2)激活函数
(3)优化器改变一下。

6 其它优化

(1)数据增强
(2)超参数改进
(3)结构改进

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐