前提・実現したいこと
動画を読み取り、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
あなたの回答
tips
プレビュー