Xilinx / Vitis-AI

Vitis AI is Xilinx’s development stack for AI inference on Xilinx hardware platforms, including both edge devices and Alveo cards.
https://www.xilinx.com/ai
Apache License 2.0
1.47k stars 630 forks source link

quant for SegNet encount problem #970

Closed DeepTrial closed 1 year ago

DeepTrial commented 2 years ago

Vitis-ai tool has generate the converted segnet mode(attachment)l, however the following error jump out:

File "optimizor.py", line 143, in <module>
    quantization(title=title, model_name=model_name)
  File "optimizor.py", line 110, in quantization
    mean_iou = evaluate(quant_model, 224)
  File "/workspace/Newrizon/evalution/Segmentation-Pytorch/load_model.py", line 92, in evaluate
    save_result=True)
  File "/workspace/Newrizon/evalution/Segmentation-Pytorch/builders/validation_builder.py", line 214, in predict_multiscale_sliding
    tile_output = model(tile_image)
  File "/opt/vitis_ai/conda/envs/vitis-ai-pytorch/lib/python3.7/site-packages/torch/nn/modules/module.py", line 1102, in _call_impl
    return forward_call(*input, **kwargs)
  File "quantize_result/SegNet.py", line 89, in forward
    output_module_7_0,output_module_7_1 = self.module_7(output_module_0)
  File "/opt/vitis_ai/conda/envs/vitis-ai-pytorch/lib/python3.7/site-packages/torch/nn/modules/module.py", line 1102, in _call_impl
    return forward_call(*input, **kwargs)
  File "/opt/vitis_ai/conda/envs/vitis-ai-pytorch/lib/python3.7/site-packages/pytorch_nndct/nn/modules/maxpool.py", line 40, in forward
    output = quantize_tensors([output], self.node)[0]
  File "/opt/vitis_ai/conda/envs/vitis-ai-pytorch/lib/python3.7/site-packages/nndct_shared/quantization/utils.py", line 91, in quantize_tensors
    tensor_type))
  File "/opt/vitis_ai/conda/envs/vitis-ai-pytorch/lib/python3.7/site-packages/pytorch_nndct/quantization/torchquantizer.py", line 115, in do_scan
    if isinstance(res.values, torch.Tensor):
AttributeError: 'tuple' object has no attribute 'values'

SegNet.zip

kewang-xlnx commented 2 years ago

Hi @DeepTrial. Quantization of Maxpool2d operator with parameter "return_indices=True" is not supported in recent vitis-ai tool. It will be supported in Vitis-AI 3.0.

HuiJu1218 commented 2 years ago

Hi, when I try to quantize model (yolov4-tiny) in vitis-ai 2.5 pytorch container, I got same error as following. This error occured after I using model.eval() and start to get output from model. My model was reference from this github. And here is my yolobody.py which gen for quantize model. Does anyone has idea about this?

Traceback (most recent call last):
  File "quantize.py", line 174, in <module>
    run_main()
  File "quantize.py", line 167, in run_main
    quantize(args.build_dir,args.quant_mode,args.batchsize)
  File "quantize.py", line 134, in quantize
    test(quantized_model, device, test_loader)
  File "/workspace/test_vitis-ai-tutorials-09/09-mnist_pyt/files/common.py", line 88, in test
    outputs         = model(images)
  File "/opt/vitis_ai/conda/envs/vitis-ai-pytorch/lib/python3.7/site-packages/torch/nn/modules/module.py", line 1102, in _call_impl
    return forward_call(*input, **kwargs)
  File "build/quant_model/YoloBody.py", line 72, in forward
    output_module_7_0,output_module_7_1 = self.module_7(input=output_module_0, split_size=32, dim=1)
  File "/opt/vitis_ai/conda/envs/vitis-ai-pytorch/lib/python3.7/site-packages/torch/nn/modules/module.py", line 1102, in _call_impl
    return forward_call(*input, **kwargs)
  File "/opt/vitis_ai/conda/envs/vitis-ai-pytorch/lib/python3.7/site-packages/pytorch_nndct/nn/modules/module_template.py", line 165, in forward
    output = quantize_tensors([output], self.node)[0]
  File "/opt/vitis_ai/conda/envs/vitis-ai-pytorch/lib/python3.7/site-packages/nndct_shared/quantization/utils.py", line 91, in quantize_tensors
    tensor_type))
  File "/opt/vitis_ai/conda/envs/vitis-ai-pytorch/lib/python3.7/site-packages/pytorch_nndct/quantization/torchquantizer.py", line 115, in do_scan
    if isinstance(res.values, torch.Tensor):
AttributeError: 'tuple' object has no attribute 'values'
HuiJu1218 commented 2 years ago

Hi, I have solve my problem. I found vitis-ai not support .split and .chunk from #699 and #685, so I have use tensor slicing to slic the tensor. Thanks.