weinman / cnn_lstm_ctc_ocr

Tensorflow-based CNN+LSTM trained with CTC-loss for OCR
GNU General Public License v3.0
498 stars 170 forks source link

image pixel value #22

Closed oftenliu closed 6 years ago

oftenliu commented 6 years ago

excuse me,in function _preprocess_image(image) (Mjsynth.py), why rescale the pixels value to float([-0.5,0.5]) not float([0,1]). can u tell me why? tks

weinman commented 6 years ago

Whereas most activation functions (ReLU, sigmoid, tanh) have their phase change at zero, and random weight initializers tend to be symmetric about this point also, it's best to keep your raw input data nominally centered around zero.

oftenliu commented 6 years ago

so, like Batch Normalization?

oftenliu commented 6 years ago

and another question is that in last layer, the output should be the probability of each char, but you use Relu as activation function. why not softmax

weinman commented 6 years ago

Yes, similar to batch norm. The CTC loss layer utilizes raw scores as their input, taking the softmax internally.

oftenliu commented 6 years ago

ho, i use your project to train my plate data, the num of chars classes is 66,i change the num from 63 to 67 in "logits = model.rnn_layers( features, sequence_length, 66) " [train.py, line number = 178 ],and the failure message occurs like this:

Caused by op 'save/Assign_109', defined at: File "D:/learn/ocr/cnn_lstm_ctc_ocr-master/ocr_cnn_lstm_ctc/src/train.py", line 209, in tf.app.run() File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\platform\app.py", line 126, in run _sys.exit(main(argv)) File "D:/learn/ocr/cnn_lstm_ctc_ocr-master/ocr_cnn_lstm_ctc/src/train.py", line 193, in main save_model_secs=150) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\util\deprecation.py", line 250, in new_func return func(*args, **kwargs) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\training\supervisor.py", line 318, in init self._init_saver(saver=saver) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\training\supervisor.py", line 466, in _init_saver saver = saver_mod.Saver() File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\training\saver.py", line 1338, in init self.build() File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\training\saver.py", line 1347, in build self._build(self._filename, build_save=True, build_restore=True) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\training\saver.py", line 1384, in _build build_save=build_save, build_restore=build_restore) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\training\saver.py", line 835, in _build_internal restore_sequentially, reshape) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\training\saver.py", line 494, in _AddRestoreOps assign_ops.append(saveable.restore(saveable_tensors, shapes)) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\training\saver.py", line 185, in restore self.op.get_shape().is_fully_defined()) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\ops\state_ops.py", line 283, in assign validate_shape=validate_shape) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\ops\gen_state_ops.py", line 63, in assign use_locking=use_locking, name=name) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 787, in _apply_op_helper op_def=op_def) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 3392, in create_op op_def=op_def) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 1718, in init self._traceback = self._graph._extract_stack() # pylint: disable=protected-access

InvalidArgumentError (see above for traceback): Assign requires shapes of both tensors to match. lhs shape= [67] rhs shape= [63] [[Node: save/Assign_109 = Assign[T=DT_FLOAT, _class=["loc:@rnn/logits/bias"], use_locking=true, validate_shape=true, _device="/job:localhost/replica:0/task:0/device:CPU:0"](rnn/logits/bias, save/RestoreV2:109)]]

Traceback (most recent call last): File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 1322, in _do_call return fn(*args) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 1307, in _run_fn options, feed_dict, fetch_list, target_list, run_metadata) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 1409, in _call_tf_sessionrun run_metadata) tensorflow.python.framework.errors_impl.InvalidArgumentError: Assign requires shapes of both tensors to match. lhs shape= [67] rhs shape= [63] [[Node: save/Assign_109 = Assign[T=DT_FLOAT, _class=["loc:@rnn/logits/bias"], use_locking=true, validate_shape=true, _device="/job:localhost/replica:0/task:0/device:CPU:0"](rnn/logits/bias, save/RestoreV2:109)]]

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "D:/learn/ocr/cnn_lstm_ctc_ocr-master/ocr_cnn_lstm_ctc/src/train.py", line 209, in tf.app.run() File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\platform\app.py", line 126, in run _sys.exit(main(argv)) File "D:/learn/ocr/cnn_lstm_ctc_ocr-master/ocr_cnn_lstm_ctc/src/train.py", line 196, in main with sv.managed_session(config=session_config) as sess: File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\contextlib.py", line 81, in enter return next(self.gen) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\training\supervisor.py", line 1000, in managed_session self.stop(close_summary_writer=close_summary_writer) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\training\supervisor.py", line 828, in stop ignore_live_threads=ignore_live_threads) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\training\coordinator.py", line 389, in join six.reraise(*self._exc_info_to_raise) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\six.py", line 693, in reraise raise value File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\training\supervisor.py", line 989, in managed_session start_standard_services=start_standard_services) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\training\supervisor.py", line 726, in prepare_or_wait_for_session init_feed_dict=self._init_feed_dict, init_fn=self._init_fn) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\training\session_manager.py", line 279, in prepare_session config=config) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\training\session_manager.py", line 207, in _restore_checkpoint saver.restore(sess, ckpt.model_checkpoint_path) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\training\saver.py", line 1802, in restore {self.saver_def.filename_tensor_name: save_path}) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 900, in run run_metadata_ptr) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 1135, in _run feed_dict_tensor, options, run_metadata) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 1316, in _do_run run_metadata) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 1335, in _do_call raise type(e)(node_def, op, message) tensorflow.python.framework.errors_impl.InvalidArgumentError: Assign requires shapes of both tensors to match. lhs shape= [67] rhs shape= [63] [[Node: save/Assign_109 = Assign[T=DT_FLOAT, _class=["loc:@rnn/logits/bias"], use_locking=true, validate_shape=true, _device="/job:localhost/replica:0/task:0/device:CPU:0"](rnn/logits/bias, save/RestoreV2:109)]]

Caused by op 'save/Assign_109', defined at: File "D:/learn/ocr/cnn_lstm_ctc_ocr-master/ocr_cnn_lstm_ctc/src/train.py", line 209, in tf.app.run() File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\platform\app.py", line 126, in run _sys.exit(main(argv)) File "D:/learn/ocr/cnn_lstm_ctc_ocr-master/ocr_cnn_lstm_ctc/src/train.py", line 193, in main save_model_secs=150) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\util\deprecation.py", line 250, in new_func return func(*args, **kwargs) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\training\supervisor.py", line 318, in init self._init_saver(saver=saver) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\training\supervisor.py", line 466, in _init_saver saver = saver_mod.Saver() File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\training\saver.py", line 1338, in init self.build() File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\training\saver.py", line 1347, in build self._build(self._filename, build_save=True, build_restore=True) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\training\saver.py", line 1384, in _build build_save=build_save, build_restore=build_restore) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\training\saver.py", line 835, in _build_internal restore_sequentially, reshape) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\training\saver.py", line 494, in _AddRestoreOps assign_ops.append(saveable.restore(saveable_tensors, shapes)) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\training\saver.py", line 185, in restore self.op.get_shape().is_fully_defined()) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\ops\state_ops.py", line 283, in assign validate_shape=validate_shape) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\ops\gen_state_ops.py", line 63, in assign use_locking=use_locking, name=name) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 787, in _apply_op_helper op_def=op_def) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 3392, in create_op op_def=op_def) File "D:\software\cuda\Anaconda2-4.3.1\envs\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 1718, in init self._traceback = self._graph._extract_stack() # pylint: disable=protected-access

InvalidArgumentError (see above for traceback): Assign requires shapes of both tensors to match. lhs shape= [67] rhs shape= [63] [[Node: save/Assign_109 = Assign[T=DT_FLOAT, _class=["loc:@rnn/logits/bias"], use_locking=true, validate_shape=true, _device="/job:localhost/replica:0/task:0/device:CPU:0"](rnn/logits/bias, save/RestoreV2:109)]]

this means i load 67 elements into variable with 63 elements , so my channges is invalid.

can you guide me to change this. thank you very much

weinman commented 6 years ago

@oftenliu I don't have any clear ideas why this would happen. One long-shot possibility is that you'd trained and saved a 63-dim model checkpoint (it's automatic) before making the change. train.py loads an existing checkpointed model (again, automatically), so that could be the case of the discrepancy.

To verify you're starting from scratch, either make sure ROOT/data/model is deleted or you use a different path for the --output flag.

oftenliu commented 6 years ago

Perfectly, As you said,i saved a 63-dim model checkpoint before making the change. You are really something!!! thank you