Kaggle PetFinder.my - Pawpularity Contest 上位解法



- [list of solutions](https://www.kaggle.com/c/petfinder-pawpularity-score/discussion/300952)

# 1st
- [kaggle discussion](https://www.kaggle.com/c/petfinder-pawpularity-score/discussion/301686)

### Models
- NN + SVR
    - NNで特徴量を抽出し、テーブルデータとしてSVMで処理。
    - 特徴量抽出はNNモデルのどの層から行うべきか実験。
        - NNがefficient netベースのとき、ヘッドから特徴量を抽出した方がよかった（中間層から抽出するのに比べて）。
        - OpenIA CLIPベースでは、入力が文字と画像だが、画像のみを用いて特徴量を作成。
            - [kaggle notebook](https://www.kaggle.com/titericz/openai-clip-example?scriptVersionId=85404940)
    - 特徴量抽出として使用するNNモデルとその組み合わせはSVRをつけてforward feature selection with hill climbing
    - SVRの学習ではターゲットのPawpularityを85にクリップするとスコアがわずかに向上。
    - 詳細はこちらの[kaggle notebook](https://www.kaggle.com/titericz/imagenet-embeddings-plus-rapids-svr?scriptVersionId=85544833)

- NN modelの加重平均
    - いくつかの異なるアーキテクチャのNNモデルを異なるオーグメンテーションで学習。
    - TTAは学習時のオーグメンテーションが大きいほど効いた。
    - 使用モデルは以下
        - swin_large_patch4_window7_224
        - beit_large_patch16_224
        - swin_large_patch4_window12_384_in22k
        - tf_efficientnet_b6_ns

# 2nd
- [kaggle discussion](https://www.kaggle.com/c/petfinder-pawpularity-score/discussion/300929)

### Models
- convnext_large
- cait_m36_384
- vit_base_patch16_224_miil_in21k
- cait_m36_384
- xcit_small_24_p16_384_dist
- xcit_small_24_p8_384_dist
- crossvit_18_dagger_408
- swin_large_patch4_window12_384_in22k
- vit_base_patch16_224_miil_in21k
- vit_base_r50_s16_384
- swin_base_patch4_window12_384
- vit_base_patch16_224_miil_in21k
- jx_nest_base
- vit_large_patch16_224


# 3rd 
- [kaggle discussion](https://www.kaggle.com/c/petfinder-pawpularity-score/discussion/301044)

### Models
- tensorflow + pytorch
- Swin large 384
- Swin large 224
- Vit large 384
- cait_m36_384
- cait_m48_448
- Loss function
    - CrossEntropyLoss

### Data

# 4th
- [kaggle discussion](https://www.kaggle.com/c/petfinder-pawpularity-score/discussion/301072)

### Models
- 8つの様々なモデルをpseudo labeling、dog/cat別を場合により行って学習、アベレージアンサンブル。
- swin_large_patch4_window12_384
- swin_large_patch4_window7_224
- vit_large_patch16_384
- swin_large_patch4_window12_384
- swsl_resnext101_32x8d
- swsl_resnext101_32x8d
- vit_huge (ImageNet MAE pretrained)
- ConvNeXt_xlarge

### Data
- 過去のpetfinder系列コンペと重複する画像の場合、過去コンペの特徴量を加えて学習、推論
- HP上のサムネイルと同じ見た目になるようにリサイズ


# 6th
[kaggle discussion](https://www.kaggle.com/c/petfinder-pawpularity-score/discussion/301015)

### Models
- efficientnet b2
    - CNN based modelは前段(66%)およびbatchnorm layerをfreezeすることが重要だそう
- other transformers...
- Multi task learning
    - メタデータを追加ターゲットとして学習。cat/dog labelとscoreを同時に学習するheadにした。
### Data
- 様々に異なるサイズの画像で学習した方がいい
    - [kaggle discussion / explanation](https://www.kaggle.com/c/siim-isic-melanoma-classification/discussion/160147)
- 画像の大きさによってオーグメンテーションの種類を変更。
    - 512では多様なオーグメンテーションを用いるが、224ではcrop と flipのみ。

# 9th
- [kaggle discussion](https://www.kaggle.com/c/petfinder-pawpularity-score/discussion/300947)

### Models
- DLDL(Deep Label Distribution Learning)
    - [github link](https://github.com/PuNeal/DLDL-v2-PyTorch)

# 12th
- [kaggle discussion](https://www.kaggle.com/c/petfinder-pawpularity-score/discussion/301191)

### Models
- beit_large_patch16_224
- swin_large_patch4_window7_224
- swin_large_patch4_window12_384

# 18th
- [kaggle discussion](https://github.com/PuNeal/DLDL-v2-PyTorch)

### Models
- ordinal regression head

# 29th (banned?)
-[kaggle discussion](https://www.kaggle.com/c/petfinder-pawpularity-score/discussion/301052)

### Models
- Loss function
    - BCEとMSEを平均したlossを使用。

### Data
- Width and Length of the image
- Length-To-Width Ratio and Width-To-Length Ratio
- Image file size

# 30th
- [kaggle discussion](https://www.kaggle.com/c/petfinder-pawpularity-score/discussion/301064)

### Models
- NN
    - SwinL 384
    - SwinL 224
    - volo_d2
    - convnext_large	
    - BEiT
- Ensemble
    - RidgeCV
- TTA
    - オーグメンテーションしていない元画像での推論の比率を決めるbetaをチューニング。
        - 0でpure TTA, 1でpure input data

# 42nd
- [kaggle discussion](https://www.kaggle.com/c/petfinder-pawpularity-score/discussion/301259)

### Models
- efficientnet b4
    - モデルの前半をフリーズして学習
    - multi-sample dropout

# 45th
- [kaggle discussion](https://www.kaggle.com/c/petfinder-pawpularity-score/discussion/301091)

### Models
- NN
    - swin_large_patch4_window7_224	
    - swin_large_patch4_window12_384	
    - swin_base_patch4_window12_384	
    - eca_nfnet_l1	
    - eca_nfnet_l2	
    - vit_base_r50_s16_384	
    - densenet121
- XGB
- Ensemble
    - 過去コンペのデータで学習したモデルは、過去コンペのtrain dataかtest dataかでCV貢献が異なった様子。
    - そのため上記二つを分けてNNとXGBのアンサンブルを行った。


### Data
- 過去のpetfinder系列コンペの画像と今回のデータセットに重複があることを発見



# 勉強になった点
### Models
- Swin largeの他にはBEITを使っている人が多い
- Swin largeも公開ノートブックに多い224だけではなく高解像度モデルを用いている場合がある
- 他の解答ではあまり見ないモデルを用いているチームもあった。
    - eca_nfnet, vit, densenet, swsl_resnext, ConvNeXt, cait, xcit, crossvit, jx_nest_base
- Ensembleは加重平均、RidgeCVが多い
- いろいろなlossを試す
    - loss function に複数のloss functionを入れて平均を用いる。
    - CrossEntropyLoss, position loss etc
- 回帰、順序回帰、100分類、2値分類のpredなど問題のとらえ方は様々あった
- Scheduler はcosine系が多い印象。warmupもちらほら。

### Inference
- TTAではhflipだけなどシンプルなオーグメンテーション。学習では多様なオーグメンテーション

### Data
- pseudo labeling が使われている例が多い
    - [kaggle discussion / pseudo labelingの注意点](https://www.kaggle.com/c/petfinder-pawpularity-score/discussion/294434#1614350)
- 過去に系列コンペがあればそのデータとの重複を確かめるべき
- 画像はリサイズしてモデル与えるので、元画像のメタデータを保持しておき、headに加える。
- オーグメンテーションを変えることでdiversityが出せる