Skip to content
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

How to reduce stride when training #12197

Closed
1 task done
thiennn013 opened this issue Oct 5, 2023 · 10 comments
Closed
1 task done

How to reduce stride when training #12197

thiennn013 opened this issue Oct 5, 2023 · 10 comments
Labels
question Further information is requested Stale Stale and schedule for closing soon

Comments

@thiennn013
Copy link

Search before asking

Question

I want to reduce the stride to train with small objects but don't know where to change it, the default is currently 32

Additional

No response

@thiennn013 thiennn013 added the question Further information is requested label Oct 5, 2023
@github-actions
Copy link
Contributor

github-actions bot commented Oct 5, 2023

👋 Hello @thiennn013, 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 a minimum reproducible example to help us debug it.

If this is a custom training ❓ Question, please provide as much information as possible, including dataset image examples and training logs, and verify you are following our Tips for Best Training Results.

Requirements

Python>=3.8.0 with all requirements.txt installed including PyTorch>=1.8. To get started:

git clone https://github.com/ultralytics/yolov5  # clone
cd yolov5
pip install -r requirements.txt  # install

Environments

YOLOv5 may be run in any of the following up-to-date verified environments (with all dependencies including CUDA/CUDNN, Python and PyTorch preinstalled):

Status

YOLOv5 CI

If this badge is green, all YOLOv5 GitHub Actions Continuous Integration (CI) tests are currently passing. CI tests verify correct operation of YOLOv5 training, validation, inference, export and benchmarks on macOS, Windows, and Ubuntu every 24 hours and on every commit.

Introducing YOLOv8 🚀

We're excited to announce the launch of our latest state-of-the-art (SOTA) object detection model for 2023 - YOLOv8 🚀!

Designed to be fast, accurate, and easy to use, YOLOv8 is an ideal choice for a wide range of object detection, image segmentation and image classification tasks. With YOLOv8, you'll be able to quickly and accurately detect objects in real-time, streamline your workflows, and achieve new levels of accuracy in your projects.

Check out our YOLOv8 Docs for details and get started with:

pip install ultralytics

@glenn-jocher
Copy link
Member

@thiennn013 to reduce the stride when training with YOLOv5, you can modify the stride parameter in the model configuration file. The default stride is set to 32, but you can change it to a smaller value to detect smaller objects.

Please refer to the YOLOv5 model configuration file (yolov5/models/yolov5s.yaml, for example) and locate the strides parameter under the backbone section. Adjust the value of strides to your desired stride, and then proceed with training.

Let us know if you have any further questions or need additional assistance.

@thiennn013
Copy link
Author

Can you give more specific instructions? I don't know what value needs to be changed here to change the stride. Thank you very much

backbone:

[from, number, module, args]

[[-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2
[-1, 1, Conv, [128, 3, 2]], # 1-P2/4
[-1, 3, C3, [128]],
[-1, 1, Conv, [256, 3, 2]], # 3-P3/8
[-1, 6, C3, [256]],
[-1, 1, Conv, [512, 3, 2]], # 5-P4/16
[-1, 9, C3, [512]],
[-1, 1, Conv, [1024, 3, 2]], # 7-P5/32
[-1, 3, C3, [1024]],
[-1, 1, SPPF, [1024, 5]], # 9
]

@glenn-jocher
Copy link
Member

@thiennn013 in order to change the stride in YOLOv5, you can modify the strides values in the backbone configuration.

In the model configuration file, you will find the backbone section which contains a list of sub-modules with their respective configurations. Each sub-module is represented by a list of values, where the second value in each sub-module list represents the stride.

To change the stride, locate the sub-modules that have stride values you wish to modify. For example, to change the stride of the first sub-module from 2 to a different value, you can modify the second value in the list from 1 to your desired stride value (e.g., 2, 4, etc.).

Here is an example of how you can modify the stride of the first sub-module from 2 to a different value:

backbone:
  [[-1, 1, Conv, [64, 6, <desired_stride>, 2]],  # 0-P1/2
   ...
  ]

Repeat the same procedure for any other sub-modules that you want to modify.

Please let me know if you have any further questions or need additional assistance.

Copy link
Contributor

github-actions bot commented Nov 5, 2023

👋 Hello there! We wanted to give you a friendly reminder that this issue has not had any recent activity and may be closed soon, but don't worry - you can always reopen it if needed. If you still have any questions or concerns, please feel free to let us know how we can help.

For additional resources and information, please see the links below:

Feel free to inform us of any other issues you discover or feature requests that come to mind in the future. Pull Requests (PRs) are also always welcomed!

Thank you for your contributions to YOLO 🚀 and Vision AI ⭐

@github-actions github-actions bot added the Stale Stale and schedule for closing soon label Nov 5, 2023
@github-actions github-actions bot closed this as not planned Won't fix, can't repro, duplicate, stale Nov 16, 2023
@curtis18
Copy link

@thiennn013 in order to change the stride in YOLOv5, you can modify the strides values in the backbone configuration.

In the model configuration file, you will find the backbone section which contains a list of sub-modules with their respective configurations. Each sub-module is represented by a list of values, where the second value in each sub-module list represents the stride.

To change the stride, locate the sub-modules that have stride values you wish to modify. For example, to change the stride of the first sub-module from 2 to a different value, you can modify the second value in the list from 1 to your desired stride value (e.g., 2, 4, etc.).

Here is an example of how you can modify the stride of the first sub-module from 2 to a different value:

backbone:
  [[-1, 1, Conv, [64, 6, <desired_stride>, 2]],  # 0-P1/2
   ...
  ]

Repeat the same procedure for any other sub-modules that you want to modify.

Please let me know if you have any further questions or need additional assistance.

Hello @glenn-jocher If it is yolov8, or yolov10. How to reduce stride? Thank you.

YOLOv8.0n backbone

backbone:

[from, repeats, module, args]

  • [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
  • [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
  • [-1, 3, C2f, [128, True]]
  • [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
  • [-1, 6, C2f, [256, True]]
  • [-1, 1, Conv, [512, 3, 2]] # 5-P4/16
  • [-1, 6, C2f, [512, True]]
  • [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32
  • [-1, 3, C2f, [1024, True]]
  • [-1, 1, SPPF, [1024, 5]] # 9

YOLOv10x backbone

backbone:

[from, repeats, module, args]

  • [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
  • [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
  • [-1, 3, C2f, [128, True]]
  • [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
  • [-1, 6, C2f, [256, True]]
  • [-1, 1, SCDown, [512, 3, 2]] # 5-P4/16
  • [-1, 6, C2fCIB, [512, True]]
  • [-1, 1, SCDown, [1024, 3, 2]] # 7-P5/32
  • [-1, 3, C2fCIB, [1024, True]]
  • [-1, 1, SPPF, [1024, 5]] # 9
  • [-1, 1, PSA, [1024]] # 10

@glenn-jocher
Copy link
Member

Hello @curtis18, to reduce the stride in YOLOv8 or YOLOv10, modify the stride values in the Conv layers within the backbone section of the model configuration file. For example, change the stride in the first Conv layer from 2 to your desired value:

backbone:
  - [-1, 1, Conv, [64, 3, <desired_stride>]] # 0-P1/2
  ...

Apply similar changes to other Conv layers as needed. Let me know if you need further assistance.

@curtis18
Copy link

Hello @glenn-jocher Thank you for your reply. You mentioned that the model strides are fixed at 8, 16, 32, what does the stride values 2 in the Conv layers mean? Does stride value 2 here is a key representing 32 strides? value 1 means 16 strides, and 0 means 8 strides?

@glenn-jocher
Copy link
Member

Hello @curtis18, the stride values in the Conv layers directly represent the downsampling factor at each stage. A stride of 2 means the feature map size is halved, while a stride of 1 means no downsampling. The fixed strides of 8, 16, and 32 refer to the cumulative downsampling effect across the network layers. Let me know if you need further clarification.

@tvvarun
Copy link

tvvarun commented Nov 16, 2024

Hello @glenn-jocher I have tried all different configuration of the stride values in the yaml backbone definition but only value 2 seems to work. Rest all values I get an error there any other procedure I am supposed to do?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested Stale Stale and schedule for closing soon
Projects
None yet
Development

No branches or pull requests

4 participants