tiny-yolo-vocを再トレーニングして、 person
オブジェクトのみを取得しようとしています。 GTX 750Tiを搭載したWindowsで使用しています。 ResourceExhaustedError
を取得していましたが、 --gpu 0.7
と--batch 4
を使用したため、エラーはなくなりました。 今、私はリシェイプ関数に関連してこのエラーが発生しています。
Statistics:
person: 5227
Dataset size: 4952
Dataset of 4952 instance(s)
Training statistics:
Learning rate : 1e-05
Batch size : 4
Epoch number : 1000
Backup every : 2000
2017-12-07 10:04:29.378250: W C:\tf_jenkins\home\workspace\rel-win\M\windows-gpu
\PY\35\tensorflow\core\common_runtime\bfc_allocator.cc:217] Allocator (GPU_0_bfc
) ran out of memory trying to allocate 1.15GiB. The caller indicates that this i
s not a failure, but may mean that there could be performance gains if more memo
ry is available.
2017-12-07 10:04:29.444254: W C:\tf_jenkins\home\workspace\rel-win\M\windows-gpu
\PY\35\tensorflow\core\common_runtime\bfc_allocator.cc:217] Allocator (GPU_0_bfc
) ran out of memory trying to allocate 2.29GiB. The caller indicates that this i
s not a failure, but may mean that there could be performance gains if more memo
ry is available.
Traceback (most recent call last):
File "C:\Users\Lucas\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\py
thon\client\session.py", line 1323, in _do_call
return fn(*args)
File "C:\Users\Lucas\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\py
thon\client\session.py", line 1302, in _run_fn
status, run_metadata)
File "C:\Users\Lucas\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\py
thon\framework\errors_impl.py", line 473, in __exit__
c_api.TF_GetCode(self.status.status))
tensorflow.python.framework.errors_impl.InvalidArgumentError: Input to reshape i
s a tensor with 84500 values, but the requested shape requires a multiple of 507
0
[[Node: Reshape = Reshape[T=DT_FLOAT, Tshape=DT_INT32, _device="/job:lo
calhost/replica:0/task:0/device:GPU:0"](BiasAdd_8, Reshape/shape)]]
[[Node: mul_17/_57 = _Recv[client_terminated=false, recv_device="/job:l
ocalhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/t
ask:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_972_mul_17", t
ensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "flow", line 6, in <module>
cliHandler(sys.argv)
File "C:\tandera\yolo\darkflow\cli.py", line 29, in cliHandler
print('Enter training ...'); tfnet.train()
File "C:\tandera\yolo\darkflow\net\flow.py", line 52, in train
fetched = self.sess.run(fetches, feed_dict)
File "C:\Users\Lucas\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\py
thon\client\session.py", line 889, in run
run_metadata_ptr)
File "C:\Users\Lucas\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\py
thon\client\session.py", line 1120, in _run
feed_dict_tensor, options, run_metadata)
File "C:\Users\Lucas\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\py
thon\client\session.py", line 1317, in _do_run
options, run_metadata)
File "C:\Users\Lucas\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\py
thon\client\session.py", line 1336, in _do_call
raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.InvalidArgumentError: Input to reshape i
s a tensor with 84500 values, but the requested shape requires a multiple of 507
0
[[Node: Reshape = Reshape[T=DT_FLOAT, Tshape=DT_INT32, _device="/job:lo
calhost/replica:0/task:0/device:GPU:0"](BiasAdd_8, Reshape/shape)]]
[[Node: mul_17/_57 = _Recv[client_terminated=false, recv_device="/job:l
ocalhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/t
ask:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_972_mul_17", t
ensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]
Caused by op 'Reshape', defined at:
File "flow", line 6, in <module>
cliHandler(sys.argv)
File "C:\tandera\yolo\darkflow\cli.py", line 22, in cliHandler
tfnet = TFNet(FLAGS)
File "C:\tandera\yolo\darkflow\net\build.py", line 76, in __init__
self.setup_meta_ops()
File "C:\tandera\yolo\darkflow\net\build.py", line 139, in setup_meta_ops
if self.FLAGS.train: self.build_train_op()
File "C:\tandera\yolo\darkflow\net\help.py", line 15, in build_train_op
self.framework.loss(self.out)
File "C:\tandera\yolo\darkflow\net\yolov2\train.py", line 56, in loss
net_out_reshape = tf.reshape(net_out, [-1, H, W, B, (4 + 1 + C)])
File "C:\Users\Lucas\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\py
thon\ops\gen_array_ops.py", line 3937, in reshape
"Reshape", tensor=tensor, shape=shape, name=name)
File "C:\Users\Lucas\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\py
thon\framework\op_def_library.py", line 787, in _apply_op_helper
op_def=op_def)
File "C:\Users\Lucas\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\py
thon\framework\ops.py", line 2956, in create_op
op_def=op_def)
File "C:\Users\Lucas\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\py
thon\framework\ops.py", line 1470, in __init__
self._traceback = self._graph._extract_stack() # pylint: disable=protected-
access
InvalidArgumentError (see above for traceback): Input to reshape is a tensor wit
h 84500 values, but the requested shape requires a multiple of 5070
[[Node: Reshape = Reshape[T=DT_FLOAT, Tshape=DT_INT32, _device="/job:lo
calhost/replica:0/task:0/device:GPU:0"](BiasAdd_8, Reshape/shape)]]
[[Node: mul_17/_57 = _Recv[client_terminated=false, recv_device="/job:l
ocalhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/t
ask:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_972_mul_17", t
ensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]
どうすればこれを修正できますか?
私の記憶が正しければ、形状変更エラーは、.weightsファイルと.cfgファイルが正しく整列されていない場合です。 prografas行の読み取り方法では、このエラーが返されます。
私の提案:自分のデータセットでトレーニングしているときにフィルターをいじっていない限り、これは使用している.weightsファイルと.cfgファイルに問題がある可能性があります。 便利な.cfgファイルはすべてすでに.cfgフォルダーにあるので、新しいウェイトをダウンロードして再試行してください。最終的に機能したのは、単にyolo.weightsとyolo.cfgでした。
仕事に取り掛かりました! 式 `filters = num *(#classes + 5)を使用して、最後のレイヤーのフィルターの数を変更する必要があります。
@lucasharadaフィルターのnumとは= num *(#classes + 5)。?
それを解決する方法を見つけました。 私の場合、間違った畳み込み層のフィルターを変更していることに気づきませんでした。 独自のデータでトレーニングするには、クラスの数を変更するだけでなく、構成ファイルの最後の畳み込み層を変更する必要があります。
@Estapraq numは、構成ファイルの最後のレイヤーである[region]レイヤーの属性num
を
numは、yolo @ Estapraqの以前のアンカーの数です。
@Estapraqそのステートメントのnumは、構成ファイルの最後の[region]セクションにあります。 私の場合、これはyolo.cfgの246行目にあり、num = 5でした。
最も参考になるコメント
仕事に取り掛かりました! 式 `filters = num *(#classes + 5)を使用して、最後のレイヤーのフィルターの数を変更する必要があります。