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

YOLOv5 v5.0 release compatibility update for YOLOv3 #1737

Merged
merged 6 commits into from
Apr 12, 2021
Merged

YOLOv5 v5.0 release compatibility update for YOLOv3 #1737

merged 6 commits into from
Apr 12, 2021

Conversation

glenn-jocher
Copy link
Member

@glenn-jocher glenn-jocher commented Apr 12, 2021

This PR merges the most recent updates to YOLOv5 featured in the April 11th, 2021 v5.0 release into this YOLOv3 repository. This is part of routine Ultralytics maintenance and takes place on every major YOLOv5 release. Full details on the YOLOv5 v5.0 release is below.

https://github.com/ultralytics/yolov5/releases/tag/v5.0

This release implements YOLOv5-P6 models and retrained YOLOv5-P5 models:

  • YOLOv5-P5 models (same architecture as v4.0 release): 3 output layers P3, P4, P5 at strides 8, 16, 32, trained at --img 640
  • YOLOv5-P6 models: 4 output layers P3, P4, P5, P6 at strides 8, 16, 32, 64 trained at --img 1280

Example usage:

# Command Line
python detect.py --weights yolov5m.pt --img 640  # P5 model at 640
python detect.py --weights yolov5m6.pt --img 640  # P6 model at 640
python detect.py --weights yolov5m6.pt --img 1280  # P6 model at 1280
# PyTorch Hub
model = torch.hub.load('ultralytics/yolov5', 'yolov5m6')  #  P6 model
results = model(imgs, size=1280)  # inference at 1280

All model sizes YOLOv5s/m/l/x are now available in P5 and P6 architectures:

python detect.py --weights yolov5s.pt  # P5 models
                           yolov5m.pt
                           yolov5l.pt
                           yolov5x.pt
                           yolov5s6.pt  # P6 models
                           yolov5m6.pt
                           yolov5l6.pt
                           yolov5x6.pt

Notable Updates

Updated Results

P6 models include an extra P6/64 output layer for detection of larger objects, and benefit the most from training at higher resolution. For this reason we trained all P5 models at 640, and all P6 models at 1280.

YOLOv5-P5 640 Figure (click to expand)

Figure Notes (click to expand)
  • GPU Speed measures end-to-end time per image averaged over 5000 COCO val2017 images using a V100 GPU with batch size 32, and includes image preprocessing, PyTorch FP16 inference, postprocessing and NMS.
  • EfficientDet data from google/automl at batch size 8.

Pretrained Checkpoints

Model size
(pixels)
mAPval
0.5:0.95
mAPtest
0.5:0.95
mAPval
0.5
Speed
V100 (ms)
params
(M)
FLOPS
640 (B)
YOLOv5s 640 36.7 36.7 55.4 2.0 7.3 17.0
YOLOv5m 640 44.5 44.5 63.3 2.7 21.4 51.3
YOLOv5l 640 48.2 48.2 66.9 3.8 47.0 115.4
YOLOv5x 640 50.4 50.4 68.8 6.1 87.7 218.8
YOLOv5s6 1280 43.3 43.3 61.9 4.3 12.7 17.4
YOLOv5m6 1280 50.5 50.5 68.7 8.4 35.9 52.4
YOLOv5l6 1280 53.4 53.4 71.1 12.3 77.2 117.7
YOLOv5x6 1280 54.4 54.4 72.0 22.4 141.8 222.9
YOLOv5x6 TTA 1280 55.0 55.0 72.0 70.8 - -
Table Notes (click to expand)
  • APtest denotes COCO test-dev2017 server results, all other AP results denote val2017 accuracy.
  • AP values are for single-model single-scale unless otherwise noted. Reproduce mAP by python test.py --data coco.yaml --img 640 --conf 0.001 --iou 0.65
  • SpeedGPU averaged over 5000 COCO val2017 images using a GCP n1-standard-16 V100 instance, and includes FP16 inference, postprocessing and NMS. Reproduce speed by python test.py --data coco.yaml --img 640 --conf 0.25 --iou 0.45
  • All checkpoints are trained to 300 epochs with default settings and hyperparameters (no autoaugmentation).
  • Test Time Augmentation (TTA) includes reflection and scale augmentation. Reproduce TTA by python test.py --data coco.yaml --img 1536 --iou 0.7 --augment

Changelog

Changes between previous release and this release: ultralytics/yolov5@v4.0...v5.0
Changes since this release: ultralytics/yolov5@v5.0...HEAD

Click a section below to expand details:

Implemented Enhancements (26)
  • Return predictions as json #2703
  • Single channel image training? #2609
  • Images in MPO Format are considered corrupted #2446
  • Improve Validation Visualization #2384
  • Add ASFF (three fuse feature layers) int the Head for V5(s,m,l,x) #2348
  • Dear author, can you provide a visualization scheme for YOLOV5 feature graphs during detect.py? Thank you! #2259
  • Dataloader #2201
  • Update Train Custom Data wiki page #2187
  • Multi-class NMS #2162
  • 💡Idea: Mosaic cropping using segmentation labels #2151
  • Improving Confusion Matrix Interpretability: FP and FN vectors should be switched to align with Predicted and True axis #2071
  • Interpreting model YoloV5 by Grad-cam #2065
  • Output optimal confidence threshold based on PR curve #2048
  • is it valuable that add --cache-images option to detect.py? #2004
  • I want to change the anchor box to anchor circles, where do you think the change to be made ? #1987
  • Support for imgaug #1954
  • Any plan for Knowledge Distillation? #1762
  • Is there a wasy to run detections on a video/webcam/rtrsp, etc EVERY x SECONDS? #1742
  • Can yolov5 support rotated target detection? #1728
  • Deploying yolov5 to TorchServe (GPU compatible) #1681
  • Why diffrent colors of bboxs? #1638
  • Yet another export yolov5 models to ONNX and inference with TensorRT #1597
  • Rerange the blocks of Focus Layer into row major to be compatible with tensorflow SpaceToDepth #413
  • YouTube Livestream Detection #2752 (ben-milanko)
  • Add TransformerLayer, TransformerBlock, C3TR modules #2333 (dingyiwei)
  • Improved W&B integration #2125 (AyushExel)
Fixed Bugs (73)
  • it seems that check_wandb_resume don't support multiple input files of images. #2716
  • ip camera or web camera. error: (-215:Assertion failed) !ss ize.empty() in function 'cv::resize' #2709
  • Model predict with forward will fail if PIL image does not have filename attribute #2702
  • ❔Question Whenever i try to run my model i run into this error AttributeError: 'NoneType' object has no attribute 'startswith' from wandbutils.py line 161 I wonder why ? Any workaround or fix #2697
  • coremltools no longer included in docker container #2686
  • 'LoadImages' path handling appears to be broken #2618
  • CUDA memory leak #2586
  • UnboundLocalError: local variable 'wandb_logger' referenced before assignment #2562
  • RuntimeError: CUDA error: CUBLAS_STATUS_INTERNAL_ERROR when calling cublasCreate\(handle\) #2417
  • CUDNN Mapping Error #2415
  • Can't train in DDP mode after recent update #2405
  • a bug about function bbox_iou() #2376
  • Training got stuck when I used DistributedDataParallel mode but dataParallel mode is useful #2375
  • Something wrong with fixing ema #2343
  • Conversion to CoreML fails when running with --batch 2 #2322
  • The "fitness" function in train.py. #2303
  • Error "Directory already existed" happen when training with multiple GPUs #2275
  • self.balance = {3: [4.0, 1.0, 0.4], 4: [4.0, 1.0, 0.25, 0.06], 5: [4.0, 1.0, 0.25, 0.06, .02]}[det.nl] #2255
  • Cannot run model with URL as argument #2246
  • Yolov5 crashes with RTSP stream analysis #2226
  • interruption during evolve #2218
  • I am a student of Tsinghua University, doing research in Tencent. When I train with yolov5, the following problems appear,Sincerely hope to get help, #2203
  • Frame Loss in video stream #2196
  • wandb.ai not logging epochs vs metrics/losses instead uses step #2175
  • Evolve is leaking files #2142
  • Issue in torchscript model inference #2129
  • RuntimeError: CUDA error: device-side assert triggered #2124
  • In 'evolve' mode, If the original hyp is 0, It will never update #2122
  • Caching image path #2121
  • can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first #2106
  • Error in creating model with Ghost modules #2081
  • TypeError: int() can't convert non-string with explicit base #2066
  • [Pytorch Hub] Hub CI is broken with latest master of yolo5 example. #2050
  • Problems when downloading requirements #2047
  • detect.py - images always saved #2029
  • thop and pycocotools shouldn't be hard requirements to train a model #2014
  • CoreML export failure #2007
  • loss function like has a bug #1988
  • CoreML export failure: unexpected number of inputs for node x.2 (_convolution): 13 #1945
  • torch.nn.modules.module.ModuleAttributeError: 'Hardswish' object has no attribute 'inplace' #1939
  • runs not logging separately in wandb.ai #1937
  • wrong batch size after --resume on multiple GPUs #1936
  • TypeError: int() can't convert non-string with explicit base #1927
  • RuntimeError: DataLoader worker #1908
  • Unable to export weights into onnx #1900
  • CUDA Initialization Warning on Docker when not passing in gpu #1891
  • Issue with github api rate limiting #1890
  • wandb: ERROR Error while calling W&B API: Error 1062: Duplicate entry '189160-gbp6y2en' for key 'PRIMARY' (<Response [409]>) #1878
  • Broken pipe #1859
  • detection.py #1858
  • Getting error on loading custom trained model #1856
  • W&B id is always the same and continue with the old logging. #1851
  • pytorch1.7 is not completely support.'inplace'! 'inplace'! 'inplace'! #1832
  • Validation errors are NaN #1804
  • Error Loading custom model weights with pytorch.hub.load #1788
  • 'cap' object is not self. initialized #1781
  • ValueError: API key must be 40 characters long, yours was 1 #1777
  • scipy #1766
  • error of missing key 'anchors' in hyp.scratch.yaml #1744
  • mss grab color conversion problem using TorchHub #1735
  • Video rotation when running detection. #1725
  • RuntimeError: CUDA out of memory. Tried to allocate 294.00 MiB (GPU 0; 6.00 GiB total capacity; 118.62 MiB already allocated; 4.20 GiB free; 362.00 MiB reserved in total by PyTorch) #1698
  • Errors on MAC #1690
  • RuntimeError: DataLoader worker (pid(s) 296430) exited unexpectedly #1675
  • Non-positive Stride #1671
  • gbk error. How can I solve it? #1669
  • CoreML export failure: unexpected number of inputs for node x.2 (_convolution): 13 #1667
  • RuntimeError: Given groups=1, weight of size [32, 128, 1, 1], expected input[1, 64, 32, 32] to have 128 channels, but got 64 channels instead #1627
  • segmentation fault #1620
  • Getting different output sizes when using exported torchscript #1562
  • some bugs when training #1547
  • Evolve getting error #1319
  • AssertionError: Image Not Found ../dataset/images/train/4501.jpeg #195
Closed Issues (42)
  • Can feed tensor the model #2722
  • hello, everyone, In order to modify the network more conveniently based on this rep., I restructure the network part, which is divided into backbone, neck, head #2710
  • Differentiate between normal banner and LED banner #2647
  • 👋 Hello @Wilson-inclaims, thank you for your interest in 🚀 YOLOv5! Please visit our ⭐️ [Tutorials](https://github.com/ultralytics/yolov5/wiki\#tutorials\) to get started, where you can find quickstart guides for simple tasks like [Custom Data Training](https://github.com/ultralytics/yolov5/wiki/Train-Custom-Data\) all the way to advanced concepts like [Hyperparameter Evolution](https://github.com/ultralytics/yolov5/issues/607\). #2516
  • I got a runtimerror when I run classifier.py to train my own dataset. #2438
  • RuntimeError: a view of a leaf Variable that requires grad is being used in an in-place operation. #2403
  • 🌟💡 YOLOv5 Study: batch size #2377
  • export.py export onnx for gpu failed #2365
  • in _ddp_init_helper expect_sparse_gradient) RuntimeError: Model replicas must have an equal number of parameters. #2311
  • Custom dataset training using YOLOv5 #2296
  • label format #2293
  • MAP NOT PRINTING #2283
  • Why didn't I get results in my video test? #2277
  • Label Missing: for images and labels... 203 found, 50 missing, 0 empty, 0 corrupted: 100% #2268
  • Pytorch Hub inference returns different results than detect.py #2224
  • yolov5x train.py error #2181
  • degrees is radians? #2160
  • AssertionError: Image Not Found #2130
  • How to load custom trained model to detect sample image? #2097
  • YOLOv5 installed failed on Macbook M1 #2075
  • How to set the number of seconds to detect once #2072
  • Where the changes should be made to detect horizontal line and vertical lines? Can anyone discus elaborately? #2070
  • Video inference stops after a certain number of frames #2064
  • Can't YOLOV5 be detected with multithreading? #1979
  • I want to make a images file what divided images in test.py #1931
  • different image size w/ torchscript windows c++ #1920
  • run detect the result ,the Image don't have box #1910
  • resume problem #1884
  • Detect source as .txt error #1877
  • yolov5 v4.0 tensorrt deployment #1874
  • Hyperparameter Evolution: load dataset every time #1864
  • Caching images problem #1862
  • About Release v4.0 #1841
  • @Glenn best practices for running trained YOLOv5 models in new python environments is to use PyTorch Hub. See PyTorch Hub Tutorial: #1789
  • yolov5x.pt is not compatible with ./models/yolov5x.yam #1721
  • Parameter '--device' doesn't work! #1706
  • Thank you for your issue! #1687
  • Convert the label format #1652
  • Autorun not working #1599
  • When model.model[-1]. export = False in export.py, coreml export failing. Please check. #1491
  • Error 'AttributeError: 'str' object has no attribute 'get'' at running train.py #1479
  • Docker image is not working, torch.nn.modules.module.ModuleAttributeError: 'Hardswish' object has no attribute 'inplace' #1327
Merged Pull Requests (172)

🛠️ PR Summary

Made with ❤️ by Ultralytics Actions

WARNING ⚠️ this PR is very large, summary may not cover all changes.

🌟 Summary (single-line synopsis)

A summary of the key updates made to the Ultralytics YOLOv3 repository, including changes to code files and README documentation formatting.

📊 Key Changes

  • Adjusted .gitattributes to modify comment clarity for linguist-vendored detection.
  • Optimized GitHub Actions for CI testing by reducing image size and increasing batch size.
  • Updated workflow greeting messages and included new badges for Kaggle and Docker.
  • Dockerfile updates include a newer base image and additional package installations.
  • README.md restructured with updated links, a cleaner layout, added model checkpoints table and clarification notes.
  • Introduced a new dataset script (get_argoverse_hd.sh) for downloading the Argoverse-HD dataset.
  • Edited dataset configurations for consistency in class names representation.
  • Introduced an AI model hubconf.py for easily accessing Ultralytics YOLOv3 models via PyTorch Hub.
  • Replaced certain standard YOLOv3 modules with more efficient versions in models/common.py and models/experimental.py.
  • Updated models/yolo.py to include anchor checks and modifications necessary for model compatibility.
  • Altered training script train.py with code optimizations and added flags for improved functionality.
  • Integrated YOLOv3 into a Jupyter Notebook environment tutorial.ipynb for interactive use and learning.

🎯 Purpose & Impact

  • The updates improve the efficiency and usability of the YOLOv3 object detection model, make it more accessible for users with varying levels of expertise, and facilitate community engagement with better documentation and interactive tutorials. The changes potentially enhance the performance and ease the process of customizing, training, and deploying YOLOv3 for object detection tasks.

@glenn-jocher glenn-jocher added the documentation Improvements or additions to documentation label Apr 12, 2021
@glenn-jocher glenn-jocher self-assigned this Apr 12, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation
Projects
None yet
1 participant