546. Google - Isolated Sign Language Recognition | asl-signs
我们采用了类似音频频谱图分类的方法,使用EfficientNet-B0模型,配合多种数据增强和BERT、DeBERTa等Transformer模型作为辅助模型。最终解决方案包括:
单折EfficientNet模型的交叉验证得分为0.898,排行榜得分约0.8。我们仅使用了比赛提供的数据。
yy = F.interpolate(yy[None, None, :], size=self.new_size, mode='nearest')(X, Y, Z)坐标轴
[0,1,2,3,4]),产生3个角度:<0,1,2>, <1,2,3>, <2,3,4>,共15个手指角度这些增强同时用于CNN和Transformer训练:
随机仿射:与@hengck23分享的方法相同。在CNN中,全局仿射后还会对各部分单独进行位移-缩放-旋转(如手、嘴唇、身体姿态)随机插值:轻微缩放和位移时间维度姿态翻转:翻转所有点的x坐标。CNN中使用x_new = x_max - x_old,Transformer中使用x_new = 2 * frame[:,0,0] - x_old手指树旋转:5顶点手指有4组父子对(如拇指[0,1,2,3,4]的0-[1,2,3,4]、1-[2,3,4]、2-[3,4]、3-[4])。随机选择部分对,围绕父点以随机小角度旋转子点Mixup:实现基础mixup增强(仅适用于CNN,不适用于Transformer)替换增强:从同类别其他样本中替换随机部分时间和频率掩码:基础的torchaudio增强效果异常出色freq_m = torchaudio.transforms.FrequencyMasking(80) # 时间轴
time_m = torchaudio.transforms.TimeMasking(18) # 关键点轴
增强前:

增强后:

CrossEntropyLoss,增加对预测较差类别和语义相似类别(如kitty和cat)的权重由于只训练单折且使用较小模型,我们使用Optuna调整了大多数参数。CNN训练参数列表如下(Transformer类似):
Lookahead_RAdam、RAdam)tf.Module类中。直接从Keras转换会导致速度下降(原因不明)EfficientNet-B0单模型排行榜得分约0.8,Transformer模型提升至0.81。最终集成包含:
有趣的是,不使用softmax的集成方式持续带来约0.01的提升。
深度可分离卷积模型在这些任务上表现优异,超越其他CNN和ViT模型(rexnet_100也表现良好)。我们在DepthwiseConv2D转换上花费了大量时间,得到一些奇怪的结果:
对于82x42x32(HWC)的输入,Keras中有两种实现3x3深度可分离卷积的方式:Conv2D(32, 3, groups=32)或DepthwiseConv2D(3)。转换为tflite后,Conv2D运行时间为5.05ms,DepthwiseConv2D为3.70ms。更奇怪的是,FLOPs=HWC²的普通卷积Conv2D(32, 3, groups=1)仅需2.09ms,比前述两种FLOPs=HWC的更快。
我们重写depthwise-conv如下:
def call(self, x):
out = x[:,0:self.H_out:self.strides,0:self.W_out:self.strides] * self.weight[0,0]
for i in range(self.kernel_size):
for j in range(self.kernel_size):
if i == 0 and j == 0:
continue
out += x[:,i:self.H_out + i:self.strides,j:self.W_out + j:self.strides] * self.weight[i,j]
if self.bias is not None:
out = out + self.bias
return out
运行时间为1.24ms。
总结:我们版本(1.24ms) > 大FLOPs的普通Conv2D(2.09ms) > DepthwiseConv2D(3.70ms) > Conv2D(C, groups=C)(5.05ms)。
然而,我们的版本在tflite图中引入了过多节点,导致运行时间不稳定。如果TensorFlow团队能优化DepthwiseConv2D实现,我们甚至可以集成两个CNN模型,预计可达到0.82的排行榜得分。
另外,EfficientNet通过ONNX比TFLite快约5倍。
衷心感谢队友@artemtprv和@carnozhao,祝贺他们获得Master和GrandMaster称号!