这里我们使用fastai来做识别。
1 数据
首先看下数据集。数据集是非常的不平衡,有很多类别只有一个文件。
Id | Image |
---|---|
new_whale | 9664 |
w_0003639 | 1 |
w_0003c59 | 1 |
w_0027efa | 10 |
w_00289b1 | 2 |
w_002c810 | 1 |
w_0032a46 | 1 |
w_003bae6 | 8 |
... | ... |
5005 rows × 1 columns
这种数据量太少,且分类的类别又太多,所以使用StratifiedKFold来处理数据不平衡的问题,只能说是解决了部分问题,因为需要判别的种类太多,所以直接使用迁移学习,可能效果并不是很好。
2 套路,还是套路
先对小样本数据进行采样,直接复制。然后使用StratifiedKFold来分割数据集,然后调用from_df来读取和split_by_idx来获取数据,然后进行二阶训练。
- 冻结backbone,训练head进行分类。
- 先搜索最优lr,一般是1e-2。
- 解冻backbone,使用分层lr来训练模型。
- 一般是backbone搜索最优lr,一般是1e-6级别的,而对于head部分使用1e-2/3 or 10。
- 交叉验证做cross validation来得到最优结果。
- 最后采用TTA来增强测试集验证结果。
网友评论