前提・実現したいこと
現在、セマンティックセグメンテーションを用いた物体検出を勉強しています。
そこで、https://japan-medical-ai.github.io/medical-ai-course-materials/notebooks/05_Image_Segmentation.htmlを参照して、サイト通りにMRI画像から左心室を検出するモデルを実践したところ、うまく動作させることができました。
しかし、この学習モデルを使用して自前の別のデータセットで試しましたが、エラーが出てしまいます。
エラーコードで検索を行ったのですが、自分の勉強不足で理解できず、原因の究明・解決ができませんでした。
上記サイトで用いているデータセットは、元画像:256×256のグレースケール(PNG)、ラベル画像:256×256の2値画像(PNG)です。
また、自前で用意したデータセットは、元画像:64×64のグレースケール(PNG)、ラベル画像:64×64の2値画像(PNG)です。
実行コード
Python
1%%time 2trainer = create_trainer(16, train, val, (20, 'epoch'), device=0) 3trainer.run()
エラーメッセージ
Python
1Exception in main training loop: all the input array dimensions for the concatenation axis must match exactly, but along dimension 1, the array at index 0 has size 4 and the array at index 3 has size 1 2Traceback (most recent call last): 3 File "/usr/local/lib/python3.6/dist-packages/chainer/training/trainer.py", line 316, in run 4 update() 5 File "/usr/local/lib/python3.6/dist-packages/chainer/training/updaters/standard_updater.py", line 175, in update 6 self.update_core() 7 File "/usr/local/lib/python3.6/dist-packages/chainer/training/updaters/standard_updater.py", line 181, in update_core 8 in_arrays = convert._call_converter(self.converter, batch, self.device) 9 File "/usr/local/lib/python3.6/dist-packages/chainer/dataset/convert.py", line 73, in _call_converter 10 return converter(batch, device) 11 File "/usr/local/lib/python3.6/dist-packages/chainer/dataset/convert.py", line 58, in wrap_call 12 return func(*args, **kwargs) 13 File "/usr/local/lib/python3.6/dist-packages/chainer/dataset/convert.py", line 223, in concat_examples 14 [example[i] for example in batch], padding[i]))) 15 File "/usr/local/lib/python3.6/dist-packages/chainer/dataset/convert.py", line 254, in _concat_arrays 16 [array[None] for array in arrays]) 17 File "<__array_function__ internals>", line 6, in concatenate 18Will finalize trainer extensions and updater before reraising the exception. 19--------------------------------------------------------------------------- 20ValueError Traceback (most recent call last) 21<ipython-input-13-d8605bf9739d> in <module>() 22----> 1 get_ipython().run_cell_magic('time', '', "trainer = create_trainer(16, train, val, (20, 'epoch'), device=0)\ntrainer.run()") 23 24/usr/local/lib/python3.6/dist-packages/IPython/core/interactiveshell.py in run_cell_magic(self, magic_name, line, cell) 25 2115 magic_arg_s = self.var_expand(line, stack_depth) 26 2116 with self.builtin_trap: 27-> 2117 result = fn(magic_arg_s, cell) 28 2118 return result 29 2119 30 31</usr/local/lib/python3.6/dist-packages/decorator.py:decorator-gen-60> in time(self, line, cell, local_ns) 32 33/usr/local/lib/python3.6/dist-packages/IPython/core/magic.py in <lambda>(f, *a, **k) 34 186 # but it's overkill for just that one bit of state. 35 187 def magic_deco(arg): 36--> 188 call = lambda f, *a, **k: f(*a, **k) 37 189 38 190 if callable(arg): 39 40/usr/local/lib/python3.6/dist-packages/IPython/core/magics/execution.py in time(self, line, cell, local_ns) 41 1191 else: 42 1192 st = clock2() 43-> 1193 exec(code, glob, local_ns) 44 1194 end = clock2() 45 1195 out = None 46 47<timed exec> in <module>() 48 49/usr/local/lib/python3.6/dist-packages/chainer/training/trainer.py in run(self, show_loop_exception_msg) 50 347 f.write('Traceback (most recent call last):\n') 51 348 traceback.print_tb(sys.exc_info()[2]) 52--> 349 six.reraise(*exc_info) 53 350 finally: 54 351 for _, entry in extensions: 55 56/usr/local/lib/python3.6/dist-packages/six.py in reraise(tp, value, tb) 57 691 if value.__traceback__ is not tb: 58 692 raise value.with_traceback(tb) 59--> 693 raise value 60 694 finally: 61 695 value = None 62 63/usr/local/lib/python3.6/dist-packages/chainer/training/trainer.py in run(self, show_loop_exception_msg) 64 314 self.observation = {} 65 315 with reporter.scope(self.observation): 66--> 316 update() 67 317 for name, entry in extensions: 68 318 if entry.trigger(self): 69 70/usr/local/lib/python3.6/dist-packages/chainer/training/updaters/standard_updater.py in update(self) 71 173 72 174 """ 73--> 175 self.update_core() 74 176 self.iteration += 1 75 177 76 77/usr/local/lib/python3.6/dist-packages/chainer/training/updaters/standard_updater.py in update_core(self) 78 179 iterator = self._iterators['main'] 79 180 batch = iterator.next() 80--> 181 in_arrays = convert._call_converter(self.converter, batch, self.device) 81 182 82 183 optimizer = self._optimizers['main'] 83 84/usr/local/lib/python3.6/dist-packages/chainer/dataset/convert.py in _call_converter(converter, batch, device) 85 71 if getattr(converter, '__is_decorated_converter', False): 86 72 # New-style converter 87---> 73 return converter(batch, device) 88 74 89 75 # Old-style converter 90 91/usr/local/lib/python3.6/dist-packages/chainer/dataset/convert.py in wrap_call(*args, **kwargs) 92 56 elif 'device' in kwargs: 93 57 kwargs['device'] = _get_device(kwargs['device']) 94---> 58 return func(*args, **kwargs) 95 59 96 60 return wrap_call 97 98/usr/local/lib/python3.6/dist-packages/chainer/dataset/convert.py in concat_examples(batch, device, padding) 99 221 for i in six.moves.range(len(first_elem)): 100 222 result.append(to_device(device, _concat_arrays( 101--> 223 [example[i] for example in batch], padding[i]))) 102 224 103 225 return tuple(result) 104 105/usr/local/lib/python3.6/dist-packages/chainer/dataset/convert.py in _concat_arrays(arrays, padding) 106 252 with chainer.using_device(device): 107 253 arr_concat = device.xp.concatenate( 108--> 254 [array[None] for array in arrays]) 109 255 110 256 return arr_concat 111 112<__array_function__ internals> in concatenate(*args, **kwargs) 113 114ValueError: all the input array dimensions for the concatenation axis must match exactly, but along dimension 1, the array at index 0 has size 4 and the array at index 3 has size 1
参照元プログラムからの変更点
Python
1def create_trainer(batchsize, train, val, stop, device=-1): 2 # 先程定義したモデルを使用 3 model = MultiLayerPerceptron(out_h=256, out_w=256)
MultiLayerPerceptronの引数を256から64に変更しています。
補足情報(FW/ツールのバージョンなど)
使用しているデータセットと上記変更点以外は参照元のプログラムをそのまま使用させていただきました。
環境構築などもすべて同一のものを使用しています。
https://japan-medical-ai.github.io/medical-ai-course-materials/notebooks/05_Image_Segmentation.html
あなたの回答
tips
プレビュー