Nota-NetsPresso / PyNetsPresso

The official NetsPresso Python package.
https://nota-netspresso.github.io/PyNetsPresso/
Apache License 2.0
40 stars 1 forks source link

[BUG] Compression with .onnx error #245

Closed illian01 closed 3 months ago

illian01 commented 5 months ago

Describe the bug

error occurred when I try to compress the model with .onnx file.

Have you searched existing issues? 🔎

Reproduction

Execute below python code

from netspresso import NetsPresso
from netspresso.enums import Framework
netspresso = NetsPresso(email="???", password="???")

# 1. Declare compressor
compressor = netspresso.compressor()

compression_ratio = 0.1
# 2. Run automatic compression
compression_result = compressor.automatic_compression(
    input_shapes=[{"batch": 1, "channel": 3, "dimension": [640, 640]}],
    input_model_path="./board_test/640x640-yolox-s.onnx",
    output_dir=f"./board_test/compression_{compression_ratio}",
    compression_ratio=compression_ratio,
    framework=Framework.ONNX
)

Screenshot

No response

Logs

(np_trainer) (base) junho.shin@3090f:/ssd1/junho.shin/netspresso-trainer$ /ssd1/junho.shin/anaconda3/envs/np_trainer/bin/python /ssd1/junho.shin/netspresso-trainer/compression.py
2024-05-03 06:14:42.385 | INFO     | netspresso.clients.config:<module>:11 - Read PROD config
2024-05-03 06:14:44.315 | INFO     | netspresso.clients.auth.main:login:38 - Login successfully
2024-05-03 06:14:44.839 | INFO     | netspresso.clients.auth.main:get_user_info:55 - Successfully got user information
2024-05-03 06:14:44.841 | INFO     | netspresso.compressor.compressor:automatic_compression:683 - Compressing automatic-based model...
2024-05-03 06:14:45.276 | INFO     | netspresso.clients.auth.main:get_user_info:55 - Successfully got user information
2024-05-03 06:14:45.279 | INFO     | netspresso.compressor.compressor:upload_model:64 - Uploading Model...
2024-05-03 06:15:04.496 | INFO     | netspresso.compressor.compressor:upload_model:79 - Upload model successfully. Model ID: 9b6477cb-5fde-4f56-a80d-49d9cea04b11
2024-05-03 06:15:04.496 | INFO     | netspresso.compressor.compressor:automatic_compression:714 - Compressing model...
2024-05-03 06:15:28.669 | INFO     | netspresso.compressor.compressor:get_compression:262 - Getting compression...
2024-05-03 06:15:29.133 | INFO     | netspresso.compressor.compressor:get_compression:274 - Get compression successfully.
2024-05-03 06:15:29.135 | INFO     | netspresso.compressor.compressor:download_model:136 - Downloading model...
2024-05-03 06:15:31.414 | INFO     | netspresso.compressor.compressor:download_model:143 - Model downloaded at board_test/compression_0.1 (1)/compression_0.1 (1).onnx
2024-05-03 06:15:31.415 | ERROR    | netspresso.compressor.compressor:automatic_compression:758 - Automatic compression failed. Error: [Errno 2] No such file or directory: 'board_test/compression_0.1 (1)/compression_0.1 (1).pt'
Traceback (most recent call last):
  File "/ssd1/junho.shin/netspresso-trainer/compression.py", line 10, in <module>
    compression_result = compressor.automatic_compression(
  File "/ssd1/junho.shin/anaconda3/envs/np_trainer/lib/python3.8/site-packages/netspresso/compressor/compressor.py", line 761, in automatic_compression
    raise e
  File "/ssd1/junho.shin/anaconda3/envs/np_trainer/lib/python3.8/site-packages/netspresso/compressor/compressor.py", line 726, in automatic_compression
    converter_uploaded_model = self._get_available_devices(compressed_model, default_model_path)
  File "/ssd1/junho.shin/anaconda3/envs/np_trainer/lib/python3.8/site-packages/netspresso/compressor/compressor.py", line 319, in _get_available_devices
    export_onnx(default_model_path, compressed_model.input_shapes)
  File "/ssd1/junho.shin/anaconda3/envs/np_trainer/lib/python3.8/site-packages/netspresso/compressor/utils/onnx.py", line 34, in export_onnx
    model = torch.load(file_path.with_suffix(".pt"))
  File "/ssd1/junho.shin/anaconda3/envs/np_trainer/lib/python3.8/site-packages/torch/serialization.py", line 771, in load
    with _open_file_like(f, 'rb') as opened_file:
  File "/ssd1/junho.shin/anaconda3/envs/np_trainer/lib/python3.8/site-packages/torch/serialization.py", line 270, in _open_file_like
    return _open_file(name_or_buffer, mode)
  File "/ssd1/junho.shin/anaconda3/envs/np_trainer/lib/python3.8/site-packages/torch/serialization.py", line 251, in __init__
    super(_open_file, self).__init__(open(name, mode))
FileNotFoundError: [Errno 2] No such file or directory: 'board_test/compression_0.1 (1)/compression_0.1 (1).pt'

System Info

Latest release (v1.6.0)
illian01 commented 5 months ago

I think the problem occurred because try to load model with wrong file name.

Save with .onnx format

https://github.com/Nota-NetsPresso/PyNetsPresso/blob/1fb6b1b3675b42fc97d4919b0b1b11b90306991c/netspresso/compressor/compressor.py#L423-L426

And trying to load with .pt file name

https://github.com/Nota-NetsPresso/PyNetsPresso/blob/1fb6b1b3675b42fc97d4919b0b1b11b90306991c/netspresso/compressor/compressor.py#L319-L325

https://github.com/Nota-NetsPresso/PyNetsPresso/blob/1fb6b1b3675b42fc97d4919b0b1b11b90306991c/netspresso/compressor/utils/onnx.py#L32-L40

illian01 commented 5 months ago

@Only-bottle If you okay, I will submit PR of this issue.

Only-bottle commented 5 months ago

@illian01 Okay, please submit PR. Thank you!! 🙇🏻