RuntimeError: スカラー型が期待されていましたが、Float が見つかりました

原因: CCNet のクロス アテンション モジュールを YOLOv5 に移植します。

変更後: アテンション モジュールでは行列演算が増え、トレーニング中に cuda タイプとカップ タイプの間で競合が発生し (別の記事を書きました)、検証中に上記のエラーが表示されます。

エラーコードは次のとおりです。

        # [b1*w1, c1, h1] -> [b1, w1, c1, h1] -> [b1, c1, h1, w1]
        out_H = torch.bmm(value_H, att_H.permute(0, 2, 1)).view(b1, w1, -1, h1).permute(0, 2, 3, 1)
        # [b1 * h1, c1, w1] -> [b1, h1, c1, w1] -> [b1, c1, h1, w1]
        out_W = torch.bmm(value_W, att_W.permute(0, 2, 1)).view(b1, h1, -1, w1).permute(0, 2, 1, 3)

エラーの場所は、行列乗算演算が実行される torch.bmm() です。2 つのデータ型が異なるために競合が発生します。

解決策: データ型を別のデータ型に変更するには、引き続き to() メソッドを使用します。

        # [b1*w1, c1, h1] -> [b1, w1, c1, h1] -> [b1, c1, h1, w1]
        out_H = torch.bmm(value_H, att_H.permute(0, 2, 1).to(value_H.dtype)).view(b1, w1, -1, h1).permute(0, 2, 3, 1)
        # [b1 * h1, c1, w1] -> [b1, h1, c1, w1] -> [b1, c1, h1, w1]
        out_W = torch.bmm(value_W, att_W.permute(0, 2, 1).to(value_W.dtype)).view(b1, h1, -1, w1).permute(0, 2, 1, 3)

おすすめ

転載: blog.csdn.net/adminHD/article/details/127766616