リモートセンシング画像分類タスクを解析するためのPyTorchベースのエンジニアリングツール、ホワイトは必見!

この大会のタイトル複数の分類を含む45個のカテゴリーの合計、。確か不均衡のサンプルがあるでしょう。

 

核となるアイデア

データ前処理は、各カテゴリ内のサンプルの数は同じではないので、アンバランスデータセットサンプラーの使用は、各カテゴリのバランスの母集団全体の最後のサンプル、各カテゴリの重みを調整します。

以下は、ラベルスムージングコードです:

class ImbalancedDatasetSampler(torch.utils.data.sampler.Sampler):
ㅤdef __init__(self, dataset, indices=None, num_samples=None):
ㅤㅤㅤself.indices = list(range(len(dataset)))
ㅤㅤㅤㅤㅤif indices is None else indices
ㅤㅤㅤself.num_samples = len(self.indices)
ㅤㅤㅤㅤㅤif num_samples is None else num_samples

  # distribution of classes in the dataset
ㅤㅤㅤlabel_to_count = {}
ㅤㅤㅤfor idx in self.indices:
ㅤㅤㅤㅤㅤtry:
ㅤㅤㅤㅤㅤㅤㅤlabel = self._get_label(dataset, idx)
ㅤㅤㅤㅤㅤㅤㅤif label in label_to_count:
ㅤㅤㅤㅤㅤㅤㅤㅤlabel_to_count[label] += 1
ㅤㅤㅤㅤㅤㅤㅤelse:
ㅤㅤㅤㅤㅤㅤㅤㅤlabel_to_count[label] = 1
ㅤㅤㅤㅤㅤexcept:
ㅤㅤㅤㅤㅤㅤㅤpass
ㅤ
ㅤㅤㅤ# weight for each sample
ㅤㅤㅤweights = [1.0 / label_to_count[self._get_label(dataset, idx)]
ㅤㅤㅤㅤㅤㅤㅤㅤㅤfor idx in self.indices]
ㅤㅤㅤself.weights = torch.DoubleTensor(weights)
ㅤ
ㅤdef _get_label(self, dataset, idx):
ㅤㅤㅤdataset_type = type(dataset)
ㅤㅤㅤif dataset_type is torchvision.datasets.MNIST:
ㅤㅤㅤㅤㅤreturn dataset.train_labels[idx].item()
ㅤㅤㅤelif dataset_type is torchvision.datasets.ImageFolder:
ㅤㅤㅤㅤㅤreturn dataset.imgs[idx][1]
ㅤㅤㅤelse:
ㅤㅤㅤㅤㅤreturn np.argmax(dataset.labels[idx])
ㅤ
ㅤdef __iter__(self):
ㅤㅤㅤreturn (self.indices[i] for i in torch.multinomial(
ㅤㅤㅤㅤㅤself.weights, self.num_samples, replacement=True))
ㅤ
ㅤdef __len__(self):
ㅤㅤㅤreturn self.num_samples

拡張データ:ランダム、ランダムな消去をひっくり返す、ランダム、ランダムな回転をトリミング 

モデルの選択:senet154、強力な十分なベースライン

モデルの最適化:

  • ロス:ラベルスムーズな操作CrossEntropyに基づいて行わ
class CrossEntropyLabelSmooth(nn.Module):
ㅤdef __init__(self, num_classes, epsilon=0.1, use_gpu=True):
ㅤㅤㅤsuper(CrossEntropyLabelSmooth, self).__init__()
ㅤㅤㅤself.num_classes = num_classes
ㅤㅤㅤself.epsilon = epsilon
ㅤㅤㅤself.use_gpu = use_gpu
ㅤㅤㅤself.logsoftmax = nn.LogSoftmax(dim=1)
ㅤ
ㅤdef forward(self, inputs, targets):
ㅤㅤㅤlog_probs = self.logsoftmax(inputs)
ㅤㅤㅤtargets = torch.zeros(log_probs.size()).scatter_(1, targets.unsqueeze(1).data.cpu(), 1)
ㅤㅤㅤif self.use_gpu: targets = targets.cuda()
ㅤㅤㅤtargets = (1 - self.epsilon) * targets + self.epsilon / self.num_classes
ㅤㅤㅤloss = (- targets * log_probs).mean(0).sum()
ㅤㅤㅤreturn loss
  • 学習率:暖かいアップ

モデルの統合、単一モード単一スケールの試験結果が得られ、この方法を使用しません

 

体験ゲーム

  • より多くのほとんどギャングシェア上知っている参照してください、そしてより多くの実践的な練習。このような標的検出トリックなど、多くのトリックは、それが分割または認識に使用することができ非常に頻繁に見るように、多くのタスクが共通しているより多くの論文は、最新の主流のアプローチのいくつかにもっと注意、実際には、一般的にを参照してください。 
  • 彼らはより高いスコアを得ることができます前に、トレーニングの最も強力なネットワークを使用してベースライン。ベースラインは、最初に設定したときにゲームをプレイした後、運転までのいくつかのショーで、貢献します。 
  • 、滑らかなラベルがポイントに上昇することができますポイントを上昇することができ、ウォームアップ、不均衡なデータセットサンプラーはポイントが消去ランダム上昇することができ、ポイントを上昇することができます。これらのトリックは、念頭に置いて使用することができますどのようなタスクに関係なく維持します。追加しなかった時の、そして我々は試すことができますので、トリプレット損失はまた、画像分類に無視することはできません。

この記事では、使用して、元のコンテンツの著作者FlyAIプラットフォームのリリースで、クリエイティブコモンズ帰属-非営利-改変禁止について4.0国際ライセンス契約、再現ライセンスは、オリジナルのソースリンクと、この文を添付してください。
このリンクアドレス:https://www.flyai.com/n/51410

公開された35元の記事 ウォン称賛22 ビュー50000 +

おすすめ

転載: blog.csdn.net/iFlyAI/article/details/105126199
おすすめ