比赛网址Planet:Understanding the Amazon from Space这个比赛是一个遥感图像识别,但是主办方也提供了jpg图片,由于对遥感图像识别不熟悉,而且遥感图像数据太大不好处理,所以本次比赛使用的是jpg图片数据。这个比赛是一个多标签的分类问题,一共有17个类别,每张图片可以有一个或者是几个类别标签,对于多标签任务一个简单的处理是把问题分成17个二分类问题,但是这需要训练17个网络,再加上调参的时间,可能耗费的时间很多,可以把这17个网络合成为一个网络,输出层为17,相当于共享除了最后一层的所有参数,大幅度减少了参数,但是也增加了欠拟合的风险,损失函数使用交叉熵。
刚开始使用的是vgg16,经过调参最终的结果只有0.91,考虑到图片中并没有高级的语义特征(高级语义特征可以看做是低级特征比如颜色,纹理,边缘特征的组合,人类识别图像一般都依赖高级语义特征),分类更多的应该是依赖低级的特征,所以我们需要在网络的前向传播中保留下来低级特征,而vgg是很难做到这点的,另一方面,resnet由于有恒等映射,所以可以在前向传播中很好的保留低级特征,并且resnet的shortcut也可以看做是梯度反向传播的高速公路,避免了梯度消失的问题,网络更好训练,另外resnet使用了BN,更容易训练,并且兼有正则作用(BN在每一个mini-batch计算时使用的是mini-batch的数据而不是full-batch数据,相当于引入了统计误差,而方差很小的随机误差可以看做是增加局部不变先验也就是正则作用),将模型换为resnet18后结果突破0.92
由于图片并没有高级语义特征所以在数据增强中增加了random vertical flip,
random transpose 以及random rotate, 另一方面本次比赛问题本身的难度很大,因为正类和负类之间的差别并不大,模型想要正确的分类就需要更大的权值,而更大的权值往往造成过拟合,这会造成调参过程中很难找到过拟合和欠拟合的平衡点,所以我去掉了比较强的正则化random size and crop,random size and crop 首先按原图片的长宽比例随机缩放图片到一个区间,再在图片上随机裁剪出与模型的输入大小相符的图片,在resize时使用的插值方法会引入误差,并且crop也会因为丢掉一部分图片的原始信息而引入误差
在去掉random resize and crop后模型更趋向于过拟合,所以我使用了另一种正则化技术label smoothing,label smoothing是对标签的平滑,把原来的one-hot变成一种soft-target,one-hot的target需要模型百分之百的确定分类结果,因为只有一个类别的标签概率是1,其他类别的标签概率均为0,
label smoothing把1减小并将减小的概率分摊到其他的类别标签上,写成公式如下:
label smoothing有两个作用,第一是使模型不会过于自信,因为某些分类问题类别之间的差异不大,有时候并不能百分之百的确定分类的结果(比如美短和英短),这时候如果强制模型学习太过自信的结果往往造成权值过大进而造成过拟合,第二就是限制权值的增加,下面以二分类为例说明
使用label smoothing后①式变为
我们用②-①可得
可以看出
从①式中我们看到
从上面的结果可以看出当
我的单模型的最好结果是0.928,使用了0.1的label smoothing,0.00001的weight decay,去掉了random resizecrop使用的是pre-trained resnet18,使用Adam训练, 学习率0.0001, 训练30个epochs,每一个epoch计算验证集上的f2score,选择在验证集上f2score最高的模型,经过查看验证集上17个类别的准确率,发现对于water和cultivation的识别准确率很低,考虑可能是多任务之间出现矛盾或者是这两个类别的识别本身难度较高,所以把这两个类别的识别单令训练两个分类器,然后把这两个分类器的结果合并到另外15个任务的submission中(替换掉原有的输出)(~+0.1%),ensemble并没有做stacking,因为要留出一折的数据做阈值平移,如果做5-fold的stacking实际上初级学习器只使用了3-fold的数据,很容易过拟合,所以我只做了10个模型的bagging和voting,具体把数据分为5份,其中1份做阈值平移其他4份为训练集,这样的话有5个数据集,每个数据集上训练两个模型,一共10个模型,最后再做多数投票得出最终结果