VOCBboxDataset
to match your own dataset. It just needs to return the image and bboxes.
[Satoshi Tsutsui, chainer] I had to read some source codes for just applying a off-the-shelf model onto my problem, which might indicate the lack of documentation. Here's the point I got stuck:
Prepare Dataset: VOCBboxDataset is not designed for general object detection dataset. Probably we need general class that works for any kind of bounding box based detection dataset.
Evaluate: There's some tricks you need to keep in mind when you evaluate. In default, it estimate lower mAP. See chainer/chainercv#624
Nice Tutorial: I strongly agree with this issue: chainer/chainercv#391 It's nice if we have a tutorial on how to train our own object detector, not just to use PASCAL VOC.
Also, similar to image classification example, it's nice if we can make a single training script that can switch multiple models in command line argument, which is what I want to do. I'll make this an issue.
(3, 336, 596) float32
(3, 336, 596) float32
(3, 336, 596) float32
(3, 336, 596) float32
(3, 336, 596) float32
(3, 336, 596) float32
(3, 336, 596) float32
(3, 336, 596) float32
(3, 336, 596) float32
(3, 336, 596) float32
(3, 336, 596) float32
(3, 336, 596) float32
(3, 336, 596) float32
(3, 336, 596) float32
(3, 336, 596) float32
(3, 336, 596) float32
(3, 336, 596) float32
Exception in main training loop: list indices must be integers or slices, not NoneType
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/chainer/training/trainer.py", line 316, in run
update()
File "/usr/local/lib/python3.6/dist-packages/chainer/training/updaters/standard_updater.py", line 175, in update
self.update_core()
File "/usr/local/lib/python3.6/dist-packages/chainer/training/updaters/standard_updater.py", line 181, in update_core
in_arrays = convert._call_converter(self.converter, batch, self.device)
File "/usr/local/lib/python3.6/dist-packages/chainer/dataset/convert.py", line 73, in _call_converter
return converter(batch, device)
File "/usr/local/lib/python3.6/dist-packages/chainer/dataset/convert.py", line 58, in wrap_call
return func(args, *kwargs)
File "/usr/local/lib/python3.6/dist-packages/chainer/dataset/convert.py", line 223, in concat_examples
[example[i] for example in batch], padding[i])))
File "/usr/local/lib/python3.6/dist-packages/chainer/dataset/convert.py", line 254, in _concat_arrays
[array[None] for array in arrays])
File "/usr/local/lib/python3.6/dist-packages/chainer/dataset/convert.py", line 254, in <listcomp>
[array[None] for array in arrays])
Will finalize trainer extensions and updater before reraising the exception.
(3, 336, 596) float32
(3, 336, 596) float32
(3, 336, 596) float32
(3, 336, 596) float32
(3, 336, 596) float32
(3, 336, 596) float32
(3, 336, 596) float32
(3, 336, 596) float32
(3, 336, 596) float32
(3, 336, 596) float32
(3, 336, 596) float32
(3, 336, 596) float32
(3, 336, 596) float32
(3, 336, 596) float32
TypeError Traceback (most recent call last)
<ipython-input-55-041e2033e90a> in <module>()
----> 1 trainer.run()
9 frames
/usr/local/lib/python3.6/dist-packages/chainer/training/trainer.py in run(self, show_loop_exception_msg)
347 f.write('Traceback (most recent call last):\n')
348 traceback.print_tb(sys.exc_info()[2])
--> 349 six.reraise(*excinfo)
350 finally:
351 for , entry in extensions:
/usr/local/lib/python3.6/dist-packages/six.py in reraise(tp, value, tb)
691 if value.traceback is not tb:
692 raise value.with_traceback(tb)
--> 693 raise value
694 finally:
695 value = None
/usr/local/lib/python3.6/dist-packages/chainer/training/trainer.py in run(self, show_loop_exception_msg)
314 self.observation = {}
315 with reporter.scope(self.observation):
--> 316 update()
317 for name, entry in extensions:
318 if entry.trigger(self):
/usr/local/lib/python3.6/dist-packages/chainer/training/updaters/standard_updater.py in update(self)
173
174 """
--> 175 self.update_core()
176 self.iteration += 1
177
/usr/local/lib/python3.6/dist-packages/chainer/training/updaters/standard_updater.py in update_core(self)
179 iterator = self._iterators['main']
180 batch = iterator.next()
--> 181 in_arrays = convert._call_converter(self.converter, batch, self.device)
182
183 optimizer = self._optimizers['main']
/usr/local/lib/python3.6/dist-packages/chainer/dataset/convert.py in _call_converter(converter, batch, device)
71 if getattr(converter, '__is_decorated_converter', False):
72 # New-style converter
---> 73 return