哇,今天真的好累,就写了个动态多尺度训练(差点又被tensorflow劝退.),下面写几个要注意的点.

input_shape的修改

首先网络为了要支持多尺度训练,那我们的输入是不能指定的,所以要修改成\([None,None,3]\)才可以.

output_shape的修改

这里就是一个很蛋疼的地方,因为我们不知道输入的维度,所以得到的输出维度为\([None,None,75]\),之前我们可以计算出前两个维度然后reshape,但是现在我们不知道这个维度reshape中传入None就会报错.但是如果不Reshape,在tf.kerasLoss中会默认检查y_truey_pred的维度是否一致,所以我只能用折中的方式,使用expand_dims加一个虚的维度,然后在Loss中重新reshape

xy_offset的计算

我本来的想法是修改Helper对象中的输入输出数组值即可,但是改了之后我才发现,由于tf.keras用的是静态图的方式,所以我使用的那个数组早就在建立图的时候被转换为Tensor固化了,我再去修改他也并没有实际用处...所以得在Loss里面重新计算xy_offset了.

分别处理训练和测试

根据测试tf.keras中callback的运行状态中测试的方式,添加Callback对象进行处理,这种方式唯一的缺点就是在测试开始之后,有一部分batch本来应该是多尺度的,但是被强制改成原始尺度了.哎,实在想不到好点子了.....日常劝退tensorflow.

总结

花了半天时间搞定了这个多尺度训练,接下来可以做别的去了...之前lffd算法的内存泄漏问题调试的我头疼,都没时间测试算法的效果.