Skip to content

运行yoloe离线量化失败 #1891

@Dimweaker

Description

@Dimweaker

利用example里yoloe的全量化代码,使用自己的数据集进行量化,遇到如下问题

I0803 17:00:04.758946  7608 program_interpreter.cc:212] New Executor is Running.
loading annotations into memory...
Done (t=0.01s)
creating index...
index created!
[08/03 17:00:04] ppdet.data.source.coco INFO: Load [1236 samples valid, 0 samples invalid] in file /root/autodl-tmp/voc_train.json.
W0803 17:00:04.825512  7608 gpu_resources.cc:119] Please NOTE: device: 0, GPU Compute Capability: 8.9, Driver API Version: 12.4, Runtime API Version: 11.3
W0803 17:00:04.827611  7608 gpu_resources.cc:164] device: 0, cuDNN Version: 8.2.
Traceback (most recent call last):
  File "/root/miniconda3/lib/python3.8/site-packages/paddleslim-2.6.0-py3.8.egg/paddleslim/quant/quanter.py", line 617, in quant_post_static
  File "/root/miniconda3/lib/python3.8/site-packages/paddle/static/quantization/post_training_quantization.py", line 315, in __init__
    assert isinstance(
AssertionError: data_loader only accepts `paddle.io.DataLoader`.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "post_quant.py", line 107, in <module>
    main()
  File "post_quant.py", line 80, in main
    quant_post_static(
  File "/root/miniconda3/lib/python3.8/site-packages/paddleslim-2.6.0-py3.8.egg/paddleslim/quant/quanter.py", line 644, in quant_post_static
  File "/root/miniconda3/lib/python3.8/site-packages/paddle/static/quantization/post_training_quantization.py", line 315, in __init__
    assert isinstance(
AssertionError: data_loader only accepts `paddle.io.DataLoader`.

其中,我注意到实例代码里使用的数据加载写法是

def reader_wrapper(reader, input_list):
    def gen():
        for data in reader:
            in_dict = {}
            if isinstance(input_list, list):
                for input_name in input_list:
                    in_dict[input_name] = data[input_name]
            elif isinstance(input_list, dict):
                for input_name in input_list.keys():
                    in_dict[input_list[input_name]] = data[input_name]
            yield in_dict

    return gen

...

    train_loader = create('EvalReader')(reader_cfg['TrainDataset'],
                                        reader_cfg['worker_num'],
                                        return_list=True)

    train_loader = reader_wrapper(train_loader, global_config['input_list'])

最终得到是一个function,这是正确的数据载入写法吗?
是否有reader转为DataLoader的快捷方法?

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions