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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

0回答

1274閲覧

GPU上で、ImageからTensorに変換できません(GluonCV、Mxnet)

gjmwtaptm

総合スコア13

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/11/25 04:40

編集2018/11/25 10:14

前提・実現したいこと

動画を読み取り、gluoncv、mxnetで構築したObject detectionのモデルを使ってフレーム毎に画像の物体認識の推論をしているのですが、エラーが取れません。

該当のソースコード

動画読み込み等のコードは省略しています。

Python

1def retrieve(self,video): 2 retval, image = video.retrieve() 3 if retval: 4 return image 5 else: 6 raise ValueError('retrieve from bad video') 7 8def show(self): 9 10 start_time = time.time() 11 for i in range(self.frame_count): 12 self.video.grab() 13 frame = self.retrieve(self.video) 14 frame = cv2.resize(frame, dsize=(320, 320)) 15 # Actual detection 16 with mx.Context(mx.gpu()): 17 ################### 18 #print(frame.shape)# (320, 320, 3) 19 #image_np = mx.nd.array(frame) 20 #print(image_np.shape)# (320, 320, 3) 21 #print(len(image_np))# 320 22 #image_np_expanded = image_np.expand_dims(0) 23 #print(image_np_expanded.shape)# (1, 320, 320, 3) 24 #class_IDs, scores, bounding_boxs = self.net(image_np_expanded) 25 ################### 26 class_IDs, scores, bounding_boxs, frame = self.detect(frame)## ここでエラーになる 27 28def detect(self,image): 29 image, org = self.transform_test(mx.nd.array(image),self.data_shape, max_size=self.data_shape) 30 class_IDs, scores, bounding_boxs = self.net(image) 31 return class_IDs, scores, bounding_boxs, org 32 33def transform_test(self,imgs, short, max_size=1024, mean=(0.485, 0.456, 0.406), 34 std=(0.229, 0.224, 0.225)): 35 if isinstance(imgs, mx.nd.NDArray): 36 imgs = [imgs] 37 for im in imgs: 38 assert isinstance(im, mx.nd.NDArray), "Expect NDArray, got {}".format(type(im)) 39 40 tensors = [] 41 origs = [] 42 for img in imgs: 43 orig_img = img.asnumpy().astype('uint8') 44 #img = mx.nd.image.to_tensor(img) 45 transformer = transforms.ToTensor() 46 img = transformer(img)## ここでエラーになる 47 img = mx.nd.image.normalize(img, mean=mean, std=std) 48 tensors.append(img.expand_dims(0)) 49 origs.append(orig_img) 50 if len(tensors) == 1: 51 return tensors[0], origs[0] 52 return tensors, origs

エラー内容

mxnet.base.MXNetError: [09:51:33] src/imperative/imperative.cc:79: Operator _image_to_tensor is not implemented for GPU.

GPUだとTensorに変更する事ができないようなのですが、どうすればいいでしょうか?

やってみた事

その1

書き方を変えてみました。

以下をコメントアウトし、
transformer = transforms.ToTensor()
img = transformer(img)

以下をコメントアウトなくしても
#img = mx.nd.image.to_tensor(img)

同等のエラー
mxnet.base.MXNetError: [09:51:33] src/imperative/imperative.cc:79: Operator _image_to_tensor is not implemented for GPU.
が出ます。

その2

tensorに変換しないようにしてみました。

該当のソースコードのclass_IDs, scores, bounding_boxs, frame = self.detect(frame)をコメントアウトして、######で挟んだものをコメントアウトなくすと、以下のエラーになります

mxnet.base.MXNetError: Shape inconsistent, Provided = [32,3,3,3], inferred shape=(32,320,3,3)

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

Python 3.5.5
Opencv 3.4.1

mxnet-cu90 (1.4.0b20181123)
gluoncv (0.3.0)

物体認識のネットワークには下記のネットワークを使っております。
yolo3_darknet53_voc

EC2インスタンス(Deep learning AMI)
GPU:g3.4xlarge

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問