在初赛时使用的Hourglass网络,在初赛第二轮的时候机器的水泵烧了。。到复赛快结束才修好。。所以复赛基本没有做改进。
网络结构参考我之前写的文章《Stacked Hourglass Networks》
一开始尝试的是对每个style训练一个模型,得分8.X%,效果并不是很好,后面尝试了全部style一起训练,在loss上稍作修改,对于keypoint不存在的通道,不传递loss——即乘以一个calculable。
pred = net(inputs, landmark_len, nStack=nstack)
outputs = tf.get_collection('heatmaps')
c_loss = tf.reduce_mean(tf.stack([tf.nn.l2_loss(calculable*(heatmap - o)) for o in outputs]))
data augment使用了随机缩放,旋转和翻转,另外生成heatmap的时候发现不归一到[0-1](即不除以255),效果更好,虽然训练loss在几十W上下波动。
预测时也使用了data augment,即每张图在[0.8, 0.9, 1.0, 1.1, 1.2]的尺度,和[-5, 0, 5]的旋转角度下预测,将得到的heatmap叠加,取最大值。
训练的时候遇到一个很玄学的问题,lr取太小会导致nan(小于1e-5)。 所以我一开始用1e-3来训练。
具体代码见GitHub。
18.7.5更新:Fashion AI大赛答辩会