MultiprocessIterator выдает ошибку при изменении batch_size
Я хочу тренировать более быстрый R-CNN с ChainerCV. В качестве первого теста я в основном скопировал предоставленный пример, я изменил только строки, соответствующие набору данных, чтобы использовать свой собственный набор данных. Я проверил, полностью ли функционирует мой набор данных со всеми операциями, описанными в этом руководстве.
Если я запускаю скрипт без изменений, все работает отлично, но если я изменяю batch_size, я получаю сообщение об ошибке. Я попытался увеличить shared_mem со 100 МБ до 1000 МБ, но ошибка не исчезла.
Ошибка при установке batch_size=2:
Exception in main training loop: all the input array dimensions except for the concatenation axis must match exactly
Traceback (most recent call last):
File "/home/cv/anaconda3/envs/chainer/lib/python3.6/site-packages/chainer/training/trainer.py", line 315, in run
update()
File "/home/cv/anaconda3/envs/chainer/lib/python3.6/site-packages/chainer/training/updaters/standard_updater.py", line 165, in update
self.update_core()
File "/home/cv/anaconda3/envs/chainer/lib/python3.6/site-packages/chainer/training/updaters/standard_updater.py", line 171, in update_core
in_arrays = self.converter(batch, self.device)
File "/home/cv/anaconda3/envs/chainer/lib/python3.6/site-packages/chainer/dataset/convert.py", line 134, in concat_examples
[example[i] for example in batch], padding[i])))
File "/home/cv/anaconda3/envs/chainer/lib/python3.6/site-packages/chainer/dataset/convert.py", line 164, in _concat_arrays
return xp.concatenate([array[None] for array in arrays])
Will finalize trainer extensions and updater before reraising the exception.
Traceback (most recent call last):
File "/home/cv/ChainerCV/faster_rcnn/train.py", line 131, in <module>
main()
File "/home/cv/ChainerCV/faster_rcnn/train.py", line 126, in main
trainer.run()
File "/home/cv/anaconda3/envs/chainer/lib/python3.6/site-packages/chainer/training/trainer.py", line 329, in run
six.reraise(*sys.exc_info())
File "/home/cv/anaconda3/envs/chainer/lib/python3.6/site-packages/six.py", line 693, in reraise
raise value
File "/home/cv/anaconda3/envs/chainer/lib/python3.6/site-packages/chainer/training/trainer.py", line 315, in run
update()
File "/home/cv/anaconda3/envs/chainer/lib/python3.6/site-packages/chainer/training/updaters/standard_updater.py", line 165, in update
self.update_core()
File "/home/cv/anaconda3/envs/chainer/lib/python3.6/site-packages/chainer/training/updaters/standard_updater.py", line 171, in update_core
in_arrays = self.converter(batch, self.device)
File "/home/cv/anaconda3/envs/chainer/lib/python3.6/site-packages/chainer/dataset/convert.py", line 134, in concat_examples
[example[i] for example in batch], padding[i])))
File "/home/cv/anaconda3/envs/chainer/lib/python3.6/site-packages/chainer/dataset/convert.py", line 164, in _concat_arrays
return xp.concatenate([array[None] for array in arrays])
ValueError: all the input array dimensions except for the concatenation axis must match exactly
Системная информация:
__Hardware Information__
Machine : x86_64
CPU Name : skylake
Number of accessible CPU cores : 8
__OS Information__
Platform : Linux-4.15.0-45-generic-x86_64-with-debian-stretch-sid
Release : 4.15.0-45-generic
System Name : Linux
Version : #48~16.04.1-Ubuntu SMP Tue Jan 29 18:03:48 UTC 2019
OS specific info : debianstretch/sid
glibc info : glibc 2.10
__CUDA Information__
Found 1 CUDA devices
id 0 b'GeForce GTX 1080' [SUPPORTED]
compute capability: 6.1
pci device id: 0
pci bus id: 1
Summary:
1/1 devices are supported
CUDA driver version : 10000
__Conda Information__
conda_build_version : 3.17.6
conda_env_version : 4.6.3
platform : linux-64
python_version : 3.7.1.final.0
РЕДАКТИРОВАТЬ: При выполнении примера с batch_size = 2 также происходит ошибка.
3 ответа
При попытке исправить ошибку я получил еще одну ошибку.
ValueError: Currently only batch size 1 is supported.
Ожидание, кажется, решение.
Текущая реализация Faster-RCNN не поддерживает многопакетное обучение, но вы можете переписать его, чтобы поддержать его, как показано ниже. https://github.com/knorth55/chainer-light-head-rcnn/blob/master/light_head_rcnn/links/model/light_head_rcnn_train_chain.py
Другой вариант - использовать Faster-RCNN с FPN в ChainerCV. Последняя версия ChainerCV имеет Faster-RCNN с FPN, который поддерживает многопартийное обучение. https://github.com/chainer/chainercv/blob/master/examples/fpn/train_multi.py
self.converter
предполагает, что первый аргумент batch
состоит из входов, которые имеют одинаковую форму. Например, если вы используете набор данных изображения, все изображения должны иметь форму (C, H, W).
Итак, не могли бы вы проверить, что ваш набор данных возвращает изображения одинаковой формы? И если ваш набор данных имеет различные формы изображений, как насчет использования TransformDataset
например https://github.com/chainer/chainercv/blob/df63b74ef20f9d8c830e266881e577dd05c17442/examples/faster_rcnn/train.py?