質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

981閲覧

githubに公開されているライブラリをインストールしたい

sasuraibito

総合スコア5

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2022/10/16 04:13

編集2022/10/16 04:18

実現したいこと

プログラミング初心者です。
githubに公開されているMMBTという機械学習モデルを使いたいのですが、mmbt.pyというパイソンファイルの最初にあるコード「from mmbt.models.image import ImageEncoder」の「mmbt」というライブラリがいくら探しても見つかりません。一般にライブラリをインストールするときはpipを使っているのですが、それだと見つかりません。
どのような操作を行えば、このライブラリを使用できるのか、教えていただけないでしょうか?
本当に初歩的な質問ですみません。
ご回答よろしくお願いします。

該当のソースコード

import torch import torch.nn as nn from pytorch_pretrained_bert.modeling import BertModel from mmbt.models.image import ImageEncoder #この部分をインストールしたいです。

試したこと

ターミナルからpip install mmbtで試したが、見つからなかった。

補足情報(FW/ツールのバージョンなど)

該当のgithubのページです。
https://github.com/facebookresearch/mmbt/blob/master/mmbt/models/mmbt.py

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

MultiModal BiTransformers (MMBT)
から一式を、自分のパソコンのどこかにダウンロードします

ダウンロードした(「README.md」とかがある)場所で、上記Webページの「Model Training」の「Example command:」に書かれてるようにすれば実行できるはずです

 

「from mmbt.models.image import ImageEncoder」の「mmbt」

は、ダウンロードした場所にある「mmbt」という名前のディレクトリのことです

「mmbt」に「models」というディレクトリがあり、そこに「image.py」というファイルがありますよね
それが「mmbt.models.image」です

 
【追記】
ダウンロードした(「README.md」とかがある)場所を、モジュール検索パスに追加してください

参考
Pythonでimportの対象ディレクトリのパスを確認・追加(sys.pathなど)

投稿2022/10/16 04:45

編集2022/10/16 23:51
jbpb0

総合スコア7651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sasuraibito

2022/10/16 09:16

本当に申し訳ありません。私の理解力不足により、何度読み返しても回答者様がおっしゃている内容の通りに実行できませんでした。 まず、ご指摘の通りMultiModal BiTransformers (MMBT)を自分のパソコンにクローンしたのですが、その後に「Example command:」を実行するというところがよく分かりませんでした。 以下のコードはどこでどのような処理をすることによって完了できるのか、もしよければ教えていただけないでしょうか? 本当に初歩的なことがわからなくて申し訳ございません。 python mmbt/train.py --batch_sz 4 --gradient_accumulation_steps 40 \ --savedir /path/to/savedir/ --name mmbt_model_run \ --data_path /path/to/datasets/ \ --task food101 --task_type classification \ --model mmbt --num_image_embeds 3 --freeze_txt 5 --freeze_img 3 \ --patience 5 --dropout 0.1 --lr 5e-05 --warmup 0.1 --max_epochs 100 --seed 1
jbpb0

2022/10/16 11:12 編集

githubからダウンロードした(「README.md」とかがある)場所に、内容が下記だけの「mmbttest.py」というファイルを作って置いてください import mmbt 次に、ターミナル(windowsならコマンドプロンプト)を起動して、githubからダウンロードした(「README.md」とかがある)場所に「cd」してから、下記を実行してください python mmbttest.py 上記を実行した後に、何も起きずにターミナル(またはコマンドプロンプト)のプロンプトが再び表示されたら、エラーが出ずに「import mmbt」が実行できた、ということです 「import mmbt」が実行できるのなら、他のこともいろいろできますよね なお、もしpythonを実行するコマンドが「python」ではなく「python3」なら、下記を実行してください python3 mmbttest.py
jbpb0

2022/10/16 11:13 編集

python mmbt/train.py ... も同様に、ターミナル(またはコマンドプロンプト)でgithubからダウンロードした場所に「cd」したら、実行できるはずです ただし、「Example command:」に書いてあるそのままではなく、「/path/to/datasets/」をデータセットが実際に置いてある場所に変える、とかは必要です https://github.com/facebookresearch/mmbt の「Getting Started」の「Model Training」に書いてあることを参照してください
jbpb0

2022/10/16 11:23

ちなみに、「mmbttest.py」の内容を、この質問のコードの from mmbt.models.image import ImageEncoder に変えて、当方のmacのターミナルで python mmbttest.py を実行したら、 ModuleNotFoundError: No module named 'pytorch_pretrained_bert' というエラーになりました 当方のmacのpythonには「pytorch_pretrained_bert」を入れてないので上記のエラーになりましたが、質問者さんのpython環境には入れてあるようなので、たぶんエラー出ずに実行できると思います
sasuraibito

2022/10/16 11:49

一から丁寧にご解説いただき、誠にありがとうございます。 ご指摘の手順通りに操作を進めたところ、ターミナル上でエラーが発生しなかったため、無事「import mmbt」が実行できたのかと思われます。 また、私の方ではpytorch_pretrained_bertを事前にインストールしていたので、うまくいきました。 基礎的なファイルの操作方法を含めてとても勉強になりました。 本当にありがとうございました。
sasuraibito

2022/10/16 14:55 編集

夜分遅くにすみません。 先ほどこの件を解決したつもりだったのですが、その後にこのmmbtを使ったシェルスクリプトファイルを実行しようとしたら、ModuleNotFoundError: No module named 'mmbt.models'; 'mmbt' is not a packageと表示されてしまいました。 確かに、ご指摘いただいた通り「mmbttest.py」にimport mmbtと記述し、それをクローン先のディレクトリに置いてからターミナルでpython mmbttest.pyを実行したところ、何もエラーは出ずにプロンプトが表示されました。 この時点で、mmbtというモジュールがローカルの方にインストールされているという解釈になりますよね?… ですが、https://github.com/vkeswani/IITK_Memotion_Analysis/tree/master/Bimodal/mmbt にあるmmbt.sh を実行しようとすると、、、結果としてModuleNotFoundError: No module named 'mmbt.models'; 'mmbt' is not a packageとなってしまいます。 このエラー文が指す意味は、「mmbtがない」ってことですよね… 単にgitからクローンしてくるだけではダメだということなのでしょうか? 本題からずれたことをお尋ねしてしまい、誠に申し訳ありません。 もしよければこの問題の解決策に関してお手隙の際にご指摘いただければ幸いです。
jbpb0

2022/10/16 15:35 編集

https://github.com/facebookresearch/mmbt からダウンロードした場所に「mmbt.sh」を置いて、ターミナルでそこに「cd」して、「mmbt.sh」を実行したら、どうなりますでしょうか? あと、質問者さんがコメントに書いたエラーとは直接は関係ありませんが、「mmbt.sh」の「/path/to/savedir/」とか「/path/to/datasets/」とかは、そのままではダメですよ
sasuraibito

2022/10/16 16:09 編集

ご返信ありがとうございます。 ただいまご指摘の内容の通り実行しようと試みているのですが、”https://github.com/facebookresearch/mmbt からダウンロードした場所に「mmbt.sh」を置いて”というのは、githubから先ほどクローンした(「README.md」とかがある)ところに、「mmbt.sh」をおけば良いということでしょうか? 先ほど私は、mmbtディレクトリの中のmodelディレクトリに置いてしまっていました… また、シェルスクリプトのpathの指定も初心者すぎて本当によくわかってないのですが、 「--savedir /path/to/savedir/ --name mmbt_model_run \」の部分はmmbt.pyまでのディレクトリのパスを、「--data_path /path/to/datasets/ \」の部分はmmbtディレクトリの中のdataディレクトリまでのパスを/Users/ユーザーネーム から指定すれば良いという解釈であってますでしょうか?
sasuraibito

2022/10/16 16:24

書き換えたシェルスクリプトなのですが、クローンしたディレクトリをclone1として、このように書いて実行しました。 #!/bin/bash python mmbt/train.py --batch_sz 4 --gradient_accumulation_steps 40 \ --savedir /Users/maedasusumuju/clone1/mmbt/models/to/savedir/ --name mmbt_model_run \ --data_path /Users/maedasusumuju/clone1/mmbt/data/to/datasets/ \ --task mmimdb --task_type classification \ --model mmbt --num_image_embeds 1 --freeze_txt 0.1 --freeze_img 0.3 \ --patience 10 --dropout 0.2 --lr 5e-05 --warmup 0.1 --max_epochs 100 --seed 1 ターミナルのエラー文がこちらです… (base) maedasusumuju@maedasuukinoAir ~ % cd /Users/maedasusumuju/clone1 (base) maedasusumuju@maedasuukinoAir clone1 % sudo sh /Users/maedasusumuju/clone1/mmbt.sh Password: Traceback (most recent call last): File "mmbt/train.py", line 20, in <module> from mmbt.data.helpers import get_data_loaders ModuleNotFoundError: No module named 'mmbt' やはりmmbt がないと言われてしまいます、、 何かどこかで手順が間違っているのでしょうか?…
jbpb0

2022/10/16 16:32

> githubから先ほどクローンした(「README.md」とかがある)ところに、「mmbt.sh」をおけば良いということでしょうか? そうです そして、そこに「cd」してから、実行してみてください 実は、「mmbt.sh」を置く場所は、別の場所でも大丈夫です でも、「cd」する場所は、githubからダウンロードした(「README.md」とかがある)場所じゃないとダメです 「mmbt.sh」が違う場所にある場合は、実行時に相対パスか絶対パスで場所を指定してください
jbpb0

2022/10/16 16:42 編集

内容が python mmbttest.py の「mmbttest.sh」という名前のファイルを、「mmbttest.py」と同じ場所に置いてください 次に、ターミナルを起動して、その場所に「cd」してから、「mmbttest.sh」を実行してみてください エラー出ますか?
sasuraibito

2022/10/16 17:06

はい、ただいま実行して参りました。 結果は Last login: Mon Oct 17 01:17:24 on ttys000 (base) maedasusumuju@maedasuukinoAir ~ % cd /Users/maedasusumuju/clone1 (base) maedasusumuju@maedasuukinoAir clone1 % sudo sh /Users/maedasusumuju/clone1/mmbttest.sh Password: (base) maedasusumuju@maedasuukinoAir clone1 % となり、エラーは出ませんでした。
sasuraibito

2022/10/16 17:13

今行ったことは、おそらく、mmbttest.shファイルを実行することによって、その中身のpython mmbttest.pyが実行され、つまりはimport mmbt が実行できるかどうかの動作確認をしていたということですよね? ここでエラーが出ないということは、mmbt自体はしっかり存在しているということなのですよね… ではなぜ「 No module named 'mmbt'」と表示されてしまうのか、本当に疑問です。 .sh の実行の仕方が違うとかなのでしょうか
jbpb0

2022/10/17 02:07 編集

「mmbt/train.py」の先頭に下記を追加してから、「mmbt.sh」を実行してみてください import sys import pprint pprint.pprint(sys.path) 実行したらたくさんパスが表示されますが、その中に /Users/maedasusumuju/clone1 が入ってますでしょうか? 【追記】 入ってない場合は、「mmbt/train.py」の先頭に下記を追加してから実行してみてください import sys sys.path.append('/Users/maedasusumuju/clone1') 【追記2】 当方のmacのpythonで確認したら、カレントディレクトリがモジュール検索パスに入ってませんでした おそらく質問者さんの環境も同様なため、「/Users/maedasusumuju/clone1」以外に「*.py」ファイルが置かれてる場合はインポートできないのだと思います 回答に対策を追記しました (上記【追記】に書いた「sys.path.append(...」も、その対策の一つ)
sasuraibito

2022/10/17 07:05

改めてご返信いただき、本当にありがとうございます。 まず、「mmbt/train.py」の先頭に追加してから「mmbt.sh」を実行するという操作に関してですが、実行したところ、以下のように表示され、/Users/maedasusumuju/clone1は入っている模様でした。 ['/Users/maedasusumuju/clone1/mmbt', '/Users/maedasusumuju/opt/anaconda3/lib/python38.zip', '/Users/maedasusumuju/opt/anaconda3/lib/python3.8', '/Users/maedasusumuju/opt/anaconda3/lib/python3.8/lib-dynload', '/Users/maedasusumuju/opt/anaconda3/lib/python3.8/site-packages', '/Users/maedasusumuju/opt/anaconda3/lib/python3.8/site-packages/aeosa', '/Users/maedasusumuju/opt/anaconda3/lib/python3.8/site-packages/locket-0.2.1-py3.8.egg'] Traceback (most recent call last): File "mmbt/train.py", line 24, in <module> from mmbt.data.helpers import get_data_loaders ModuleNotFoundError: No module named 'mmbt' しかし、この操作とならびに【追記2】で書かれていた操作が何をやっているものなのか、先ほどから個人的に調べているのですがよくわからず、また、「ダウンロードした(「README.md」とかがある)場所を、モジュール検索パスに追加」という指示もよくわからず手が止まっている現状です。 現在のところは、【追記】のところで書かれていた指示を実行したいと思います。
jbpb0

2022/10/17 07:21

> /Users/maedasusumuju/clone1は入っている模様でした。 入ってないです > ['/Users/maedasusumuju/clone1/mmbt', は「mmbt」が付いてるので、ダメなんです 正確に「/Users/maedasusumuju/clone1」と一致しないと (余計なのが付いてたらダメ)
jbpb0

2022/10/17 07:39 編集

> この操作とならびに【追記2】で書かれていた操作が何をやっているものなのか、先ほどから個人的に調べているのですがよくわからず、 pprint.pprint(sys.path) を実行したら表示された下記が「モジュール検索パス」です > ['/Users/maedasusumuju/clone1/mmbt', '/Users/maedasusumuju/opt/anaconda3/lib/python38.zip', '/Users/maedasusumuju/opt/anaconda3/lib/python3.8', '/Users/maedasusumuju/opt/anaconda3/lib/python3.8/lib-dynload', '/Users/maedasusumuju/opt/anaconda3/lib/python3.8/site-packages', '/Users/maedasusumuju/opt/anaconda3/lib/python3.8/site-packages/aeosa', '/Users/maedasusumuju/opt/anaconda3/lib/python3.8/site-packages/locket-0.2.1-py3.8.egg'] sys.path.append('/Users/maedasusumuju/clone1') を実行したら、モジュール検索パスの最後に「/Users/maedasusumuju/clone1」が追加されて、そこにある「mmbt」ディレクトリを「mmbt/train.py」からインポートできるようになります 参考 https://qiita.com/state159/items/adb1f81b4f823bcb8296
sasuraibito

2022/10/17 07:57

>mmbt」が付いてるので、ダメなんです 正確に「/Users/maedasusumuju/clone1」と一致しないと (余計なのが付いてたらダメ) 知識不足で大変恐縮なのですが、つまり、先ほどの/Users/maedasusumuju/clone1/mmbtのパスでは、.shファイルがclone1ディレクトリの直下にあるにもかかわらず、更に先のmmbtディレクトリまでパスを指定してしまっていたために実行ができなっかった、、的な解釈になるのでしょうか? それを直すために、sys.path.append('/Users/maedasusumuju/clone1')でパスの指定を変更(?)しましょうということだったのでしょうか? ただいま【追記】の操作を実行したところ、以下のような結果になったのですが、やはり余計な/mmbtがくっついてしまっています、、、 (base) maedasusumuju@maedasuukinoAir clone1 % sudo sh /Users/maedasusumuju/clone1/mmbt.sh Password: ['/Users/maedasusumuju/clone1/mmbt', '/Users/maedasusumuju/opt/anaconda3/lib/python38.zip', '/Users/maedasusumuju/opt/anaconda3/lib/python3.8', '/Users/maedasusumuju/opt/anaconda3/lib/python3.8/lib-dynload', '/Users/maedasusumuju/opt/anaconda3/lib/python3.8/site-packages', '/Users/maedasusumuju/opt/anaconda3/lib/python3.8/site-packages/aeosa', '/Users/maedasusumuju/opt/anaconda3/lib/python3.8/site-packages/locket-0.2.1-py3.8.egg', '/Users/maedasusumuju/clone1'] usage: train.py [-h] [--batch_sz BATCH_SZ] [--bert_model {bert-base-uncased,bert-large-uncased}] [--data_path DATA_PATH] [--drop_img_percent DROP_IMG_PERCENT] [--dropout DROPOUT] [--embed_sz EMBED_SZ] [--freeze_img FREEZE_IMG] [--freeze_txt FREEZE_TXT] [--glove_path GLOVE_PATH] [--gradient_accumulation_steps GRADIENT_ACCUMULATION_STEPS] [--hidden [HIDDEN [HIDDEN ...]]] [--hidden_sz HIDDEN_SZ] [--img_embed_pool_type {max,avg}] [--img_hidden_sz IMG_HIDDEN_SZ] [--include_bn INCLUDE_BN] [--lr LR] [--lr_factor LR_FACTOR] [--lr_patience LR_PATIENCE] [--max_epochs MAX_EPOCHS] [--max_seq_len MAX_SEQ_LEN] [--model {bow,img,bert,concatbow,concatbert,mmbt}] [--n_workers N_WORKERS] [--name NAME] [--num_image_embeds NUM_IMAGE_EMBEDS] [--patience PATIENCE] [--savedir SAVEDIR] [--seed SEED] [--task {mmimdb,vsnli,food101}] [--task_type {multilabel,classification}] [--warmup WARMUP] [--weight_classes WEIGHT_CLASSES] train.py: error: argument --freeze_txt: invalid int value: '0.1'
jbpb0

2022/10/17 08:38

> やはり余計な/mmbtがくっついてしまっています、、、 大丈夫です 一番下に > '/Users/maedasusumuju/clone1'] が追加されてますよね ちょっと前に質問者さんがコメントに書いたのと比べてみてください その時にはありませんでしたよね そして、これまでは出てた > Traceback (most recent call last): File "mmbt/train.py", line 24, in <module> from mmbt.data.helpers import get_data_loaders ModuleNotFoundError: No module named 'mmbt' が、今回は出てませんよね それは、インポートが正常にできたからです > usage: train.py [-h] [--batch_sz BATCH_SZ] ... は、エラーではありません たぶん、引数の指定が間違ってる、と言ってるのだと思います
jbpb0

2022/10/17 08:51

> 先ほどの/Users/maedasusumuju/clone1/mmbtのパスでは、.shファイルがclone1ディレクトリの直下にあるにもかかわらず、更に先のmmbtディレクトリまでパスを指定してしまっていたために実行ができなっかった、、 「train.py」が「/Users/maedasusumuju/clone1/mmbt」にあるため、モジュール検索パスに「/Users/maedasusumuju/clone1/mmbt」は入ってた でも、必要なのはそこじゃなくて「/Users/maedasusumuju/clone1」だけど、それは入ってなかったため、インポートできなかった > それを直すために、sys.path.append('/Users/maedasusumuju/clone1')でパスの指定を変更(?)しましょう 「変更」ではなく「追加」です モジュール検索パスにもともと入ってた「/Users/maedasusumuju/clone1/mmbt」はそのままで、「/Users/maedasusumuju/clone1」を追加した 「/Users/maedasusumuju/clone1/mmbt」は要らないけど、有っても害はないのでそのまま残ってる
sasuraibito

2022/10/17 09:30 編集

なるほど!見落としてましたが、確かに/Users/maedasusumuju/clone1が一番下にありました。 aceback (most recent call last): File "mmbt/train.py", line 24, in <module> from mmbt.data.helpers import get_data_loaders ModuleNotFoundError: No module named 'mmbt' そして、これが出て無いということは、しっかりインポートされているということなんですね。 ようやく解決しました。 また「/Users/maedasusumuju/clone1」を「追加」することによって、インポートできるようになった、ということなんですね。 本当にありがとうございます。 最後に一点だけ気になってしまったのですが、これでmmbt.shというシェルスクリプトの実行は完了したということになるのでしょうか? シェルスクリプトの実態そのものがまだあまり把握できておらず、、何となくですが、mmbt.py(モデル)とtrain.py(学習)と、それを行うためのデータセットをmmbt.shに書かれたパスから取得して、処理を行うという感じで解釈しております。 また、今更思ったのですが、mmbt.shに指定するデータパスは、https://github.com/vkeswani/IITK_Memotion_Analysis/tree/master/Bimodal/mmbt の方から(mmbt.shが入ってたリポジトリのやつ)持ってこないとダメだったのですね?… (間違えてclone1の方から入れてました) だから、色々と引数の指定が間違っているといわれているのだと思いました。
jbpb0

2022/10/17 09:59

> これでmmbt.shというシェルスクリプトの実行は完了したということになるのでしょうか? なりません こんなのが出るということは、何か間違ってるということです > usage: train.py [-h] [--batch_sz BATCH_SZ] ... 間違ってるから、「こう直せ」と教えてくれてるのです
sasuraibito

2022/10/17 11:29

なるほど!!そういうことだったのですね… この度は一から十まで丁寧に教えていただき、誠にありがとうございましたm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問