Closed takumi2786 closed 11 months ago
@kyakuno こちら対応しました:bow:
確認お願いします。
対応、ありがとうございます。NETWORK_IMAGE_FORMAT_RGBはyolov3への指定であり、内部でBGRからRGB変換が行われます。対して、PoseResNetはBGRをそのまま、ネットワークに入力しているのですが、実は、meanとstdはそのままで、src_imgをinput_dataに代入する際に、BGRからRGB変換してrunに流すのが正しそうな気がしてきたのですが、いかがでしょうか。
poseresnetの大元のコードで、学習をBGRに対してRGBのmeanを適用してしまっているのであれば、現状のコードのままでも問題ないような気もしますね。
・poseresnetの大元のリポジトリで、imreadしてBGRのデータに対して、RGB順のmeanとstdを適用している ・ailiaのサンプルはこの手順に沿った実装になっている ・学習時の前処理と推論時の前処理は合わせる必要があり、大元が間違った学習をされている以上、現状のままの方が精度が良いのではないか?
レビューありがとうございます 確認します!
対応、ありがとうございます。NETWORK_IMAGE_FORMAT_RGBはyolov3への指定であり、内部でBGRからRGB変換が行われます。対して、PoseResNetはBGRをそのまま、ネットワークに入力しているのですが、実は、meanとstdはそのままで、src_imgをinput_dataに代入する際に、BGRからRGB変換してrunに流すのが正しそうな気がしてきたのですが、いかがでしょうか。
ありがとうございます。読み違えていました。 Detectorのほうを見てしまっていました :bow:
poseresnet読み込み箇所はこちらで、確かにBGRの画像をcomputeに入力しているようでした。
@kyakuno
・poseresnetの大元のリポジトリで、imreadしてBGRのデータに対して、RGB順のmeanとstdを適用している ・ailiaのサンプルはこの手順に沿った実装になっている ・学習時の前処理と推論時の前処理は合わせる必要があり、大元が間違った学習をされている以上、現状のままの方が精度が良いのではないか?
参照レポジトリの学習コードでは以下の箇所で画像を読み込んでいるのですが、cv2.IMREAD_COLORが利用されているため、BGRで読まれています。 https://github.com/microsoft/human-pose-estimation.pytorch/blob/49f3f4458c9d5917c75c37a6db48c6a0d7cd89a1/lib/dataset/JointsDataset.py#L73-L74
また、ここ以外にRGB・BGR変換などを行っている箇所はなさそうでした。
Issueは解決済みになっていますが、該当箇所のコードは5年前から変更されていないようです。
以上のことから、参照レポジトリ・修正前コードはともに、
となっていそうです。
なのでご指摘通り、今回の修正は不要だと思いました:bow:
了解しました!詳細調査、ありがとうございます。 ということで、このIssueは完了とさせていただきます。
Issue Link
https://github.com/axinc-ai/ailia-models/issues/1225
作業内容
表題の通りです。前処理のベクトルについて、BGR形式で読み込んだ画像RGB順序の変換ベクトルを適用してしまっていたため、正しい順序で評価されるように修正しました。
確認した項目
README記載の参照コードを確認しました。
該当の前処理ベクトルは、以下の箇所で定義されています。 https://github.com/microsoft/human-pose-estimation.pytorch/blob/49f3f4458c9d5917c75c37a6db48c6a0d7cd89a1/pose_estimation/valid.py#L139
このコードでは画像をRGB形式で読み込んでいるため、以下のベクトルはRGB順序です。
その他メモ
以下のIssue曰く、pytorch のresnetにはRGB形式の画像を入力する必要があるとあります。 https://github.com/microsoft/human-pose-estimation.pytorch/issues/73
一方、こちらの箇所でailia.NETWORK_IMAGE_FORMAT_RGBを指定しています。
これにより、推論時にBGRからRGBへ変換され問題なく動作すると理解しました。