pose_net.py
Go to the documentation of this file.
1 from __future__ import print_function
2 
3 import os
4 import itertools, pkg_resources, sys
5 from distutils.version import LooseVersion
6 if LooseVersion(pkg_resources.get_distribution("chainer").version) >= LooseVersion('7.0.0') and \
7  sys.version_info.major == 2:
8  print('''Please install chainer < 7.0.0:
9 
10  sudo pip install chainer==6.7.0
11 
12 c.f https://github.com/jsk-ros-pkg/jsk_recognition/pull/2485
13 ''', file=sys.stderr)
14  sys.exit(1)
15 if [p for p in list(itertools.chain(*[pkg_resources.find_distributions(_) for _ in sys.path])) if "cupy-" in p.project_name ] == []:
16  print('''Please install CuPy
17 
18  sudo pip install cupy-cuda[your cuda version]
19 i.e.
20  sudo pip install cupy-cuda91
21 
22 ''', file=sys.stderr)
23  sys.exit(1)
24 import chainer
25 import chainer.functions as F
26 import chainer.links as L
27 
28 base_url = 'http://posefs1.perception.cs.cmu.edu/OpenPose/models/pose/'
29 models = {
30  'auto': 'coco/pose_iter_440000.chainermodel',
31  'coco': 'coco/pose_iter_440000.chainermodel',
32  'mpi': 'mpi/pose_iter_160000.chainermodel',
33 }
34 
35 
36 class PoseNet(chainer.Chain):
37 
38  def __init__(self, pretrained_model='auto'):
39  super(PoseNet, self).__init__()
40  with self.init_scope():
41  self.conv1_1 = L.Convolution2D(
42  in_channels=3, out_channels=64, ksize=3, stride=1, pad=1)
43  self.conv1_2 = L.Convolution2D(
44  in_channels=64, out_channels=64, ksize=3, stride=1, pad=1)
45  self.conv2_1 = L.Convolution2D(
46  in_channels=64, out_channels=128, ksize=3, stride=1, pad=1)
47  self.conv2_2 = L.Convolution2D(
48  in_channels=128, out_channels=128, ksize=3, stride=1, pad=1)
49  self.conv3_1 = L.Convolution2D(
50  in_channels=128, out_channels=256, ksize=3, stride=1, pad=1)
51  self.conv3_2 = L.Convolution2D(
52  in_channels=256, out_channels=256, ksize=3, stride=1, pad=1)
53  self.conv3_3 = L.Convolution2D(
54  in_channels=256, out_channels=256, ksize=3, stride=1, pad=1)
55  self.conv3_4 = L.Convolution2D(
56  in_channels=256, out_channels=256, ksize=3, stride=1, pad=1)
57  self.conv4_1 = L.Convolution2D(
58  in_channels=256, out_channels=512, ksize=3, stride=1, pad=1)
59  self.conv4_2 = L.Convolution2D(
60  in_channels=512, out_channels=512, ksize=3, stride=1, pad=1)
61  self.conv4_3_CPM = L.Convolution2D(
62  in_channels=512, out_channels=256, ksize=3, stride=1, pad=1)
63  self.conv4_4_CPM = L.Convolution2D(
64  in_channels=256, out_channels=128, ksize=3, stride=1, pad=1)
65 
66  # stage1
67  self.conv5_1_CPM_L1 = L.Convolution2D(
68  in_channels=128, out_channels=128, ksize=3, stride=1, pad=1)
69  self.conv5_2_CPM_L1 = L.Convolution2D(
70  in_channels=128, out_channels=128, ksize=3, stride=1, pad=1)
71  self.conv5_3_CPM_L1 = L.Convolution2D(
72  in_channels=128, out_channels=128, ksize=3, stride=1, pad=1)
73  self.conv5_4_CPM_L1 = L.Convolution2D(
74  in_channels=128, out_channels=512, ksize=1, stride=1, pad=0)
75  self.conv5_5_CPM_L1 = L.Convolution2D(
76  in_channels=512, out_channels=38, ksize=1, stride=1, pad=0)
77  self.conv5_1_CPM_L2 = L.Convolution2D(
78  in_channels=128, out_channels=128, ksize=3, stride=1, pad=1)
79  self.conv5_2_CPM_L2 = L.Convolution2D(
80  in_channels=128, out_channels=128, ksize=3, stride=1, pad=1)
81  self.conv5_3_CPM_L2 = L.Convolution2D(
82  in_channels=128, out_channels=128, ksize=3, stride=1, pad=1)
83  self.conv5_4_CPM_L2 = L.Convolution2D(
84  in_channels=128, out_channels=512, ksize=1, stride=1, pad=0)
85  self.conv5_5_CPM_L2 = L.Convolution2D(
86  in_channels=512, out_channels=19, ksize=1, stride=1, pad=0)
87 
88  # stage2
89  self.Mconv1_stage2_L1 = L.Convolution2D(
90  in_channels=185, out_channels=128, ksize=7, stride=1, pad=3)
91  self.Mconv2_stage2_L1 = L.Convolution2D(
92  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
93  self.Mconv3_stage2_L1 = L.Convolution2D(
94  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
95  self.Mconv4_stage2_L1 = L.Convolution2D(
96  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
97  self.Mconv5_stage2_L1 = L.Convolution2D(
98  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
99  self.Mconv6_stage2_L1 = L.Convolution2D(
100  in_channels=128, out_channels=128, ksize=1, stride=1, pad=0)
101  self.Mconv7_stage2_L1 = L.Convolution2D(
102  in_channels=128, out_channels=38, ksize=1, stride=1, pad=0)
103  self.Mconv1_stage2_L2 = L.Convolution2D(
104  in_channels=185, out_channels=128, ksize=7, stride=1, pad=3)
105  self.Mconv2_stage2_L2 = L.Convolution2D(
106  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
107  self.Mconv3_stage2_L2 = L.Convolution2D(
108  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
109  self.Mconv4_stage2_L2 = L.Convolution2D(
110  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
111  self.Mconv5_stage2_L2 = L.Convolution2D(
112  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
113  self.Mconv6_stage2_L2 = L.Convolution2D(
114  in_channels=128, out_channels=128, ksize=1, stride=1, pad=0)
115  self.Mconv7_stage2_L2 = L.Convolution2D(
116  in_channels=128, out_channels=19, ksize=1, stride=1, pad=0)
117 
118  # stage3
119  self.Mconv1_stage3_L1 = L.Convolution2D(
120  in_channels=185, out_channels=128, ksize=7, stride=1, pad=3)
121  self.Mconv2_stage3_L1 = L.Convolution2D(
122  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
123  self.Mconv3_stage3_L1 = L.Convolution2D(
124  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
125  self.Mconv4_stage3_L1 = L.Convolution2D(
126  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
127  self.Mconv5_stage3_L1 = L.Convolution2D(
128  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
129  self.Mconv6_stage3_L1 = L.Convolution2D(
130  in_channels=128, out_channels=128, ksize=1, stride=1, pad=0)
131  self.Mconv7_stage3_L1 = L.Convolution2D(
132  in_channels=128, out_channels=38, ksize=1, stride=1, pad=0)
133  self.Mconv1_stage3_L2 = L.Convolution2D(
134  in_channels=185, out_channels=128, ksize=7, stride=1, pad=3)
135  self.Mconv2_stage3_L2 = L.Convolution2D(
136  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
137  self.Mconv3_stage3_L2 = L.Convolution2D(
138  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
139  self.Mconv4_stage3_L2 = L.Convolution2D(
140  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
141  self.Mconv5_stage3_L2 = L.Convolution2D(
142  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
143  self.Mconv6_stage3_L2 = L.Convolution2D(
144  in_channels=128, out_channels=128, ksize=1, stride=1, pad=0)
145  self.Mconv7_stage3_L2 = L.Convolution2D(
146  in_channels=128, out_channels=19, ksize=1, stride=1, pad=0)
147 
148  # stage4
149  self.Mconv1_stage4_L1 = L.Convolution2D(
150  in_channels=185, out_channels=128, ksize=7, stride=1, pad=3)
151  self.Mconv2_stage4_L1 = L.Convolution2D(
152  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
153  self.Mconv3_stage4_L1 = L.Convolution2D(
154  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
155  self.Mconv4_stage4_L1 = L.Convolution2D(
156  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
157  self.Mconv5_stage4_L1 = L.Convolution2D(
158  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
159  self.Mconv6_stage4_L1 = L.Convolution2D(
160  in_channels=128, out_channels=128, ksize=1, stride=1, pad=0)
161  self.Mconv7_stage4_L1 = L.Convolution2D(
162  in_channels=128, out_channels=38, ksize=1, stride=1, pad=0)
163  self.Mconv1_stage4_L2 = L.Convolution2D(
164  in_channels=185, out_channels=128, ksize=7, stride=1, pad=3)
165  self.Mconv2_stage4_L2 = L.Convolution2D(
166  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
167  self.Mconv3_stage4_L2 = L.Convolution2D(
168  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
169  self.Mconv4_stage4_L2 = L.Convolution2D(
170  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
171  self.Mconv5_stage4_L2 = L.Convolution2D(
172  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
173  self.Mconv6_stage4_L2 = L.Convolution2D(
174  in_channels=128, out_channels=128, ksize=1, stride=1, pad=0)
175  self.Mconv7_stage4_L2 = L.Convolution2D(
176  in_channels=128, out_channels=19, ksize=1, stride=1, pad=0)
177 
178  # stage5
179  self.Mconv1_stage5_L1 = L.Convolution2D(
180  in_channels=185, out_channels=128, ksize=7, stride=1, pad=3)
181  self.Mconv2_stage5_L1 = L.Convolution2D(
182  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
183  self.Mconv3_stage5_L1 = L.Convolution2D(
184  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
185  self.Mconv4_stage5_L1 = L.Convolution2D(
186  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
187  self.Mconv5_stage5_L1 = L.Convolution2D(
188  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
189  self.Mconv6_stage5_L1 = L.Convolution2D(
190  in_channels=128, out_channels=128, ksize=1, stride=1, pad=0)
191  self.Mconv7_stage5_L1 = L.Convolution2D(
192  in_channels=128, out_channels=38, ksize=1, stride=1, pad=0)
193  self.Mconv1_stage5_L2 = L.Convolution2D(
194  in_channels=185, out_channels=128, ksize=7, stride=1, pad=3)
195  self.Mconv2_stage5_L2 = L.Convolution2D(
196  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
197  self.Mconv3_stage5_L2 = L.Convolution2D(
198  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
199  self.Mconv4_stage5_L2 = L.Convolution2D(
200  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
201  self.Mconv5_stage5_L2 = L.Convolution2D(
202  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
203  self.Mconv6_stage5_L2 = L.Convolution2D(
204  in_channels=128, out_channels=128, ksize=1, stride=1, pad=0)
205  self.Mconv7_stage5_L2 = L.Convolution2D(
206  in_channels=128, out_channels=19, ksize=1, stride=1, pad=0)
207 
208  # stage6
209  self.Mconv1_stage6_L1 = L.Convolution2D(
210  in_channels=185, out_channels=128, ksize=7, stride=1, pad=3)
211  self.Mconv2_stage6_L1 = L.Convolution2D(
212  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
213  self.Mconv3_stage6_L1 = L.Convolution2D(
214  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
215  self.Mconv4_stage6_L1 = L.Convolution2D(
216  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
217  self.Mconv5_stage6_L1 = L.Convolution2D(
218  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
219  self.Mconv6_stage6_L1 = L.Convolution2D(
220  in_channels=128, out_channels=128, ksize=1, stride=1, pad=0)
221  self.Mconv7_stage6_L1 = L.Convolution2D(
222  in_channels=128, out_channels=38, ksize=1, stride=1, pad=0)
223  self.Mconv1_stage6_L2 = L.Convolution2D(
224  in_channels=185, out_channels=128, ksize=7, stride=1, pad=3)
225  self.Mconv2_stage6_L2 = L.Convolution2D(
226  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
227  self.Mconv3_stage6_L2 = L.Convolution2D(
228  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
229  self.Mconv4_stage6_L2 = L.Convolution2D(
230  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
231  self.Mconv5_stage6_L2 = L.Convolution2D(
232  in_channels=128, out_channels=128, ksize=7, stride=1, pad=3)
233  self.Mconv6_stage6_L2 = L.Convolution2D(
234  in_channels=128, out_channels=128, ksize=1, stride=1, pad=0)
235  self.Mconv7_stage6_L2 = L.Convolution2D(
236  in_channels=128, out_channels=19, ksize=1, stride=1, pad=0)
237 
238  if pretrained_model in models.keys():
239  data_dir = chainer.dataset.get_dataset_directory('openpose/pose')
240  model_path = os.path.join(data_dir, models[pretrained_model])
241  try:
242  os.makedirs(os.path.dirname(model_path))
243  except OSError:
244  pass
245  chainer.dataset.cache_or_load_file(
246  model_path,
247  lambda f: _download_pretrained_model(pretrained_model, f),
248  lambda f: f)
249  chainer.serializers.load_npz(model_path, self)
250  elif pretrained_model is not None:
251  if not os.path.exists(pretrained_model):
252  raise OSError('model does not exists: "%s"' % pretrained_model)
253  chainer.serializers.load_npz(pretrained_model, self)
254 
255  def __call__(self, x):
256  heatmaps = []
257  pafs = []
258 
259  h = F.relu(self.conv1_1(x))
260  h = F.relu(self.conv1_2(h))
261  h = F.max_pooling_2d(h, ksize=2, stride=2)
262  h = F.relu(self.conv2_1(h))
263  h = F.relu(self.conv2_2(h))
264  h = F.max_pooling_2d(h, ksize=2, stride=2)
265  h = F.relu(self.conv3_1(h))
266  h = F.relu(self.conv3_2(h))
267  h = F.relu(self.conv3_3(h))
268  h = F.relu(self.conv3_4(h))
269  h = F.max_pooling_2d(h, ksize=2, stride=2)
270  h = F.relu(self.conv4_1(h))
271  h = F.relu(self.conv4_2(h))
272  h = F.relu(self.conv4_3_CPM(h))
273  h = F.relu(self.conv4_4_CPM(h))
274  feature_map = h
275 
276  # stage1
277  h1 = F.relu(self.conv5_1_CPM_L1(feature_map)) # branch1
278  h1 = F.relu(self.conv5_2_CPM_L1(h1))
279  h1 = F.relu(self.conv5_3_CPM_L1(h1))
280  h1 = F.relu(self.conv5_4_CPM_L1(h1))
281  h1 = self.conv5_5_CPM_L1(h1)
282  h2 = F.relu(self.conv5_1_CPM_L2(feature_map)) # branch2
283  h2 = F.relu(self.conv5_2_CPM_L2(h2))
284  h2 = F.relu(self.conv5_3_CPM_L2(h2))
285  h2 = F.relu(self.conv5_4_CPM_L2(h2))
286  h2 = self.conv5_5_CPM_L2(h2)
287  pafs.append(h1)
288  heatmaps.append(h2)
289 
290  # stage2
291  h = F.concat((h1, h2, feature_map), axis=1) # channel concat
292  h1 = F.relu(self.Mconv1_stage2_L1(h)) # branch1
293  h1 = F.relu(self.Mconv2_stage2_L1(h1))
294  h1 = F.relu(self.Mconv3_stage2_L1(h1))
295  h1 = F.relu(self.Mconv4_stage2_L1(h1))
296  h1 = F.relu(self.Mconv5_stage2_L1(h1))
297  h1 = F.relu(self.Mconv6_stage2_L1(h1))
298  h1 = self.Mconv7_stage2_L1(h1)
299  h2 = F.relu(self.Mconv1_stage2_L2(h)) # branch2
300  h2 = F.relu(self.Mconv2_stage2_L2(h2))
301  h2 = F.relu(self.Mconv3_stage2_L2(h2))
302  h2 = F.relu(self.Mconv4_stage2_L2(h2))
303  h2 = F.relu(self.Mconv5_stage2_L2(h2))
304  h2 = F.relu(self.Mconv6_stage2_L2(h2))
305  h2 = self.Mconv7_stage2_L2(h2)
306  pafs.append(h1)
307  heatmaps.append(h2)
308 
309  # stage3
310  h = F.concat((h1, h2, feature_map), axis=1) # channel concat
311  h1 = F.relu(self.Mconv1_stage3_L1(h)) # branch1
312  h1 = F.relu(self.Mconv2_stage3_L1(h1))
313  h1 = F.relu(self.Mconv3_stage3_L1(h1))
314  h1 = F.relu(self.Mconv4_stage3_L1(h1))
315  h1 = F.relu(self.Mconv5_stage3_L1(h1))
316  h1 = F.relu(self.Mconv6_stage3_L1(h1))
317  h1 = self.Mconv7_stage3_L1(h1)
318  h2 = F.relu(self.Mconv1_stage3_L2(h)) # branch2
319  h2 = F.relu(self.Mconv2_stage3_L2(h2))
320  h2 = F.relu(self.Mconv3_stage3_L2(h2))
321  h2 = F.relu(self.Mconv4_stage3_L2(h2))
322  h2 = F.relu(self.Mconv5_stage3_L2(h2))
323  h2 = F.relu(self.Mconv6_stage3_L2(h2))
324  h2 = self.Mconv7_stage3_L2(h2)
325  pafs.append(h1)
326  heatmaps.append(h2)
327 
328  # stage4
329  h = F.concat((h1, h2, feature_map), axis=1) # channel concat
330  h1 = F.relu(self.Mconv1_stage4_L1(h)) # branch1
331  h1 = F.relu(self.Mconv2_stage4_L1(h1))
332  h1 = F.relu(self.Mconv3_stage4_L1(h1))
333  h1 = F.relu(self.Mconv4_stage4_L1(h1))
334  h1 = F.relu(self.Mconv5_stage4_L1(h1))
335  h1 = F.relu(self.Mconv6_stage4_L1(h1))
336  h1 = self.Mconv7_stage4_L1(h1)
337  h2 = F.relu(self.Mconv1_stage4_L2(h)) # branch2
338  h2 = F.relu(self.Mconv2_stage4_L2(h2))
339  h2 = F.relu(self.Mconv3_stage4_L2(h2))
340  h2 = F.relu(self.Mconv4_stage4_L2(h2))
341  h2 = F.relu(self.Mconv5_stage4_L2(h2))
342  h2 = F.relu(self.Mconv6_stage4_L2(h2))
343  h2 = self.Mconv7_stage4_L2(h2)
344  pafs.append(h1)
345  heatmaps.append(h2)
346 
347  # stage5
348  h = F.concat((h1, h2, feature_map), axis=1) # channel concat
349  h1 = F.relu(self.Mconv1_stage5_L1(h)) # branch1
350  h1 = F.relu(self.Mconv2_stage5_L1(h1))
351  h1 = F.relu(self.Mconv3_stage5_L1(h1))
352  h1 = F.relu(self.Mconv4_stage5_L1(h1))
353  h1 = F.relu(self.Mconv5_stage5_L1(h1))
354  h1 = F.relu(self.Mconv6_stage5_L1(h1))
355  h1 = self.Mconv7_stage5_L1(h1)
356  h2 = F.relu(self.Mconv1_stage5_L2(h)) # branch2
357  h2 = F.relu(self.Mconv2_stage5_L2(h2))
358  h2 = F.relu(self.Mconv3_stage5_L2(h2))
359  h2 = F.relu(self.Mconv4_stage5_L2(h2))
360  h2 = F.relu(self.Mconv5_stage5_L2(h2))
361  h2 = F.relu(self.Mconv6_stage5_L2(h2))
362  h2 = self.Mconv7_stage5_L2(h2)
363  pafs.append(h1)
364  heatmaps.append(h2)
365 
366  # stage6
367  h = F.concat((h1, h2, feature_map), axis=1) # channel concat
368  h1 = F.relu(self.Mconv1_stage6_L1(h)) # branch1
369  h1 = F.relu(self.Mconv2_stage6_L1(h1))
370  h1 = F.relu(self.Mconv3_stage6_L1(h1))
371  h1 = F.relu(self.Mconv4_stage6_L1(h1))
372  h1 = F.relu(self.Mconv5_stage6_L1(h1))
373  h1 = F.relu(self.Mconv6_stage6_L1(h1))
374  h1 = self.Mconv7_stage6_L1(h1)
375  h2 = F.relu(self.Mconv1_stage6_L2(h)) # branch2
376  h2 = F.relu(self.Mconv2_stage6_L2(h2))
377  h2 = F.relu(self.Mconv3_stage6_L2(h2))
378  h2 = F.relu(self.Mconv4_stage6_L2(h2))
379  h2 = F.relu(self.Mconv5_stage6_L2(h2))
380  h2 = F.relu(self.Mconv6_stage6_L2(h2))
381  h2 = self.Mconv7_stage6_L2(h2)
382  pafs.append(h1)
383  heatmaps.append(h2)
384 
385  return pafs, heatmaps
386 
387 
388 def _download_pretrained_model(model_type, dest_path):
389  from chainer.links import caffe
390 
391  if os.path.exists(dest_path):
392  raise OSError('destination already exists: %s' % dest_path)
393 
394  basename, ext = os.path.splitext(models[model_type])
395  url = base_url + basename + '.caffemodel'
396  caffe_model_path = chainer.dataset.cached_download(url)
397  if not os.path.exists(caffe_model_path):
398  raise OSError('caffe model does not exist: %s' % caffe_model_path)
399 
400  print('Converting to chainer model')
401  caffe_model = caffe.CaffeFunction(caffe_model_path)
402  chainer_model = PoseNet(pretrained_model=None)
403  for link in chainer_model.links():
404  if not isinstance(link, chainer.Link) or not link.name:
405  continue
406  if eval('chainer_model.{0}.b.shape == caffe_model["{0}"].b.shape'.format(link.name)) and\
407  eval('chainer_model.{0}.W.shape == caffe_model["{0}"].W.shape'.format(link.name)):
408  exec('chainer_model.{0}.W.data = caffe_model["{0}"].W.data'.format(link.name))
409  exec('chainer_model.{0}.b.data = caffe_model["{0}"].b.data'.format(link.name))
410  print('Copied layer {0}'.format(link.name))
411  else:
412  print('Failed to copy layer {0}'.format(link.name))
413 
414  chainer.serializers.save_npz(dest_path, chainer_model)
415  return True
def __init__(self, pretrained_model='auto')
Definition: pose_net.py:38
def _download_pretrained_model(model_type, dest_path)
Definition: pose_net.py:388


jsk_perception
Author(s): Manabu Saito, Ryohei Ueda
autogenerated on Mon May 3 2021 03:03:27