画像分類コンテストtricks
4240 ワード
最近いくつかの画像分類の試合に参加し、いくつかの画像分類試合のtricksをまとめた.(フレーム選択pytorch)完全コードgithubに移動してください:https://github.com/lxztju/pytorch_classification 助けがあればstarを呼んでください. データ前処理 学習率調整 モデル選択 移行学習 モデル融合 TTA(テスト時の強化) 試合に参加する一般的なやり方は、いくつかの分類モデルを訓練し、そこから最適モデルを選択し、最後にensample(モデル融合)を使用してTTAと最適結果を得ることだ.
データの前処理は試合にとって最も重要である可能性があり、データの前処理がよく、同時に優れたモデルを選択すれば、1つの試合で良い成績を得ることができる.
この部分の内容は、私はまだ比較的良いプログラムファイル、データ分析のコードを整理していません.今は簡単な処理方法しか採用していません.
後期に良いデータ分析前処理方法をまとめ,githubでコードを更新し続ける.
torchvisionではtransformsで多くの前処理方法が提供されています.
学習率調整戦略は、一般的にwarmup付きの学習率調整戦略を採用し、基本的な考え方は訓練開始のいくつかのepochで、学習率が小さい頃から大きくなり、後期の訓練過程で徐々に小学校の学習率を減らすことである.
warmup付きcosine学習率は私が主に使用しており、代替訓練中にcosine学習率を階段的に低下させる案がある場合があります.
一般に,DenseNet,ResNet,ResneXt,EfficientNetという一連のモデルを用いて訓練を行い,最適なモデルを選択する.ここで私がよく使うモデルは、ResNeXtとEfficientNetの2つのモデルグループです.
これらのモデルはEfficientNetのほか、他のモデルtorchvisionで提供されており、EfficientNetはgithubでも大物が再現されたことがある.
通常の試合のデータセットは比較的小さいので,移行学習は非常に必要であり,ImageNetでの事前トレーニングウェイト移行学習を用いることが基本である.
採用したモデルが大きい場合、データセットが小さい場合、凍結モデルの前のいくつかの層が訓練されていないことも、データセットが小さく、モデルパラメータが多すぎると、深刻なオーバーフィットの問題を防止します.
一般的にいくつかの比較的良いモデルを訓練した後、試合の結果を向上させるために、複数のモデルを融合させ、得られた結果を投票または重み付け融合することができる.
TTA(テスト時増強)とは、テスト時にテスト画像を処理(反転、回転、裁断)するなどの操作を行い、同じ画像のいくつかの処理後のコピーを予測し、結果を同様に投票または重み付け融合させることで、結果を向上させることができる.
ある分類試合では,cnnを用いて特徴を抽出し,svmやランダム森林などを用いて画像の分類処理を行う精度が,全接続層を直接分類するよりも優れている.githubコードライブラリにこの実装機能のコードが含まれています.詳細はgithubに移動してください.
データプリプロセッシング
データの前処理は試合にとって最も重要である可能性があり、データの前処理がよく、同時に優れたモデルを選択すれば、1つの試合で良い成績を得ることができる.
この部分の内容は、私はまだ比較的良いプログラムファイル、データ分析のコードを整理していません.今は簡単な処理方法しか採用していません.
後期に良いデータ分析前処理方法をまとめ,githubでコードを更新し続ける.
torchvisionではtransformsで多くの前処理方法が提供されています.
transforms.Compose([
transforms.RandomCrop(size),
transforms.RandomVerticalFlip(),
transforms.RandomHorizontalFlip(),
RandomRotate(15, 0.3),
RandomGaussianBlur(),
transforms.ToTensor(),
transforms.Normalize(mean=mean, std=std),
])
学習率の調整
学習率調整戦略は、一般的にwarmup付きの学習率調整戦略を採用し、基本的な考え方は訓練開始のいくつかのepochで、学習率が小さい頃から大きくなり、後期の訓練過程で徐々に小学校の学習率を減らすことである.
warmup付きcosine学習率は私が主に使用しており、代替訓練中にcosine学習率を階段的に低下させる案がある場合があります.
モデル選択
一般に,DenseNet,ResNet,ResneXt,EfficientNetという一連のモデルを用いて訓練を行い,最適なモデルを選択する.ここで私がよく使うモデルは、ResNeXtとEfficientNetの2つのモデルグループです.
これらのモデルはEfficientNetのほか、他のモデルtorchvisionで提供されており、EfficientNetはgithubでも大物が再現されたことがある.
学習の移行
通常の試合のデータセットは比較的小さいので,移行学習は非常に必要であり,ImageNetでの事前トレーニングウェイト移行学習を用いることが基本である.
採用したモデルが大きい場合、データセットが小さい場合、凍結モデルの前のいくつかの層が訓練されていないことも、データセットが小さく、モデルパラメータが多すぎると、深刻なオーバーフィットの問題を防止します.
c = 0
for name, p in model.named_parameters():
c += 1
if c >=450:
break
p.requires_grad = True
モデル融合
一般的にいくつかの比較的良いモデルを訓練した後、試合の結果を向上させるために、複数のモデルを融合させ、得られた結果を投票または重み付け融合することができる.
TTA
TTA(テスト時増強)とは、テスト時にテスト画像を処理(反転、回転、裁断)するなどの操作を行い、同じ画像のいくつかの処理後のコピーを予測し、結果を同様に投票または重み付け融合させることで、結果を向上させることができる.
cnnとsvmなどの結合を利用する
ある分類試合では,cnnを用いて特徴を抽出し,svmやランダム森林などを用いて画像の分類処理を行う精度が,全接続層を直接分類するよりも優れている.githubコードライブラリにこの実装機能のコードが含まれています.詳細はgithubに移動してください.