ホームページ:dextr
参照コード:DEXTR-PyTorch
1。概要
はじめに:この記事は、典型的なインタラクティブセグメンテーションと見なすことができます。この記事では、ターゲット領域のセグメンテーションを実現するために、ポールをガイドとして使用する方法を提案します。追加されたガイドは、ターゲットの境界を定義するためだけに、正と負のサンプル属性を区別しないため、対応する入力の畳み込みに1つのチャネルを追加します。インタラクティブセグメンテーションに不慣れな学生はこの記事を読むことができますが、いくつかの問題点もあります。
この記事の方法では、極値の形をガイドとして使用して、ターゲットのおおよその位置をフレームに収め、セグメント化します。一部の写真の結果を次の図に示します。
ただし、この方法には、実際には次の欠点があります。プロセス。:
- 1)ポールの選択も非常に面倒であり、ターゲットの境界に合わせる必要があります。
- 2)特異な形状と包含を持ついくつかのオブジェクトと相互作用することは困難です。
- 3)この記事では、追加の5番目のポイントを使用するための戦略を示していますが、サンプルは全体としてポジティブとネガティブを区別していないため、インタラクティブなセグメンテーションの精度がさらに向上することはありません。
2.メソッドデザイン
2.1メソッドピップライン
記事のパイプラインは比較的単純で、従来のセグメンテーションネットワークと大差ありません。ResNet-101(ImageNet Pretrained)を使用し、PSPモジュールとデコードユニットを追加してターゲットピクセルの予測を実現します。全体的な構造を次の図に示します。
記事の方法では、ターゲットがネットワークに入力されたときにマージン範囲内でターゲットを調整し、予測のためにネットワークに送信します。クリッピング後に正と負のサンプルピクセルの比率が異常になるため、この記事では、元のクロスに基づいてカテゴリにバランス係数を追加して、バランスの取れたクロスエントロピー損失を取得します
。L= ∑j∈Ywyj C( yj、yj ^)L = \ sum_ {j \ in Y} w_ {y_j} C(y_j、\ hat {y_j})L=J ∈ YΣwそしてJC (yJ、そしてJ^)
さらに、セグメント化されるターゲットによってガイドされる極として、次の方法で計算されます。
def extreme_points(mask, pert):
def find_point(id_x, id_y, ids):
sel_id = ids[0][random.randint(0, len(ids[0]) - 1)]
return [id_x[sel_id], id_y[sel_id]]
# List of coordinates of the mask
inds_y, inds_x = np.where(mask > 0.5)
# Find extreme points
return np.array([find_point(inds_x, inds_y, np.where(inds_x <= np.min(inds_x)+pert)), # left
find_point(inds_x, inds_y, np.where(inds_x >= np.max(inds_x)-pert)), # right
find_point(inds_x, inds_y, np.where(inds_y <= np.min(inds_y)+pert)), # top
find_point(inds_x, inds_y, np.where(inds_y >= np.max(inds_y)-pert)) # bottom
])
2.2戦略の5番目のポイント
セグメンテーションの精度をさらに向上させるために、この記事では、4つの極に基づくIoUしきい値識別を使用して、追加のガイドとしてIoUパフォーマンスが不十分な画像上の最も多くのエラーポイントをサンプリングしますが、コードのこの部分は記事にありますGit倉庫では利用できません。問題-34を参照してください。少し味がありませんが、記事に記載されている実験結果によると、それでも少し便利です。
3.実験結果
記事の各変更がパフォーマンスに与える影響:
記事の方法と他の方法のパフォーマンスの比較: