使用基于Caffe的MobileNet分类踩坑备忘录
首先要帮Caffe甩个锅:Caffe对图像处理进行了很高明的封装,以protobuffer形式组织的搭积木式的网络构建也很灵活方便,这里的坑都是自己腿不好,走路不稳崴进去的。
1. Caffe的一个iter是一个batch,不是一个epoch。
2. 使用现有模型存档对网络进行fine_tune的时候,由于改变了输出的number,最后一层必须重新命名,目的是不复用最后一层的存档参数。和tensorflow不太一样的是,如果最后一层的参数数量不一致,训练时不会抛出异常,居然可以正常运行,然后。。。收敛只是梦一场。
3. 对于caffe的分类标签文件,需要严格遵循从0开始的规则,如果像我一样拍脑袋从1开始,您能收敛,我直播吃手机。 (据同事经验:类别还需要是连续,0,1,2,3,4....是ok的;0,1,2,4,6.....是会被ko的)。
4. 学习率选择需要炼丹的耐性,每次降一个数量级。从过大和过小的学习率去初始训练,都会极大提升时间成本(和你的怨念感)。
5. 因为我做分类用的label文件在前期做了比较多的数值处理,类型转换等工作,每一个流程/环节有疏忽都会造成最终的label文件有问题,并且这些问题因为数据量过大,很难通过肉眼排查, 非常容易出错,对于label文件的生成,小心为妙!
(估计未完,只能待续)