V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fortytwo
V2EX  ›  机器学习

求助 使用 ddddocr 自训练模型场景下,遇到了 onnxruntime.capi.onnxruntime_pybind11_state.InvalidArgument

  •  
  •   fortytwo · 2 天前 · 231 次点击

    使用 ddddocr 自训练模型场景下,遇到的问题

    (dddd-trainer) PS C:\Users\12460\Documents\project\dddd_trainer> uv run .\test.py
    2025-11-13 00:35:09.0336981 [E:onnxruntime:, sequential_executor.cc:572 onnxruntime::ExecuteKernel] Non-zero status code returned while running SequenceAt node. Name:'n0_424' Status Message: Invalid sequence index (57) specified for sequence of size (57)
    Traceback (most recent call last):
      File "C:\Users\12460\Documents\project\dddd_trainer\test.py", line 14, in <module>
        res = ocr.classification(image)
              ^^^^^^^^^^^^^^^^^^^^^^^^^
      File "C:\Users\12460\Documents\project\dddd_trainer\.venv\Lib\site-packages\ddddocr\__init__.py", line 2643, in classification
        ort_outs = self.__ort_session.run(None, ort_inputs)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "C:\Users\12460\Documents\project\dddd_trainer\.venv\Lib\site-packages\onnxruntime\capi\onnxruntime_inference_collection.py", line 287, in run
        return self._sess.run(output_names, input_feed, run_options)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    onnxruntime.capi.onnxruntime_pybind11_state.InvalidArgument: [ONNXRuntimeError] : 2 : INVALID_ARGUMENT : Non-zero status code returned while running SequenceAt node. Name:'n0_424' Status Message: Invalid sequence index (57) specified for sequence of size (57)
    
    

    测试的训练集数据: https://wwm.lanzoum.com/itczd0b5z3yj

    GitHub: https://github.com/sml2h3/dddd_trainer.git

    # test.py
    import ddddocr
    
    ocr = ddddocr.DdddOcr(
        det=False,
        ocr=False,
        show_ad=False,
        import_onnx_path=r"C:\Users\12460\Documents\project\dddd_trainer\projects\test_2\models\test_2_1.0_23_6000_2025-11-13-00-06-13.onnx",
        charsets_path=r"C:\Users\12460\Documents\project\dddd_trainer\projects\test_2\models\charsets.json",
    )
    
    with open(r"C:\Users\12460\Downloads\1112\new\PKKQ_1578462523867.jpg", "rb") as f:
        image = f.read()
    
    res = ocr.classification(image)
    print(res)
    

    操作日志

    (dddd-trainer) PS C:\Users\12460\Documents\project\dddd_trainer> uv run .\app.py create   test_3
    2025-11-13 00:29:53.496 | INFO     | __main__:__init__:12 -
    Hello baby~
    2025-11-13 00:29:53.497 | INFO     | __main__:create:15 -
    Create Project ----> test_3
    2025-11-13 00:29:53.497 | INFO     | utils.project_manager:create_project:13 - Creating Directory... ----> C:\Users\12460\Documents\project\dddd_trainer\projects\test_3
    2025-11-13 00:29:53.497 | INFO     | utils.project_manager:create_project:20 - Creating Directory... ----> C:\Users\12460\Documents\project\dddd_trainer\projects\test_3\models
    2025-11-13 00:29:53.498 | INFO     | utils.project_manager:create_project:24 - Creating Directory... ----> C:\Users\12460\Documents\project\dddd_trainer\projects\test_3\cache
    2025-11-13 00:29:53.498 | INFO     | utils.project_manager:create_project:28 - Creating Directory... ----> C:\Users\12460\Documents\project\dddd_trainer\projects\test_3\checkpoints
    2025-11-13 00:29:53.498 | INFO     | utils.project_manager:create_project:32 - Creating CRNN Config File... ----> C:\Users\12460\Documents\project\dddd_trainer\projects\test_3\config.yaml
    2025-11-13 00:29:53.500 | INFO     | utils.project_manager:create_project:36 - Create Project Success! ----> test_3
    (dddd-trainer) PS C:\Users\12460\Documents\project\dddd_trainer> uv run .\app.py cache test_3 C:\Users\12460\Downloads\1112\images
    2025-11-13 00:30:10.911 | INFO     | __main__:__init__:12 -
    Hello baby~
    2025-11-13 00:30:10.913 | INFO     | __main__:cache:20 -
    Caching Data ----> test_3
    Path ----> C:\Users\12460\Downloads\1112\images
    2025-11-13 00:30:10.919 | INFO     | utils.cache_data:__get_label_from_name:36 -
    Files number is 8599.
    100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 8599/8599 [00:00<00:00, 1379439.31it/s]
    2025-11-13 00:30:10.926 | INFO     | utils.cache_data:__collect_data:92 -
    Coolect labels is [" ", "1", "D", "Q", "F", "R", "P", "5", "9", "6", "X", "G", "H", "S", "V", "Z", "3", "T", "K", "J", "W", "2", "8", "4", "U", "Y", "E", "I", "C", "B", "L", "A", "7"]
    2025-11-13 00:30:10.929 | INFO     | utils.cache_data:__collect_data:96 -
    Writing Cache Data!
    2025-11-13 00:30:10.929 | INFO     | utils.cache_data:__collect_data:98 -
    Cache Data Number is 8599
    2025-11-13 00:30:10.929 | INFO     | utils.cache_data:__collect_data:99 -
    Writing Train and Val File.
    2025-11-13 00:30:10.931 | INFO     | utils.cache_data:__collect_data:116 -
    Train Data Number is 8342
    2025-11-13 00:30:10.932 | INFO     | utils.cache_data:__collect_data:117 -
    Val Data Number is 257
    (dddd-trainer) PS C:\Users\12460\Documents\project\dddd_trainer> uv run .\app.py train test_3
    2025-11-13 00:30:26.382 | INFO     | __main__:__init__:12 -
    Hello baby~
    2025-11-13 00:30:26.383 | INFO     | __main__:train:26 -
    Start Train ----> test_3
    
    2025-11-13 00:30:26.384 | INFO     | utils.train:__init__:40 -
    Taget:
    min_Accuracy: 0.97
    min_Epoch: 20
    max_Loss: 0.05
    2025-11-13 00:30:26.384 | INFO     | utils.train:__init__:45 -
    USE GPU ----> 0
    2025-11-13 00:30:26.384 | INFO     | utils.train:__init__:52 -
    Search for history checkpoints...
    2025-11-13 00:30:26.384 | INFO     | utils.train:__init__:69 -
    Empty history checkpoints
    2025-11-13 00:30:26.384 | INFO     | utils.train:__init__:71 -
    Building Net...
    C:\Users\12460\Documents\project\dddd_trainer\.venv\Lib\site-packages\torch\nn\modules\rnn.py:123: UserWarning: dropout option adds dropout after all but last recurrent layer, so non-zero dropout expects num_layers greater than 1, but got dropout=0.3 and num_layers=1
      warnings.warn(
    2025-11-13 00:30:26.400 | INFO     | utils.train:__init__:75 - Net(
      (cnn): DdddOcr(
        (cnn): Sequential(
          (conv0): Conv2d(1, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
          (relu0): ReLU(inplace=True)
          (pooling0): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
          (conv1): Conv2d(16, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
          (relu1): ReLU(inplace=True)
          (pooling1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
          (conv2): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
          (batchnorm2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
          (relu2): ReLU(inplace=True)
          (conv3): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
          (relu3): ReLU(inplace=True)
          (pooling2): MaxPool2d(kernel_size=(2, 2), stride=(2, 1), padding=(0, 1), dilation=1, ceil_mode=False)
          (conv4): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
          (batchnorm4): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
          (relu4): ReLU(inplace=True)
          (conv5): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
          (relu5): ReLU(inplace=True)
          (pooling3): MaxPool2d(kernel_size=(2, 2), stride=(2, 1), padding=(0, 1), dilation=1, ceil_mode=False)
          (conv6): Conv2d(128, 128, kernel_size=(2, 2), stride=(1, 1))
          (batchnorm6): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
          (relu6): ReLU(inplace=True)
        )
      )
      (lstm): LSTM(384, 384, dropout=0.3, bidirectional=True)
      (loss): CTCLoss()
      (fc): Linear(in_features=768, out_features=33, bias=True)
    )
    2025-11-13 00:30:26.400 | INFO     | utils.train:__init__:76 -
    Building End
    2025-11-13 00:30:26.509 | INFO     | utils.train:__init__:81 -
    Get Data Loader...
    2025-11-13 00:30:26.510 | INFO     | utils.load_cache:__init__:102 -
    Charsets is [" ", "1", "D", "Q", "F", "R", "P", "5", "9", "6", "X", "G", "H", "S", "V", "Z", "3", "T", "K", "J", "W", "2", "8", "4", "U", "Y", "E", "I", "C", "B", "L", "A", "7"]
    2025-11-13 00:30:26.510 | INFO     | utils.load_cache:__init__:106 -
    Image Resize is [-1, 64]
    2025-11-13 00:30:26.510 | INFO     | utils.load_cache:__init__:118 -
    Image Path is C:\Users\12460\Downloads\1112\images
    2025-11-13 00:30:26.511 | INFO     | utils.load_cache:__init__:25 -
    Reading Cache File... ----> C:\Users\12460\Documents\project\dddd_trainer\projects\test_3\cache\cache.train.tmp
    2025-11-13 00:30:26.512 | INFO     | utils.load_cache:__init__:30 -
    Read Cache File End! Caches Num is 8342.
    2025-11-13 00:30:26.512 | INFO     | utils.load_cache:__init__:25 -
    Reading Cache File... ----> C:\Users\12460\Documents\project\dddd_trainer\projects\test_3\cache\cache.val.tmp
    2025-11-13 00:30:26.513 | INFO     | utils.load_cache:__init__:30 -
    Read Cache File End! Caches Num is 257.
    2025-11-13 00:30:26.513 | INFO     | utils.train:__init__:87 -
    Get Data Loader End!
    2025-11-13 00:30:30.161 | INFO     | utils.train:start:108 - [2025-11-13-00_30_30]      Epoch: 0        Step: 100       LastLoss: 3.5620920658111572    AvgLoss: 4.684982450008392      Lr: 0.01
    2025-11-13 00:30:33.520 | INFO     | utils.train:start:108 - [2025-11-13-00_30_33]      Epoch: 0        Step: 200       LastLoss: 3.629438877105713     AvgLoss: 3.591061780452728      Lr: 0.01
    2025-11-13 00:30:36.940 | INFO     | utils.train:start:108 - [2025-11-13-00_30_36]      Epoch: 1        Step: 300       LastLoss: 3.478365659713745     AvgLoss: 3.574828338623047      Lr: 0.01
    2025-11-13 00:30:40.677 | INFO     | utils.train:start:108 - [2025-11-13-00_30_40]      Epoch: 1        Step: 400       LastLoss: 3.725684881210327     AvgLoss: 3.5830772018432615     Lr: 0.01
    2025-11-13 00:30:44.054 | INFO     | utils.train:start:108 - [2025-11-13-00_30_44]      Epoch: 1        Step: 500       LastLoss: 3.6253044605255127    AvgLoss: 3.5884796619415282     Lr: 0.01
    ...
    2025-11-13 00:33:39.470 | INFO     | utils.train:start:108 - [2025-11-13-00_33_39]      Epoch: 19       Step: 5200      LastLoss: 0.0010958763305097818 AvgLoss: 0.0016259117133449763  Lr: 0.009604
    2025-11-13 00:33:44.079 | INFO     | utils.train:start:108 - [2025-11-13-00_33_44]      Epoch: 20       Step: 5300      LastLoss: 0.0009493848774582148 AvgLoss: 0.0010536348074674606  Lr: 0.009604
    2025-11-13 00:33:48.775 | INFO     | utils.train:start:108 - [2025-11-13-00_33_48]      Epoch: 20       Step: 5400      LastLoss: 0.0010489150881767273 AvgLoss: 0.0012551895825890823  Lr: 0.009604
    2025-11-13 00:33:53.303 | INFO     | utils.train:start:108 - [2025-11-13-00_33_53]      Epoch: 21       Step: 5500      LastLoss: 0.0011606556363403797 AvgLoss: 0.000944445063942112   Lr: 0.009604
    2025-11-13 00:33:57.803 | INFO     | utils.train:start:108 - [2025-11-13-00_33_57]      Epoch: 21       Step: 5600      LastLoss: 0.0007763305329717696 AvgLoss: 0.0009715505503118038  Lr: 0.009604
    2025-11-13 00:34:02.339 | INFO     | utils.train:start:108 - [2025-11-13-00_34_02]      Epoch: 21       Step: 5700      LastLoss: 0.0012899019056931138 AvgLoss: 0.0015180535794934258  Lr: 0.009604
    2025-11-13 00:34:06.902 | INFO     | utils.train:start:108 - [2025-11-13-00_34_06]      Epoch: 22       Step: 5800      LastLoss: 0.0009287762804888189 AvgLoss: 0.0015425046352902428  Lr: 0.009604
    2025-11-13 00:34:11.336 | INFO     | utils.train:start:108 - [2025-11-13-00_34_11]      Epoch: 22       Step: 5900      LastLoss: 0.0007486791582778096 AvgLoss: 0.0011510271998122334  Lr: 0.009604
    2025-11-13 00:34:15.845 | INFO     | utils.train:start:137 - [2025-11-13-00_34_15]      Epoch: 23       Step: 6000      LastLoss: 0.0006851484067738056 AvgLoss: 0.0009158773045055568  Lr: 0.009604    Acc: 1.0
    2025-11-13 00:34:15.846 | INFO     | utils.train:start:143 -
    Training Finished!Exporting Model...
    C:\Users\12460\Documents\project\dddd_trainer\nets\__init__.py:216: UserWarning: # 'dynamic_axes' is not recommended when dynamo=True, and may lead to 'torch._dynamo.exc.UserError: Constraints violated.' Supply the 'dynamic_shapes' argument instead if export is unsuccessful.
      torch.onnx.export(net, dummy_input, graph_path, export_params=True, verbose=False,
    W1113 00:34:16.515000 3024 .venv\Lib\site-packages\torch\onnx\_internal\exporter\_compat.py:114] Setting ONNX exporter to use operator set version 18 because the requested opset_version 12 is a lower version than we have implementations for. Automatic version conversion will be performed, which may not be successful at converting to the requested version. If version conversion is unsuccessful, the opset version of the exported model will be kept at 18. Please consider setting opset_version >=18 to leverage latest ONNX features
    The model version conversion is not supported by the onnxscript version converter and fallback is enabled. The model will be converted using the onnx C API (target version: 12).
    Failed to convert the model to the target version 12 using the ONNX C API. The model was not modified
    Traceback (most recent call last):
      File "C:\Users\12460\Documents\project\dddd_trainer\.venv\Lib\site-packages\onnxscript\version_converter\__init__.py", line 127, in call
        converted_proto = _c_api_utils.call_onnx_api(
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "C:\Users\12460\Documents\project\dddd_trainer\.venv\Lib\site-packages\onnxscript\version_converter\_c_api_utils.py", line 65, in call_onnx_api
        result = func(proto)
                 ^^^^^^^^^^^
      File "C:\Users\12460\Documents\project\dddd_trainer\.venv\Lib\site-packages\onnxscript\version_converter\__init__.py", line 122, in _partial_convert_version
        return onnx.version_converter.convert_version(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "C:\Users\12460\Documents\project\dddd_trainer\.venv\Lib\site-packages\onnx\version_converter.py", line 39, in convert_version
        converted_model_str = C.convert_version(model_str, target_version)
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    RuntimeError: D:\a\onnx\onnx\onnx/version_converter/BaseConverter.h:68: adapter_lookup: Assertion `false` failed: No Adapter From Version $18 for Split
    Skipping constant folding for op Split with multiple outputs.
    Skipping constant folding for op Split with multiple outputs.
    Applied 3 of general pattern rewrite rules.
    Skipping constant folding for op Split with multiple outputs.
    Skipping constant folding for op Split with multiple outputs.
    2025-11-13 00:34:45.655 | INFO     | utils.train:start:159 -
    Export Finished!Using Time: 3.816666666666667min
    (dddd-trainer) PS C:\Users\12460\Documents\project\dddd_trainer> uv run .\test.py
    2025-11-13 00:35:09.0336981 [E:onnxruntime:, sequential_executor.cc:572 onnxruntime::ExecuteKernel] Non-zero status code returned while running SequenceAt node. Name:'n0_424' Status Message: Invalid sequence index (57) specified for sequence of size (57)
    Traceback (most recent call last):
      File "C:\Users\12460\Documents\project\dddd_trainer\test.py", line 14, in <module>
        res = ocr.classification(image)
              ^^^^^^^^^^^^^^^^^^^^^^^^^
      File "C:\Users\12460\Documents\project\dddd_trainer\.venv\Lib\site-packages\ddddocr\__init__.py", line 2643, in classification
        ort_outs = self.__ort_session.run(None, ort_inputs)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "C:\Users\12460\Documents\project\dddd_trainer\.venv\Lib\site-packages\onnxruntime\capi\onnxruntime_inference_collection.py", line 287, in run
        return self._sess.run(output_names, input_feed, run_options)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    onnxruntime.capi.onnxruntime_pybind11_state.InvalidArgument: [ONNXRuntimeError] : 2 : INVALID_ARGUMENT : Non-zero status code returned while running SequenceAt node. Name:'n0_424' Status Message: Invalid sequence index (57) specified for sequence of size (57)
    
    1 条回复
    fortytwo
        1
    fortytwo  
    OP
       2 天前
    已解决

    原因是新版本更新导致模型导出时,不兼容 opset_version=12 ONNX 模型导出。

    使用基础导出器即可。


    import torch._dynamo as dynamo

    dynamo.reset()

    # 使用传统导出器
    torch.onnx.export(
    net,
    dummy_input,
    graph_path,
    export_params=True,
    verbose=False,
    input_names=input_names,
    output_names=output_names,
    dynamic_axes=dynamic_ax,
    opset_version=12,
    do_constant_folding=True,
    dynamo=False,
    operator_export_type=torch.onnx.OperatorExportTypes.ONNX,
    )
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   881 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 20:48 · PVG 04:48 · LAX 12:48 · JFK 15:48
    ♥ Do have faith in what you're doing.