質問編集履歴

5

タイトル修正

2018/11/25 10:14

投稿

gjmwtaptm
gjmwtaptm

スコア13

test CHANGED
@@ -1 +1 @@
1
- 動画を読み取りObject detectionのモデルを使ってフレーム毎画像の物体認識の推論をしているのすが、エラーが取れません
1
+ GPU上でImageからTensor変換ません(GluonCV、Mxnet)
test CHANGED
File without changes

4

ソースコード修正

2018/11/25 10:13

投稿

gjmwtaptm
gjmwtaptm

スコア13

test CHANGED
File without changes
test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  ```Python
16
16
 
17
- def _retrieve(self,video):
17
+ def retrieve(self,video):
18
18
 
19
19
  retval, image = video.retrieve()
20
20
 
@@ -38,7 +38,7 @@
38
38
 
39
39
  self.video.grab()
40
40
 
41
- frame = self._retrieve(self.video)
41
+ frame = self.retrieve(self.video)
42
42
 
43
43
  frame = cv2.resize(frame, dsize=(320, 320))
44
44
 
@@ -64,11 +64,11 @@
64
64
 
65
65
  ###################
66
66
 
67
- class_IDs, scores, bounding_boxs, frame = self._detect(frame)## ここでエラーになる
67
+ class_IDs, scores, bounding_boxs, frame = self.detect(frame)## ここでエラーになる
68
-
69
-
70
-
68
+
69
+
70
+
71
- def _detect(self,image):
71
+ def detect(self,image):
72
72
 
73
73
  image, org = self.transform_test(mx.nd.array(image),self.data_shape, max_size=self.data_shape)
74
74
 
@@ -178,7 +178,7 @@
178
178
 
179
179
 
180
180
 
181
- 該当のソースコードの`class_IDs, scores, bounding_boxs, frame = self._detect(frame)`をコメントアウトして、######で挟んだものをコメントアウトなくすと、以下のエラーになります
181
+ 該当のソースコードの`class_IDs, scores, bounding_boxs, frame = self.detect(frame)`をコメントアウトして、######で挟んだものをコメントアウトなくすと、以下のエラーになります
182
182
 
183
183
 
184
184
 

3

やってみたこと追加

2018/11/25 10:10

投稿

gjmwtaptm
gjmwtaptm

スコア13

test CHANGED
File without changes
test CHANGED
@@ -46,19 +46,77 @@
46
46
 
47
47
  with mx.Context(mx.gpu()):
48
48
 
49
+ ###################
50
+
49
- print(frame.shape)# (320, 320, 3)
51
+ #print(frame.shape)# (320, 320, 3)
50
-
52
+
51
- image_np = mx.nd.array(frame)
53
+ #image_np = mx.nd.array(frame)
52
-
54
+
53
- print(image_np.shape)# (320, 320, 3)
55
+ #print(image_np.shape)# (320, 320, 3)
54
-
56
+
55
- print(len(image_np))# 320
57
+ #print(len(image_np))# 320
56
-
58
+
57
- image_np_expanded = image_np.expand_dims(0)
59
+ #image_np_expanded = image_np.expand_dims(0)
58
-
60
+
59
- print(image_np_expanded.shape)# (1, 320, 320, 3)
61
+ #print(image_np_expanded.shape)# (1, 320, 320, 3)
60
-
62
+
61
- class_IDs, scores, bounding_boxs = self.net(image_np_expanded)## ここでエラーになる
63
+ #class_IDs, scores, bounding_boxs = self.net(image_np_expanded)
64
+
65
+ ###################
66
+
67
+ class_IDs, scores, bounding_boxs, frame = self._detect(frame)## ここでエラーになる
68
+
69
+
70
+
71
+ def _detect(self,image):
72
+
73
+ image, org = self.transform_test(mx.nd.array(image),self.data_shape, max_size=self.data_shape)
74
+
75
+ class_IDs, scores, bounding_boxs = self.net(image)
76
+
77
+ return class_IDs, scores, bounding_boxs, org
78
+
79
+
80
+
81
+ def transform_test(self,imgs, short, max_size=1024, mean=(0.485, 0.456, 0.406),
82
+
83
+ std=(0.229, 0.224, 0.225)):
84
+
85
+ if isinstance(imgs, mx.nd.NDArray):
86
+
87
+ imgs = [imgs]
88
+
89
+ for im in imgs:
90
+
91
+ assert isinstance(im, mx.nd.NDArray), "Expect NDArray, got {}".format(type(im))
92
+
93
+
94
+
95
+ tensors = []
96
+
97
+ origs = []
98
+
99
+ for img in imgs:
100
+
101
+ orig_img = img.asnumpy().astype('uint8')
102
+
103
+ #img = mx.nd.image.to_tensor(img)
104
+
105
+ transformer = transforms.ToTensor()
106
+
107
+ img = transformer(img)## ここでエラーになる
108
+
109
+ img = mx.nd.image.normalize(img, mean=mean, std=std)
110
+
111
+ tensors.append(img.expand_dims(0))
112
+
113
+ origs.append(orig_img)
114
+
115
+ if len(tensors) == 1:
116
+
117
+ return tensors[0], origs[0]
118
+
119
+ return tensors, origs
62
120
 
63
121
  ```
64
122
 
@@ -68,67 +126,59 @@
68
126
 
69
127
 
70
128
 
71
- ```ここに言語を入力
72
-
73
- File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/mxnet/gluon/block.py", line 540, in __call__
74
-
75
- out = self.forward(*args)
76
-
77
- File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/mxnet/gluon/block.py", line 917, in forward
78
-
79
- return self.hybrid_forward(ndarray, x, *args, **params)
80
-
81
- File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/gluoncv/model_zoo/yolo/yolo3.py", line 325, in hybrid_forward
82
-
83
- x = stage(x)
84
-
85
- File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/mxnet/gluon/block.py", line 540, in __call__
86
-
87
- out = self.forward(*args)
88
-
89
- File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/mxnet/gluon/block.py", line 917, in forward
90
-
91
- return self.hybrid_forward(ndarray, x, *args, **params)
92
-
93
- File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/mxnet/gluon/nn/basic_layers.py", line 117, in hybrid_forward
94
-
95
- x = block(x)
96
-
97
- File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/mxnet/gluon/block.py", line 540, in __call__
98
-
99
- out = self.forward(*args)
100
-
101
- File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/mxnet/gluon/block.py", line 917, in forward
102
-
103
- return self.hybrid_forward(ndarray, x, *args, **params)
104
-
105
- File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/mxnet/gluon/nn/basic_layers.py", line 117, in hybrid_forward
106
-
107
- x = block(x)
108
-
109
- File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/mxnet/gluon/block.py", line 540, in __call__
110
-
111
- out = self.forward(*args)
112
-
113
- File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/mxnet/gluon/block.py", line 917, in forward
114
-
115
- return self.hybrid_forward(ndarray, x, *args, **params)
116
-
117
- File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/mxnet/gluon/nn/conv_layers.py", line 133, in hybrid_forward
118
-
119
- act = getattr(F, self._op_name)(x, weight, name='fwd', **self._kwargs)
120
-
121
- File "<string>", line 167, in Convolution
122
-
123
- File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/mxnet/_ctypes/ndarray.py", line 92, in _imperative_invoke
124
-
125
- ctypes.byref(out_stypes)))
126
-
127
- File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/mxnet/base.py", line 252, in check_call
128
-
129
- raise MXNetError(py_str(_LIB.MXGetLastError()))
130
-
131
- ```
129
+ `mxnet.base.MXNetError: [09:51:33] src/imperative/imperative.cc:79: Operator _image_to_tensor is not implemented for GPU.`
130
+
131
+
132
+
133
+ GPUだとTensorに変更する事ができないようなのですが、どうすればいいでしょうか?
134
+
135
+
136
+
137
+ ## やってみた事
138
+
139
+
140
+
141
+ ### その1
142
+
143
+
144
+
145
+ 書き方を変えてみました。
146
+
147
+
148
+
149
+ 以下をコメントアウトし、
150
+
151
+ `transformer = transforms.ToTensor()`
152
+
153
+ `img = transformer(img)`
154
+
155
+
156
+
157
+ 以下をコメントアウトなくしても
158
+
159
+ `#img = mx.nd.image.to_tensor(img)`
160
+
161
+
162
+
163
+ 同等のエラー
164
+
165
+ `mxnet.base.MXNetError: [09:51:33] src/imperative/imperative.cc:79: Operator _image_to_tensor is not implemented for GPU.`
166
+
167
+ が出ます。
168
+
169
+
170
+
171
+
172
+
173
+ ### その2
174
+
175
+
176
+
177
+ tensorに変換しないようにしてみました。
178
+
179
+
180
+
181
+ 該当のソースコードの`class_IDs, scores, bounding_boxs, frame = self._detect(frame)`をコメントアウトして、######で挟んだものをコメントアウトなくすと、以下のエラーになります
132
182
 
133
183
 
134
184
 
@@ -136,10 +186,6 @@
136
186
 
137
187
 
138
188
 
139
- まず`[]`と`()`でなぜずれているのでしょうか?
140
-
141
- また、`(32,320,3,3)`で`32`,`320`,`3`,`3`はそれぞれ何を意味しているのでしょうか?
142
-
143
189
 
144
190
 
145
191
 

2

エラー内容追加

2018/11/25 10:07

投稿

gjmwtaptm
gjmwtaptm

スコア13

test CHANGED
File without changes
test CHANGED
@@ -68,6 +68,70 @@
68
68
 
69
69
 
70
70
 
71
+ ```ここに言語を入力
72
+
73
+ File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/mxnet/gluon/block.py", line 540, in __call__
74
+
75
+ out = self.forward(*args)
76
+
77
+ File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/mxnet/gluon/block.py", line 917, in forward
78
+
79
+ return self.hybrid_forward(ndarray, x, *args, **params)
80
+
81
+ File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/gluoncv/model_zoo/yolo/yolo3.py", line 325, in hybrid_forward
82
+
83
+ x = stage(x)
84
+
85
+ File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/mxnet/gluon/block.py", line 540, in __call__
86
+
87
+ out = self.forward(*args)
88
+
89
+ File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/mxnet/gluon/block.py", line 917, in forward
90
+
91
+ return self.hybrid_forward(ndarray, x, *args, **params)
92
+
93
+ File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/mxnet/gluon/nn/basic_layers.py", line 117, in hybrid_forward
94
+
95
+ x = block(x)
96
+
97
+ File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/mxnet/gluon/block.py", line 540, in __call__
98
+
99
+ out = self.forward(*args)
100
+
101
+ File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/mxnet/gluon/block.py", line 917, in forward
102
+
103
+ return self.hybrid_forward(ndarray, x, *args, **params)
104
+
105
+ File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/mxnet/gluon/nn/basic_layers.py", line 117, in hybrid_forward
106
+
107
+ x = block(x)
108
+
109
+ File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/mxnet/gluon/block.py", line 540, in __call__
110
+
111
+ out = self.forward(*args)
112
+
113
+ File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/mxnet/gluon/block.py", line 917, in forward
114
+
115
+ return self.hybrid_forward(ndarray, x, *args, **params)
116
+
117
+ File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/mxnet/gluon/nn/conv_layers.py", line 133, in hybrid_forward
118
+
119
+ act = getattr(F, self._op_name)(x, weight, name='fwd', **self._kwargs)
120
+
121
+ File "<string>", line 167, in Convolution
122
+
123
+ File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/mxnet/_ctypes/ndarray.py", line 92, in _imperative_invoke
124
+
125
+ ctypes.byref(out_stypes)))
126
+
127
+ File "/home/ubuntu/anaconda3/envs/mxnet_p36/lib/python3.6/site-packages/mxnet/base.py", line 252, in check_call
128
+
129
+ raise MXNetError(py_str(_LIB.MXGetLastError()))
130
+
131
+ ```
132
+
133
+
134
+
71
135
  `mxnet.base.MXNetError: Shape inconsistent, Provided = [32,3,3,3], inferred shape=(32,320,3,3)`
72
136
 
73
137
 

1

該当のソースコードの追加

2018/11/25 04:50

投稿

gjmwtaptm
gjmwtaptm

スコア13

test CHANGED
File without changes
test CHANGED
@@ -14,6 +14,20 @@
14
14
 
15
15
  ```Python
16
16
 
17
+ def _retrieve(self,video):
18
+
19
+ retval, image = video.retrieve()
20
+
21
+ if retval:
22
+
23
+ return image
24
+
25
+ else:
26
+
27
+ raise ValueError('retrieve from bad video')
28
+
29
+
30
+
17
31
  def show(self):
18
32
 
19
33
 
@@ -27,8 +41,6 @@
27
41
  frame = self._retrieve(self.video)
28
42
 
29
43
  frame = cv2.resize(frame, dsize=(320, 320))
30
-
31
- sec = i*self.frame_sec
32
44
 
33
45
  # Actual detection
34
46