-
Notifications
You must be signed in to change notification settings - Fork 310
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ADD vit #275
Comments
リサーチ備忘📝調査した結果につきまして、こちらに記載させて頂こうと思います。 「lucidrains/vit-pytorh」についてlucidrains/vit-pytorchについて、確認させていただきました。 Licenseは、MITになります。 リポジトリの構成としては、以下のようになっています。
readmeを読んでいくと、pre-trainedモデルのリンク紹介があった為、覗いてみると以下の別リポジトリへと繋がりました。
しかし、当該リポジトリとリンク先リポジトリとを読み込んでみると、どうもvitそのもののpretrainedパラメーターは無さそうでした。 その為、一旦ではありますが、ailia上で動かすonnxの生成元として、このリポジトリは不十分である印象を受けました。 「jeonsworld/ViT-pytorch」についてjeonsworld/ViT-pytorchというリポジトリについても、確認させていただきました。 Licenseは、MITになります。 リポジトリの構成としては、以下のようになっています。
結果も見せ方も良いコードとなっているので、こちらの踏襲すれば良いかと思ったのですが、よくよく調べてみると、このリポジトリにおけるモデルの実装は、 尚、補足としまして、当該リポジトリを用いた学習については、事前学習済みモデルを用いて学習する方針が推奨されておりますが、逆にスクラッチでの学習を行おうとした場合には、一部コードの改変を要するようでありました。 その為、スクラッチで学習をする場合には、lucidrains/vit-pytorchの方が適しているかもしれません。 「google-research/vision_transformer」についてlucidrains/vit-pytorchのリポジトリを見ていると、officialリポジトリが以下である、という記載がありました。 このリポジトリは、google-researchによるJAXの実装になります。 構造は以下のようになっています。
Licenseは、Apache-2.0になります。 このリポジトリのモデルを、onnxエクスポートできれば、ailiaへの搭載が可能と考えたのですが、jaxからonnxのエクスポートについて、情報が見つかりませんでした。 しかし、色々調べてみると、JAX版のgoogle researchによるvitを、pytorchへとconvertしてくれているリポジトリを見つけました。 「lukemelas / PyTorch-Pretrained-ViT」についてJAX版のgoogle researchによるvitを、pytorchへとconvertしてくれているリポジトリが以下になります。 尚、リポジトリに格納されているモジュール外に、Colabのスクリプトモジュールもあり、そのリンクはreadmeに記載されています。 リポジトリの構造は以下の様になっています。
作られて7ヶ月のリポジトリであるからか、実施内容の性質上か、Licenseについての記載はありませんでした。 convertの方法は非常にシンプルで、jaxで保存されたモデルを、pytorchのstate_dictへと変換するもののようでした。 この変換を経て、pytorchモデルからonnxエクスポートを行えば、googleresearchオリジナルのvitがailiaへと搭載できそうです。 |
リサーチ備忘2📝引き続き調査した結果につきまして、こちらに記載させて頂きます。 各リポジトリの関係性について先程までのリサーチを経て、概ねonnxエクスポートの方針は決まったのですが、ここで1つ想定外の事象が確認されました。 具体的には、画像パッチの作成方法を、ストライドの広いconvolutionで行っています。 論文に記載されているネットワーク構造は以下です。 一方で、実際に実装されているネットワーク構造は、こちらに近いものです。 compact convolutional transformer ↓ (作られるパッチ画像768枚の内の1枚、pixabayの画像にて) このことに関連する質問のようなものが、リポジトリのissueにもありました。 また、google-researchオリジナルのvitリポジトリ内を、rearrangeで検索しても検出がされませんでした。 実際に、compact convolutional transformerのような実装がされてる該当コード部分は、以下となります。 (233行目)
これらの調査結果から、リポジトリの踏襲を行うという観点においては、compact convolutional transformerのような実装がされたモデルを、onnxエクスポートすることが順当かと思われました。 尚、論文に記載されるような画像をバラバラにして、パッチを得る方針しては、このissueのstart地点でもあるlucidrains/vit-pytorchにて行われているようでした。 (93行目)
これが論文の通りの実装かと思われます。 尚、attention mapについて実装をしているのが、jeonsworld/ViT-pytorchになります。 以下のような結果を、サンプルスクリプトから得ることができます。 また、改めて見てみると、こちらのリポジトリで用いられている重みについても、GoogleのOfficialと書かれています。 尚、保存されている重みの形式が、 ただし、jeonsworld/ViT-pytorchについては、若干オリジナルのロジックが加えられているような旨が、リポジトリのissueにて伺えます。 この点は、或いは、学習についてのみかもしれません。 より精緻に、google-researchの推論機能を移植するという意図ですと、lukemelas/PyTorch-Pretrained-ViTにて、jaxの重みをpytorchに変換した方が良いのかもしれません。 |
https://github.com/lucidrains/vit-pytorch
The text was updated successfully, but these errors were encountered: