-
-
Notifications
You must be signed in to change notification settings - Fork 16.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Gertting different output sizes when using exported torchscript #1562
Comments
Hello @dagap, thank you for your interest in 🚀 YOLOv5! Please visit our ⭐️ Tutorials to get started, where you can find quickstart guides for simple tasks like Custom Data Training all the way to advanced concepts like Hyperparameter Evolution. If this is a 🐛 Bug Report, please provide screenshots and minimum viable code to reproduce your issue, otherwise we can not help you. If this is a custom training ❓ Question, please provide as much information as possible, including dataset images, training logs, screenshots, and a public link to online W&B logging if available. For business inquiries or professional support requests please visit https://www.ultralytics.com or email Glenn Jocher at glenn.jocher@ultralytics.com. RequirementsPython 3.8 or later with all requirements.txt dependencies installed, including $ pip install -r requirements.txt EnvironmentsYOLOv5 may be run in any of the following up-to-date verified environments (with all dependencies including CUDA/CUDNN, Python and PyTorch preinstalled):
StatusIf this badge is green, all YOLOv5 GitHub Actions Continuous Integration (CI) tests are currently passing. CI tests verify correct operation of YOLOv5 training (train.py), testing (test.py), inference (detect.py) and export (export.py) on MacOS, Windows, and Ubuntu every 24 hours and on every commit. |
Try changing: I recommend you reading these issues entirely: |
@MarcoCBA Thank you for the reply. So, the code in If I set it to
If I do everything on the CPU, the output for an input like The second element is a list of size 3 with tensors of shape:
Do you reckon I need to replicate the detection layer? |
The problem is that some constants are loading on a specific device. You could either move everything to CUDA (but the model will work only in cuda) or, you could modify the code inside the traced model (unzip it) in order to make it device agnostic. The shapes are exactly what you are expecting. Im not sure what those three tensors even are, but If you do NMS over the first one of shape ([1, 25200, 85]), you will get boxes, scores and labels. Here is the code for NMS:
just do
|
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. |
@dagap I am also facing the same issue: At normal inference, the output is a torch tensor and the shape is consistent wrt to batch size: Input shape: Output shape: However, in the torchscript output is a list and the length of 3 even when the input batch size is 1 or 2. Input Shape: Output Shape: The doubts I am having is: The main doubt is unlike in your case you were getting the 1st tensor as correct tensor but I am not getting the same? |
I am running some dummy data through the model as follows:
The shape of the output prediction is
[1, 192, 80, 80]
I have exported the model to torchscript using the
export.py
script and the usage is as follows:The output of this is of shape
[1, 3, 80, 80, 85]
.So the model definitely gets exported and I can use it for inference but really no clue why the output shape is different. Maybe this is due to laye fusion, so I tried to do something like to replicate this fusion:
but this results in
RecursiveScriptModule' object has no attribute 'fuse'
I was wondering if there is something else one needs to do to make the two approaches consistent.
The text was updated successfully, but these errors were encountered: