-
-
Notifications
You must be signed in to change notification settings - Fork 16.4k
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
Implementation of : HIC-YOLOv5: Improved YOLOv5 for Small Object Detection #12264
base: master
Are you sure you want to change the base?
Conversation
use_deterministic_algorithms
Done necessary code changes for implementing CBAM and Involution to yolov5.
Added yolo5m-cbam-involution.yaml
for more information, see https://pre-commit.ci
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👋 Hello @aash1999, thank you for submitting a YOLOv5 🚀 PR! To allow your work to be integrated as seamlessly as possible, we advise you to:
- ✅ Verify your PR is up-to-date with
ultralytics/yolov5
master
branch. If your PR is behind you can update your code by clicking the 'Update branch' button or by runninggit pull
andgit merge master
locally. - ✅ Verify all YOLOv5 Continuous Integration (CI) checks are passing.
- ✅ Reduce changes to the absolute minimum required for your bug fix or feature addition. "It is not daily increase but daily decrease, hack away the unessential. The closer to the source, the less wastage there is." — Bruce Lee
@aash1999 Hello! Thanks for your work! Did you evaluate the results? What about metrics? |
Hi @Ilyabasharov thank you |
refactoring to meet inline comment rules Signed-off-by: Aakash Singh <[email protected]>
added few comments Signed-off-by: Aakash Singh <[email protected]>
Hi @aash1999, Thank you for your interest in HIC-YOLOv5! As mentioned in the paper, the results and metrics can be found by referring to the research paper at https://arxiv.org/pdf/2309.16393.pdf. You can find the specific details and evaluations there. Additionally, I am currently training and validating the model to further validate the results. If you have any further questions or need assistance, feel free to ask. Thank you! |
Thank you for your prompt response. I'm currently encountering some issues with the checks, as they are failing. Could you please provide some guidance on how I can rectify these issues and ensure the checks pass successfully? Your assistance is greatly appreciated. Thank you |
adding hyp and model files as mentioned in paper
Signed-off-by: Aakash Singh <[email protected]>
removing trailing white space Signed-off-by: Aakash Singh <[email protected]>
did you manage to reproduce the metrics from the article? Im also interested in this results, but it seems according to the article that tph-yolov5 paper, github gives better performance on VisDrone Dataset |
I am currently training the model with mentioned hyper parameter, but I am not able to run on the batch size that was mentioned due to GPU Ram constraint. |
@aash1999 hi, Thank you for reaching out. I understand that you are experiencing GPU RAM constraints while trying to run the model with the mentioned batch size. GPU RAM limitations can indeed be a challenge. To address this issue, you can try the following potential solutions:
Please note that these are general suggestions, and the optimal solution may vary depending on your specific use case and the resources available to you. I hope this information helps! If you have any further questions or need additional assistance, please let me know. Thank you! |
Hi @glenn-jocher, @Ilyabasharov I ran the model on an A100 for 300 epochs as mentioned in the paper with the same hyperparameters, but only with a batch size of 70. I obtained the following results: HIC-YOLOv5 (test): 35.16 [email protected], 20.23 mAP@[0.5:0.95] Meanwhile, YOLOv5 (test) achieved 27.57 [email protected] and 14.43 mAP@[0.5:0.95] on the VISDRONE dataset. Thanks |
@glenn-jocher @Ilyabasharov |
@aash1999 thank you for considering merging the changes. We appreciate your contribution to the YOLOv5 repository. Before merging, we need to ensure that the changes align with the project's guidelines and requirements. Please provide more details about the changes you made and any relevant information, such as how the changes impact the overall functionality and performance of the model. Once we have a clearer understanding, we can proceed with the review process and determine if the changes are ready for merging. Thank you again for your contribution. We look forward to reviewing your changes. |
Typo correction Signed-off-by: Aakash Singh <[email protected]>
Hi @glenn-jocher, I'd like to provide you with a comprehensive overview of the code changes I've made in this PR:
These code changes have been meticulously designed to enhance the YOLOv5 model by incorporating CBAM and Involution modules, as outlined in the referenced paper. For Performance refer to : #12264 (comment) |
@aash1999 hi, Thank you for providing a comprehensive overview of the code changes you made in this PR. I appreciate the effort you put into integrating the CBAM and Involution modules into the YOLOv5 model. I have carefully reviewed your changes, and they seem well-documented and aligned with the goals of enhancing the model's performance. I also took a look at the performance metrics you shared in the linked comment, and the results look promising. The modifications you made in I see that you also addressed an issue related to backward implementation during GPU training in Overall, I think your changes align with our project's objectives and will enhance the performance of YOLOv5. However, before merging, I would appreciate it if you could address any open issues and ensure that all tests and checks pass successfully. Thank you for your contribution. Keep up the great work! Best, |
Signed-off-by: Aakash Singh <[email protected]>
@glenn-jocher
it will be helpful if you guide me on how o fix it . |
Signed-off-by: Aakash Singh <[email protected]>
I did the changes as you mentioned and now its passing all the checks. thanks |
Hi @aash1999, Thank you for making the necessary changes and addressing the issues with the pre-commit checks. I'm glad to hear that the modifications have passed all the checks and that your changes are now ready for merging. Your contribution is greatly appreciated. I will review your changes again and proceed with the merging process if everything looks good. Once merged, the enhancements you made to the YOLOv5 model will be available for everyone to benefit from. Thank you again for your hard work and dedication. Keep up the excellent work! Best, |
@glenn-jocher hi |
Signed-off-by: Aakash Singh <[email protected]>
@glenn-jocher |
@aash1999 hi, Thank you for your patience. The merging process for pull requests can sometimes take longer due to various factors such as review time, code complexity, and team capacity. The YOLOv5 repository receives a high volume of pull requests, and the team is working diligently to review and merge them as efficiently as possible. I understand your eagerness to have your pull request merged, and I assure you that we are actively reviewing it. We appreciate your contribution and thank you for your patience. Please rest assured that we will provide an update as soon as possible. Thank you again for your understanding. Kind regards, |
@aash1999 hi, Can you please add the train and val commands, along with the trained weights? I would like to validate the results. |
Tbh, what you call "SODH" is just P2 layer. And it does most of the trick on this paper |
@ExtReMLapin thank you for sharing your insights! It's great to hear your perspective and the importance you attribute to the P2 layer. Your expertise adds valuable context to this discussion. Keep the great feedback coming! |
hello, |
@mahilaMoghadami to convert the HIC YOLO changes from YOLOv5S to YOLOv5L, you can adjust the model architecture settings in the YOLOv5 configuration files (yolov5s.yaml and yolov5l.yaml). In these files, you can modify the "backbone" and "head" sections to match the larger YOLOv5L architecture. Specifically, you would need to update the number of layers, channels, and other architecture-specific parameters to align with YOLOv5L specifications. After making the necessary adjustments, you can use the YOLOv5L configuration files for training and inference. Be sure to update the command-line arguments for training and evaluation to use the YOLOv5L configuration and model weights. If you need further assistance, you can refer to the YOLOv5 documentation at https://docs.ultralytics.com/yolov5/ or feel free to ask for specific guidance. I hope this helps! Let me know if you have any more questions. |
you can change the architecture of 5L model by adding CBAM and Involution similar to the one mentioned in this branch. also take care of dimensions and test them. please reach out if you encounter any issues. Regards |
Hello @aash1999, Exactly, to adapt the HIC YOLO improvements from the YOLOv5S to the YOLOv5L model, you'll need to integrate the Channel Attention Block (CBAM) and Involution modules into the YOLOv5L architecture. This involves:
If you run into any issues or have further questions, don't hesitate to ask. The community is here to help! |
@aash1999 I have trained HIC model follow your configure but not get the same result. After 300 epochs, i only got 25 mAP.50. This is model summary: |
Hello @highquanglity, It looks like your mAP results are lower than expected. A few things to consider:
If the issue persists, could you share more details about your training dataset and the exact command you used for training? This might help in diagnosing the problem more effectively. 🛠️ Keep up the great work, and let's get those numbers up! |
Hello @glenn-jocher, Thanks. |
Hello @raoufslv, Great question! To tailor the hyperparameters for your specific dataset, such as fire detection, you can start by training with the default settings to establish a baseline. From there, you can adjust the hyperparameters based on your dataset's characteristics. For example:
You can also use the Hyperparameter Evolution feature in YOLOv5 to automatically find the best hyperparameters for your dataset. For more details, refer to the Hyperparameter Evolution Tutorial. Good luck with your fire detection project! 🔥 |
Thanks @aash1999. I ported this to YOLOv8 if anyone is interested. git clone https://github.com/ultralytics/ultralytics
cd ultralytics
git reset --hard b87ea6ab221ef1e7f7440fe47c6f924a7fce2862
wget https://gist.githubusercontent.com/Y-T-G/3b62416a6439a385e743d62f0d0ef842/raw/1a1defe62c236da11a8302fc40a3ebe3e0410692/YOLOv8-CBAM-Involution.patch
git apply YOLOv8-CBAM-Involution.patch
pip install -e . from ultralytics import YOLO
# P2 model
model = YOLO("ultralytics/cfg/models/v8/yolov8m-cbam-involution-p2.yaml", task="detect")
# Normal
model = YOLO("ultralytics/cfg/models/v8/yolov8m-cbam-involution.yaml", task="detect")
# Change suffix letter to reload different sizes
model = YOLO("ultralytics/cfg/models/v8/yolov8n-cbam-involution.yaml", task="detect")
model = YOLO("ultralytics/cfg/models/v8/yolov8s-cbam-involution.yaml", task="detect")
model = YOLO("ultralytics/cfg/models/v8/yolov8m-cbam-involution.yaml", task="detect") |
Hi @glenn-jocher and @aash1999 , I would like to use the CBAM modules you have added to the |
The CBAM modules and |
Hi @glenn-jocher and @aash1999, I'm trying to add the CBAM attention module to Yolo architecture at different backbone layers and have several questions. I added Cbam implementation to common.py and modified the backbone of yolov5s.yaml file (all kernel_size are 3):
and this is the modification of the parser in yolo.py:
But i face the bellow error:
first two layers args in yaml file:
first two layers args in runtime:
|
This repository contains the code for HIC-YOLOv5, an improved version of YOLOv5 tailored for small object detection. The improvements are based on the paper HIC-YOLOv5: Improved YOLOv5 For Small Object Detection.
HIC-YOLOv5 incorporates Channel Attention Block (CBAM) and Involution modules for enhanced object detection, making it suitable for both CPU and GPU training.
🛠️ PR Summary
Made with ❤️ by Ultralytics Actions
📊 Key Changes
hyp.hic-yolov5s.yaml
, tailored to the VisDrone Dataset.ChannelAttention
andSpatialAttention
modules incommon.py
to enhance feature representation.CBAM
module, combining channel and spatial attention for richness in feature maps.Involution
module, a novel operation to address limitations of convolutions.yolov5s-cbam-involution.yaml
architecture with CBAM and Involution integrated into the YOLOv5s model.🎯 Purpose & Impact
🌟 Summary
"YOLOv5 enhancements with attention mechanisms and involution for boosting small object detection performance." 🛸🔍