res_w, res_h = self.res
offset = [1, res_h / res_w]
trainset = self.dt_dataset['train']['joint_2d'][::self.sample_stride, :, :2].astype(np.float32) # [N, 17, 2]
testset = self.dt_dataset['test']['joint_2d'][::self.sample_stride, :, :2].astype(np.float32) # [N, 17, 2]
# res_w, res_h = self.res
trainset = trainset / res_w * 2 - offset
testset = testset / res_w * 2 - offset
2D 点座標を [-1, 1] 範囲にマッピングする主な理由は次のとおりです。
- 解像度の影響を排除する
異なる画像解像度での絶対ピクセル座標値は大きく異なります (例: 100px と 1000px)。[-1, 1] にマッピングすると、この解像度の影響を滑らかにすることができるため、座標値は均一な数値範囲内になります。
- ネットワーク入力に適した
ほとんどの深層学習ベースのモデルは、入力データが [-1, 1] や [0, 1] などの固定値範囲内にあることを前提としています。これは、ネットワークが学習し、大きすぎる値や小さすぎる値によって引き起こされる収束の困難などの問題を回避するのに役立ちます。
- モデルの設計が簡単
[-1, 1] の標準化空間では、座標スケールの問題を考慮せずにアルゴリズムとモデルを設計する方が簡単です。たとえば、点間の距離などを計算します。
- 数値安定性の向上
座標値が大きいか小さいと、計算プロセスで数値が不安定になる可能性があります。しかし、[-1, 1] の範囲では、この種の問題は大幅に軽減されます。