- 前言
- 环境配置坑
- Anaconda安装
- Cuda安装
- 训练坑
- 图片标注
- 训练集、验证集、测试集
- 关于loss和val_loss
我本为了完成一个科研小项目,从只懂python基本语法的状态入手,完成了一个利用深度学习目标检测的小项目,都说深度学习算法多么多么难,但如果只考虑应用其实上手也挺快的,不过在此过程中真正让人觉得烦躁、浪费大量时间的反而不是算法而是其他的一些东西。
环境配置坑 Anaconda安装
虽然说安装指引建议不要打勾,一般还是打勾比较好,不然就要自己去编辑环境变量。
如果这里的当前版本比新版本更新,一定要把勾去掉。
一定要把图片中所有的目标都标注了,哪怕目标被其他东西遮挡了也要标。实践证明,漏标、误标严重影响了模型的结果的准确率。标注绝对是一个体力活,长时间在电脑前,而且图片看多了很容易疲劳,导致漏标、误标,时间允许的话最好标注完了先放2天,再自查一遍有没有错标和漏标。
训练集、验证集、测试集训练集很好理解,验证集和测试集其实可以合二为一。比如我训练好了之后马上就从现场拍了一段视频来测试模型的识别效果,这种情况下就没必要再弄一个测试集,就分成训练集和验证集就OK。
关于loss和val_loss一般有几种情况:1、loss不断减小,val_loss不断减小,说明模型还在学习,应该继续训练;2、loss不断减小,val_loss稳定(比如在某一小范围内上下波动)又或者上升,说明已经过拟合了,可以停止训练,找过拟合前最近的一个结果使用就行;3、loss稳定,val_loss不断减小,说明数据集肯定有问题,比如标注错误。4、loss不断增大,,val_loss不断增大,网络结构设计问题,训练超参数设置不当,数据集需要清洗等问题,最差情况。5、loss稳定,val_loss稳定,学习过程遇到瓶颈,需要减小学习率或batch数量。
实际上在训练时,为了检验数据集的质量,可以先挑小批量的数据集进行标注、训练,比如300张图片。把epoch设置大一点,比如300。如果能出现过拟合说明数据集质量是合格的。这样可以避免后面浪费在这些垃圾数据集上的标注时间。
如果数据集的图片都用上了,训练到过拟合了,但是准确率还是上不去,只能增加图片了。
一般而言单目标的loss在0~1,但是不同的算法计算loss的方式不一样,所以也不绝对,但是如果loss大到离谱就绝对有问题。本人在刚开始训练的时候因为数据集漏标和质量不高的问题训练出来的模型的loss高达300多,虽然继续训练loss也降低很多,但是这个时候最有效的方法还是清理数据集。当我问清理了数据集后,因为删除了质量不高的图片,数据集数量从1312张下降到641张,但是loss很快就下降到5了。



