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

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

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

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

GitHub

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

解決済

1回答

2956閲覧

Google colaboratory上で from ssd import build_ssd が通らない

sugar_s

総合スコア8

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

GitHub

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

0グッド

0クリップ

投稿2021/08/28 08:25

実現したいこと

Google colaboratory上でbuild_ssdをインポートしたいです。

くずし字の漢字を検出・認識するプログラムを作っています。
現在Create Pytorch Dataset for Classifying Characters
内にあるDemoModelで学習した後、torch.save(DemoModel().state_dict(),'/content/drive/MyDrive/Colab Notebooks/Kuzushiji_Visualisation/' + 'kanji' + '.pth')
で保存したモデルで物体検出を行おうとしたところ以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

ImportError Traceback (most recent call last) <ipython-input-4-087e76eed295> in <module>() 12 import glob 13 #from ssd import build_ssd ---> 14 from ssd import build_ssd 15 from matplotlib import pyplot as plt 16 ImportError: cannot import name 'build_ssd' from 'ssd' (/usr/local/lib/python3.7/dist-packages/ssd.py)

該当のソースコード

PyTorch 学習済みモデルでサクッと物体検出をしてみる
上記のサイトを参考にさせていただきました。
下記は学習済みモデルkanji.pthを使用して物体検出をするプログラムです。

ipynb

1import os 2import sys 3module_path = os.path.abspath(os.path.join('..')) 4if module_path not in sys.path: 5 sys.path.append(module_path) 6 7import torch 8import torch.nn as nn 9from torch.autograd import Variable 10import numpy as np 11import cv2 12import glob 13from ssd import build_ssd 14from matplotlib import pyplot as plt 15 16# SSDモデルを読み込み 17net = build_ssd('test', 300, 4212) 18net.load_weights('/content/drive/MyDrive/Colab Notebooks/Kuzushiji_Visualisation/kanji.pth') 19 20# 関数 detect 21def detect(image, count): 22 rgb_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) 23 x = cv2.resize(image, (300, 300)).astype(np.float32) # 300*300にリサイズ 24 x -= (104.0, 117.0, 123.0) 25 x = x.astype(np.float32) 26 x = x[:, :, ::-1].copy() 27 x = torch.from_numpy(x).permute(2, 0, 1) # [300,300,3]→[3,300,300] 28 xx = Variable(x.unsqueeze(0)) # [3,300,300]→[1,3,300,300] 29 # 順伝播を実行し、推論結果を出力 30 y = net(xx) 31 32 from data import VOC_CLASSES as labels 33 plt.figure(figsize=(10,6)) 34 colors = plt.cm.hsv(np.linspace(0, 1, 21)).tolist() 35 plt.imshow(rgb_image) 36 currentAxis = plt.gca() 37 # 推論結果をdetectionsに格納 38 detections = y.data 39 # scale each detection back up to the image 40 scale = torch.Tensor(rgb_image.shape[1::-1]).repeat(2) 41 42 # バウンディングボックスとクラス名を表示 43 for i in range(detections.size(1)): 44 j = 0 45 # 確信度confが0.6以上のボックスを表示 46 # jは確信度上位200件のボックスのインデックス 47 # detections[0,i,j]は[conf,xmin,ymin,xmax,ymax]の形状 48 while detections[0,i,j,0] >= 0.6: 49 score = detections[0,i,j,0] 50 label_name = labels[i-1] 51 display_txt = '%s: %.2f'%(label_name, score) 52 pt = (detections[0,i,j,1:]*scale).cpu().numpy() 53 coords = (pt[0], pt[1]), pt[2]-pt[0]+1, pt[3]-pt[1]+1 54 color = colors[i] 55 currentAxis.add_patch(plt.Rectangle(*coords, fill=False, edgecolor=color, linewidth=2)) 56 currentAxis.text(pt[0], pt[1], display_txt, bbox={'facecolor':color, 'alpha':0.5}) 57 j+=1 58 plt.savefig('/content/drive/MyDrive/Colab Notebooks/Kuzushiji_Visualisation/detect_img/'+'{0:04d}'.format(count)+'.jpg') 59 plt.close() 60 61def main(): 62 files = sorted(glob.glob('/content/drive/MyDrive/Colab Notebooks/Kuzushiji_Visualisation/image_dir/*.jpg')) 63 count = 1 64 for i, file in enumerate (files): 65 image = cv2.imread(file, cv2.IMREAD_COLOR) 66 detect(image, count) 67 print(count) 68 count +=1 69 70if __name__ == '__main__': 71 main()

試したこと

!git clone https://github.com/amdegroot/ssd.pytorch/blob/master/ssd.py
を実行しクローンを試みたのですが、

--------------------------------------------------------------------------- ModuleNotFoundError Traceback (most recent call last) <ipython-input-7-635fed793525> in <module>() 13 from google.colab import drive 14 drive.mount('/content/drive/') ---> 15 from ssd import build_ssd 16 #!git clone https://github.com/amdegroot/ssd.pytorch/blob/master/ssd.py ModuleNotFoundError: No module named 'ssd'

と出てしまいやはりssdというモジュールが見つかりませんでした。
###動作環境
Google Colaboratory
Python 3.7.11

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

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

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

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

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

jbpb0

2021/08/28 10:02

参考にしてる「http://cedro3.com/ai/pytorch-ssd/」に書かれてる手順は、下記の通りです ・「https://github.com/miyamotok0105/pytorch_handbook」を丸ごと落として展開する ・上記の中にある「chapter7」というディレクトリの中に作業用のディレクトリを作り、そこをPythonコードを実行する際のカレントディレクトリにする (参考Webページでは「demo2」としてますが、ディレクトリ名は何でもいいです) ・「ssd300_mAP_77.43_v2.pth」をダウンロードして、「chapter7」内の「weights」というディレクトリに置く 上記をちゃんとやれば、コードの module_path = os.path.abspath(os.path.join('..')) if module_path not in sys.path: sys.path.append(module_path) によって、カレントディレクトリの1つ上のディレクトリ、すなわち「chapter7」が「sys.path」に追加されるので、そこにある「ssd.py」をimportできるようになります その「ssd.py」には「build_ssd」があるので、「from ssd import build_ssd」ができるはずです > cannot import name 'build_ssd' from 'ssd' (/usr/local/lib/python3.7/dist-packages/ssd.py) 「/usr/local/lib/python3.7/dist-packages/ssd.py」って何? 使う「ssd.py」は、上に書いた通り「chapter7」にある「ssd.py」です それ以外の関係無いものを持ってきて使ってもダメです
sugar_s

2021/08/29 02:12

jbpb0様アドバイスありがとうございます。解決いたしました。 ご指摘いただきましたようにまずは「chapter7」をgoogle driveに丸ごと落として展開し(ssd_model.pyをssd_model.ipynbに変換した後)記事通りの物体検出を試みることにしました。 私はこれまでipynbファイルがおかれている場所がカレントディレクトリに勝手に変更されていると勘違いしていたのですが、ssd_demo.ipynbファイル内でpwdコマンドをするとデフォルトでは[/content/]になっており、module_pathに正しいパスを追加できていなかったことが原因のようです。
jbpb0

2021/08/29 02:18

> module_path = os.path.abspath(os.path.join('..')) を絶対パス指定にしてしまうのでも大丈夫かもしれません
sugar_s

2021/08/29 02:40

jbpb0様返信ありがとうございます。 確かにそのほうがミスが少なさそうなので絶対パス指定にしようと思います。 アドバイスありがとうございます。
guest

回答1

0

自己解決

私はこれまでipynbファイルがおかれている場所がカレントディレクトリに勝手に変更されていると勘違いしていたのですが、ssd_demo.ipynbファイル内でpwdコマンドをするとデフォルトでは[/content/]になっており、module_pathに正しいパスを追加できていなかったことが原因のようです。

UNIX

1cd "ipynbがおかれているフォルダ"

を該当コードの前に追加し解決しました。

投稿2021/08/29 02:14

sugar_s

総合スコア8

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問