最近在做有关深度学习的项目,大致内容就是车位检测,目前我用到的方案是将人脸关键点检测的深度学习模型迁移到车位检测上。在这个过程中经历过各种坎坷,对于深度学习的代码调试算是知道了写皮毛经验。下面就记录下,也分享出来供后面有需要的同学借鉴。
现在网上有很多深度学习的代码,有些论文都开原源了,其实他们代码都可以拿来直接改改就迁移套用的。就是在改代码的过程中可能会遇到各种问题,导致迟迟达不到目标效果。
我在将人脸关键点检测算法迁移到车位检测的过程中就遇到了这种问题。一开始缺乏经验,根本不知道从哪里开始排查。现在终于知道,如果要排查问题,需要先还是从原来的项目着手,比如在我做的这个项目中,我就开始还是先跑人脸关键点检测的算法,先把人脸检测的算法跑通后,然后一点点简化代码,把很多处理的步骤去掉,因为可能就是因为有些处理的步骤没有注意到,导致代码没改过来,后面跑自己数据时就出不了效果,所以先把原项目的代码尽可能简化,当然每次简化时,都要跑小数据集验证是否对效果有很大影响,如果对效果影响太大了,那肯定不能简化掉。
在调试代码时,一开始尽量用小的数据集验证代码修改效果,等代码都确定好了,再换大数据集跑结果,这样会比较节省时间。
最近在做有关语义分割的项目,再次体会到小数据集调试的重要性。一开始就该用小数据集去训练,尽管过拟合吧,就是需要网络能过拟合,能够过拟合,说明网络还是可以提取一些特征,说明设计的思路没有问题。
如果小数据集过拟合不了,那么说明网络设计有问题(可能提取不了有效的特征),或者训练参数设置有问题,或者就是方案设计有问题。一旦小数据集能够过拟合,剩下就好办了,加大数据集,增加训练迭代次数就OK了。