自動衛星画像ベクトル化:1つのモデル-最初の2つの場所

画像







みなさんこんにちは!







この記事では、同じモデルアーキテクチャが1か月間隔でトップコーダープラットフォームでの機械学習コンテストで2つの勝利をもたらした経緯についてお話したいと思います。







以下の競技についてです。









この記事では、こうした問題を解決するための一般的なアプローチと、特定の競合向けの実装機能について説明します。







記事を快適に読むには、畳み込みニューラルネットワークとそのトレーニングに関する基本的な知識が必要です。







少しの背景







昨年、いくつかの機械学習トレーニングを見た後、私は競争するというアイデアを得ました。 私の最初の競争は私にとって予想外に高い結果で終わりました。それはさらに自信と動機付けを加えました。 だから、私はすぐに競争力のある機械学習、特に画像処理タスクに興味を持ちました。







私にとって最初の競争は、アリューシャン諸島のアシカの数え上げでした。 当時、私の知識は、他の人の決定を基礎として、それらを理解し、改善しようとするだけで十分でした。 これはまさに、何かを学びたい、および/または競技に参加したい人に私がお勧めすることです。 知識を実際に使わずに青くなるまで本を読むのは悪い考えです。 したがって、私は非常にうまく機能した検出器を訓練し、385人の参加者のうち13位になりました。 Artyomからの次の投稿でタスクの詳細を読むことができます。







次は、衛星画像の古典的な分類の競争でした。そこでは、古典的な機械学習と多くの異なるニューラルネットワークアーキテクチャに精通しました。 今回はチームで働き、900チーム中7ポジションでフィニッシュしました。 競争に基づく記事







その後、私はより深く掘り下げてより真剣な研究を行う準備ができました。これは、機械学習コンテストでの最初の勝利であるCarvana画像セグメンテーションチャレンジの役割を果たしました。 kaggleのブログ投稿のインタビューで、ソリューションの詳細を読むことができます。 (また、ソースコードへのリンクもあります)







サイトと競争力のある機械学習に関するいくつかの言葉







機械学習の競争プラットフォームのリーダーはkaggleです。 しかし、同様に興味深いコンテストを主催し、優れた賞を受賞している他のプラットフォームもあります。 私の場合、両方のコンテストはトップコーダープラットフォームで開催されました。 プラットフォーム間の違いは長い議論の対象になる可能性がありますが、ここで特別な注意に値するいくつかの興味深い機能に注意を向けたいと思います。









topcoderプラットフォームはあまり知られておらず便利であるという事実と、これらの制限のために、競技会の参加者の数はそれほど多くはありませんが、1か所で競争できる意欲的な専門家がいます。







タスク設定







Urban 3dのタスクは、住宅の屋根をセグメント化することでした。一見すると、セマンティックセグメンテーションの古典的なタスクです。 しかし、実際には、タスクはインスタンスのセグメンテーションにありました。つまり、近くに立っている家は個別の要素として定義する必要があります。 そして、この基準は「家をつなぐ」ために非常に罰金を科されました。 メトリックは次のとおりです。







見つかったすべての接続コンポーネントを取得し、各コンポーネントについて、最も高いジャカード指数(ユニオンの交差点、ユニオン対ユニオン比)を持つコンポーネントのマークアップを調べます。 IOU>0.45 、コンポーネントはに書き込まれます TP (真陽性)。 一致が見つからないすべてのコンポーネントが記録されます FP 。 予測にコンポーネントがなかったマークアップのすべてのコンポーネントに書き込まれます Fn











=TP/TP+FP











=TP/TP+FN







最終的なメトリックは次のとおりです。











F score=2PrecisionRecall/Precision+Recall







立ち往生している建物ごとに、 +2FN+1FP レイアウト内のこの建物が2つのコンポーネントで構成されており、いずれのコンポーネントでも0.45のしきい値を超えることができなかった場合。 (以下、青の写真で FnTP 黄色い FP







画像







Spacenetのタスク:道路検出は、はるかに興味深いものに見えました。 顧客は、作成された道路グラフの接続性を考慮に入れたメトリックを思い付き、それをjavaおよびpythonで実装しました。詳細は媒体で説明されています。 [ 1 ]、[ 2 ]、[ 3 ]。 この測定基準は興味深いものでした。学習ネットワークのスキルだけでなく、古典的なコンピュータービジョンとグラフ理論も適用したかったのです。







画像







最終的に、非常に不安定でエラーが発生しやすくなりました。







アーバン3D-衛星画像上の家の認識







まず第一に、aboutみを引き起こす可能性のあるマークアップについてのいくつかの言葉。 それは不十分に実行されました-多くの場合、レイアウト内の家は実際には表示されませんでした。 しかし、これはすぐに主催者に報告され、最終テストでエラーを修正することを約束しました。 実際、問題のあるマークアップは多くのタスクで見られるため、トレーニングセットでは私はそれをどうにかして戦わなかったため、ネットワーク自体が対処する必要があります。 ただし、何かを修正する機会がある場合は、修正することをお勧めします。







画像







それでは、タスクの入力データに移りましょう。









RGBですべてが明確であれば、DTM / DSMは新しいものです。 大まかに言うと、DSMは地球上のすべてのオブジェクトの高さマップであり、DTMはオブジェクトのない高さマップです。 衛星画像からは非常に低い解像度で取得されますが、データは新しく、RGB(標準の3色画像)とはかなり弱い相関があるため、使用する必要がありました。 したがって、4番目のチャネルはネットワーク(DSM-DTM)/ 9に入りました。 それらを減算してオブジェクトの高さを取得し、地球の高さを削除します。 共助者はさまざまな方法で取得できます。たとえば、98パーセンタイルを取得できます(ただし、平均最大値を取得しただけです)。 入力をRGBと同じ順序(0〜1の範囲の番号)にする必要があります。これにより、最初の畳み込みでチャネルが支配されなくなります。







最初の畳み込みには特別な注意が必要です。 実際、以前は、ほとんどが自家製のUnetのようなアーキテクチャが使用されていましたが、事前にトレーニングされたエンコーダを使用していません。 それらの詳細については、 こちらこちらをご覧ください 。 しかし、カーバナ大会の後、すべてが変わりました。 エンコーダーがimagenet用に事前にトレーニングされたネットワークであるアーキテクチャーが登場しました 。これについてはternausnetで詳しく読むことができます。 また、この競争の後、さまざまなresnetのようなエンコーダーを備えたLinknetネットワークが普及しました。 Linknetは最終決定され、問題を解決するための基礎として採用されました。







Resnet34は表現力と速度が優れており、ビデオメモリも少し必要なため、エンコーダでした。 私は他のエンコーダーを試しましたが、resnet34の方が収束は良くなりました。 ニューラルネットワークアーキテクチャのレビューはこの記事の範囲外ですが、次の良いレビューでそれらについて読むことができます







ブロックのシーケンスがデコーダーとして使用されました:3x3コンボリューション、アップサンプリング、3x3コンボリューション。 以下、「3x3畳み込み」は3x3ヤード、ストライド1、パディング1を使用した畳み込み演算です。実験により、アップサンプリングは転置畳み込み( 望ましくないアーティファクトを生成する )よりも悪くないことが示されています。次元の畳み込み1x1の縮小または増加では、リンクネットにありましたが、トレーニングの速度が私に合っていたため、まったくありませんでした。 深度接続を介して前の層の出力に接続された、スキップ接続を介した対応するresnet層からの符号は、3x3畳み込み入力を入力します。 入力は同じ次元であるため、これはすべて単純な操作+で置き換えることができます。







最終的なネットワーク図(最初と最後を除くすべての畳み込み後-relu):







画像







最初の畳み込みに戻りましょう。 チャンネルは4つだけですが、訓練されたエンコーダーの場合、チャンネルの軸に沿った入力次元は3です。いくつかの方法があります。 誰かがゼロで初期化することを提案し、誰かが利用可能な重みを再スケールすることを好みました。 別の方法を選びました。







そもそも、他のすべてのレイヤーの重みを加熱するかのように、4つのチャネルなしで5つの時代を教えました。 その後、彼は最初のレイヤーを完全に再初期化し、4つのチャンネルを入力に送り始めました。 私は学習率を変えず、体重を凍結しませんでした。 もちろん、最初のレイヤーを除くすべてのレイヤーの重量を凍結する価値がありました。 しかし、そうであっても、良い収束が判明し、追加の実験のための時間はすでに十分ではありませんでした。







損失(損失)の関数として、実証済みの束が選択されました。 w1binary cross entropy+w21dice 。 この競争では、重みは0.5 / 0.5でしたが、最後の2つの時代では、bceでもう少し重みが与えられました。 視覚的には、これにより住宅の結果と分離可能性がわずかに改善されました。 通常、ダイス係数はエッジをシャープにし、より確実な予測を提供しようとし、バイナリクロスエントロピーはそれを抑制します。







ここで、インスタンスセグメンテーションタスクを解決していることを思い出してください。しきい値を2値化すると、ほとんどの家がマージされます。 通常、ネットワーク機能が不足している場合は、このタスクで最終的に使用されていた古典的なコンピュータービジョンのトリックを適用します。 家の中心に近づくと、ネットワークは非常に高い確率でほとんど常に予測し、境界に近づくと信頼性が低下することがわかりました。







画像







しかし、高いしきい値での2値化では、望ましい結果が得られません。家は有効面積を失い、メトリックはこれについてあまり満足していません。 そのため、2つのしきい値は2つのしきい値で実行され、 流域アルゴリズムの形式でサポートされていました。 アルゴリズムは、そのままで、種子から水を注ぎ出し、同じ値のレベルに広がります。 そして、異なる種からの水が見つかると、境界線が現れます。 より高いしきい値での二値化によって得られたピクセルは、分水界の側面であり、より低いしきい値では、それらは分離空間でした。 その結果、家の面積は低い敷居から取られ、分離は高い敷居から取られました。 100ピクセル(約3 x 3メートル)未満の家もすべて削除されました。これは、平均してマークアップとの交差点がそれほど高くないためです。







その結果 、4つのフォールド用の1つのネットワーク(フォールドアウト予測の正しい検証用)、トレーニングされたresnet34エンコーダー、およびほぼ古典的なUnetのようなデコーダー。 流域アルゴリズム、トレーニングトリック、および少しの運による結果の簡単な後処理。







パブリックリーダーボードでは、2位でフィニッシュラインに到着しました。これは、賞品が均等に分配されているため(11-9-7)私にとって非常に適していました。 私用の新しい都市があり、私は1位に移されました。







Spacenet:道路検出の課題-道路認識とグラフ作成







伝統的に、私たちはマークアップとデータから始めます。 残念ながら、いくつかの困難がありました。

主催者は高品質のマークアップを約束しましたが、それでもメトリックに大きな影響を与える重大な欠陥がありました。 たとえば、下の写真のマーキングでは、高速道路の車線がジャンクションポイントで接続されていなかったため、すぐに速度が30%低下しましたが、一般的にグラフは良好に見えます。 以下、青はマークアップ、黄色は予測グラフです。







画像







ここで、データを見てみましょう。データは非常に量は多くなりましたが、意味は十分ではありませんでした。 事実、主催者は自分が持っているものすべて-MUL、MUL-PAN、PAN、RGB-PANを投稿しました。 他のチャネルには有用な追加情報が見つからなかったため、データを視覚的に調べ、RGBのみでトレーニングすることにしました。 実際、分散点からのデータが単純であればあるほど、モデルにそれらを一般化することを教えるのは簡単です。 最小/最大を意味するようにRGBを正規化しました。 主催者は、マスクを作成するために、ジオイソンから画像までの道路をレンダリングすることを提案しました。ここでは何も変更する必要はありませんでした。 タイプによって道路の幅を変える必要があるという考えがありましたが、すべてがそのように機能しました。







アーキテクチャを変更せずに、すべてのデータを過去のネットワークに送りました。 コンテストへの参加を開始した翌日の基本的な後処理(これ以降)で、610 / 620k(コンテスト終了時に6〜8位)を獲得しました。 いつものように、さまざまなハイパーパラメーターを使用してトレーニングを数回実行したため、トレーニング期間の数を増やし、損失の重みを0.8 / 0.2に設定しました。 これにより、640kの2番目のベースマークが与えられ、後処理のみがさらに改善されました。







ピクセル確率マップからグラフを作成するのは簡単なことではありません。 幸いなことに、インターネット上で最初のGoogleリンクがsknwパッケージで見つかりました。これは私のニーズに適応することができました。 彼は入り口でスケルトンを受け取り、出力でマルチグラフを発行します-非常に便利です。 Douglas-Peckerアルゴリズムが使用された道路の方向が変わる場所にピークを追加すること、またはopencvでの実装を追加することだけが残りました。 また、写真の端に沿った道路は、速度に大きな影響を与えました。 実際、画像の端に道路の一部がある場合、アルゴリズムはそれを高価であると見なしますが、実際の道路の幅が2倍を超える場合、そこに道路がない場合があります。







画像







このために隣接するタイルを使用するのは正しいでしょうが、テスト段階で利用可能かどうかが不明確だったため、これにより特定の困難が生じました。 さらに、LBでのギャップはすでに大きかったので、抵抗が最も少ない道を歩き、2ピクセル未満のすべての道路を切断するだけで、平均してうまくいきました。 さらに、グラフに小さな改善が加えられました。短い終端エッジを削除し、ほぼ直線上にあり、互いに近いエッジを接続しましたが、メトリックの大幅な増加はありませんでした。







合計: RGBデータのみ(世界で最も一般的な、つまりソリューションを他のソースに簡単にスケーリングする必要があります)、同じネットワーク、同じトリック、深刻な後処理のみが追加され、バイナリマスクを使用してスケルトンを構築し、スケルトンをグラフに変換し、グラフを投影しますセグメントで、境界線といくつかの非常に有用ではないトリックでの作業。







検証について







すべての競技会で、最終的にそれが恥ではないように、正しく検証することが非常に重要です。 事実、リーダーボードで可能な限り最高の結果を達成するだけでは必ずしも十分ではありません-安定したソリューションが必要であり、公開リーダーボードからのデータだけでなく、開発者から隠され、メトリック値を取得する他のデータでもうまく機能しますできません。 検証には、標準のk分割交差検証手法を使用します。 これは、トレーニングデータセットがk個の部分に分割され(k = 4あり)、k個のモデルが次のようにトレーニングされるという事実から成ります:各モデルはk-1倍でトレーニングされ、残りの倍は検証に進みます。モデルが見なかったデータ。 その結果、トレーニングデータのセット全体をカバーするk個の予測セットを取得しますが、これらのデータはいずれのモデルでも見られませんでした。 これらの予測はOOF(out of fold予測)と呼ばれ、しきい値を選択して実験することができます。 さらに、データの最終チェックを行うために、データのごく一部が残されることがよくあります。 しかし、競技会では、LBで十分です。







結論の代わりに







そして今、少し行動と個人的な経験。 Spacenet:道路検出チャレンジの6時間前:私が寝ている間に、3から4か所からの参加者は、非常に大きく、最終日の提出が成功をもたらさなかったため、2位に上がりました。 さらに3時間後、彼が最初でした。







さらに、競争の終わりに、近隣地域の同僚がデータセットのバグを報告しました。これは、マルチスペクトルデータがわずかに不完全であるという事実から成り、その結果、RGBを勉強した人は、リーダーボードで不当に高い結果をテストで受け取りましたそれを修正することを約束した。 したがって、私はいくつかの場所を下に落ちると予想しました。 結果の発表で、彼らはモデルを長期間再訓練したため、主催者に1か月以上かかりました。 LBの最初の行で私の名前を見つけたとき、あなたはその喜びと驚きを想像します。







最後に、競争相手(特にセリムビクター )に、健全な競争と良いアドバイス、そして私がテキストの編集を手伝ってくれたすべての人に感謝したいと思います。







読んでくれたみなさん、ありがとうございます!







PS:spacenetオーガナイザーがコードをアップロードしました。








All Articles