在工作过程中,我们训练模型时,到底是哪些因素影响最大?模型深度,模型宽度,head个数,head深度,输入大小,输出大小等等。
在工业界中,基于深度学习的检测模型尤其应用广泛。今年由于内部变动,接触了各种不同的项目和模型。发现一个规律,模型可以很小,但是数据量很大时,一样能提高效果。同时输入尺寸变大时,比做多少模型重构都有用,当然前提是backbone和head类似的前提下。
之前的模型臃肿的很,耗时不说,还占显存,这样其实batchsize大小也有影响。于是,我把模型的head大刀阔斧砍到很浅的程度,然后把backbone也砍掉了很多。发现耗时减少了很多,loss训练的时候并没有变化多大。然后我再部署到硬件时,增加输入尺寸为之前小尺寸的2倍,同时由于改变了模型的复杂度,数据增加了很多。于是效果比之前很大(比目前这个尺寸大了1.5倍)尺寸的效果还高了5-6个点。
这说明两个问题:1. 就是我砍了模型的backbone和head,增加了数据,模型的效果依然在提升,比输入尺寸更大的模型效果还好,那说明模型远远没有达到饱和,也就是说模型相对数据其实还是过于复杂的。2. 就是模型变小了,输入尺寸变大了,效果比之前小尺寸的模型效果好了太多,这说明相比较模型复杂度,更应该提升模型的输入尺寸以改善实际效果。
所以在工程上,不要追求什么模型的复杂度,说把输入尺寸减小,增加模型复杂度来提升效果。输入那么小,到模型输出时,降维到什么都没有了,哪里来的效果啊,别再做这些很外行的实验了。一句话,工程上计算量有限时就要尽量增加数据和增加输入尺寸。科研上嘛,反正也不受计算量限制,输入都不会很小,多增加数据,用强大模型。