Skip to content

Commit 903b239

Browse files
DN6AyushExelglenn-jocherpre-commit-ci[bot]
authored
Comet Logging and Visualization Integration (#9232)
* add comet to logger interface * add comet logger * add support for updated parameters * clean up offline logger creation * update callback args for comet logger * add comet optimizer * add optimizer config * add comet README * update tutorial notebook with Comet section * add option to log class level metrics * add support for class level metrics and confusion matrix * handle errors when adding files to artifacts * fix typo * clean resume workflow * updates for HPO * update comet README * fix typo in comet README * update code snippets in comet README * update comet links in tutorial * updated links * change optimizer batch size param and update comet README image * update comet section in tutorial * use prexisting cmd line flags to configure logger * update artifact upload/download flow * remove come remove comet logger specific cmd line args * move downloading weights into comet logger code * remove extra argparse * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * change checkpoint logging flow to follow offline logger * update resume flow * add comet logger to remote dataset property * update cmd line args in hpo * set types for integer/float env variables * update README * fix typo in README * default to always logging model predictions * Update tutorial.ipynb * Update train.py * Add Comet to Integrations table * Update README.md * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: Ayush Chaurasia <[email protected]> Co-authored-by: Glenn Jocher <[email protected]> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent 5a134e0 commit 903b239

File tree

10 files changed

+1376
-49
lines changed

10 files changed

+1376
-49
lines changed

README.md

Lines changed: 33 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -160,46 +160,31 @@ python train.py --data coco.yaml --cfg yolov5n.yaml --weights '' --batch-size 12
160160

161161
</details>
162162

163-
## <div align="center">Environments</div>
164-
165-
Get started in seconds with our verified environments. Click each icon below for details.
166-
167-
<div align="center">
168-
<a href="https://colab.research.google.com/github/ultralytics/yolov5/blob/master/tutorial.ipynb">
169-
<img src="https://github.com/ultralytics/yolov5/releases/download/v1.0/logo-colab-small.png" width="10%" /></a>
170-
<img src="https://github.com/ultralytics/assets/raw/master/social/logo-transparent.png" width="5%" alt="" />
171-
<a href="https://www.kaggle.com/ultralytics/yolov5">
172-
<img src="https://github.com/ultralytics/yolov5/releases/download/v1.0/logo-kaggle-small.png" width="10%" /></a>
173-
<img src="https://github.com/ultralytics/assets/raw/master/social/logo-transparent.png" width="5%" alt="" />
174-
<a href="https://hub.docker.com/r/ultralytics/yolov5">
175-
<img src="https://github.com/ultralytics/yolov5/releases/download/v1.0/logo-docker-small.png" width="10%" /></a>
176-
<img src="https://github.com/ultralytics/assets/raw/master/social/logo-transparent.png" width="5%" alt="" />
177-
<a href="https://github.com/ultralytics/yolov5/wiki/AWS-Quickstart">
178-
<img src="https://github.com/ultralytics/yolov5/releases/download/v1.0/logo-aws-small.png" width="10%" /></a>
179-
<img src="https://github.com/ultralytics/assets/raw/master/social/logo-transparent.png" width="5%" alt="" />
180-
<a href="https://github.com/ultralytics/yolov5/wiki/GCP-Quickstart">
181-
<img src="https://github.com/ultralytics/yolov5/releases/download/v1.0/logo-gcp-small.png" width="10%" /></a>
182-
</div>
183163

184164
## <div align="center">Integrations</div>
185165

166+
<img src="https://github.com/ultralytics/yolov5/releases/download/v1.0/image-integrations-loop.png" width="100%" />
167+
186168
<div align="center">
169+
<a href="https://bit.ly/yolov5-deci-platform">
170+
<img src="https://github.com/ultralytics/yolov5/releases/download/v1.0/logo-comet.png" width="10%" /></a>
171+
<img src="https://github.com/ultralytics/assets/raw/master/social/logo-transparent.png" width="9%" height="0" alt="" />
187172
<a href="https://bit.ly/yolov5-deci-platform">
188173
<img src="https://github.com/ultralytics/yolov5/releases/download/v1.0/logo-deci.png" width="10%" /></a>
189-
<img src="https://github.com/ultralytics/assets/raw/master/social/logo-transparent.png" width="14%" height="0" alt="" />
174+
<img src="https://github.com/ultralytics/assets/raw/master/social/logo-transparent.png" width="9%" height="0" alt="" />
190175
<a href="https://cutt.ly/yolov5-readme-clearml">
191176
<img src="https://github.com/ultralytics/yolov5/releases/download/v1.0/logo-clearml.png" width="10%" /></a>
192-
<img src="https://github.com/ultralytics/assets/raw/master/social/logo-transparent.png" width="14%" height="0" alt="" />
177+
<img src="https://github.com/ultralytics/assets/raw/master/social/logo-transparent.png" width="9%" height="0" alt="" />
193178
<a href="https://roboflow.com/?ref=ultralytics">
194179
<img src="https://github.com/ultralytics/yolov5/releases/download/v1.0/logo-roboflow.png" width="10%" /></a>
195-
<img src="https://github.com/ultralytics/assets/raw/master/social/logo-transparent.png" width="14%" height="0" alt="" />
180+
<img src="https://github.com/ultralytics/assets/raw/master/social/logo-transparent.png" width="9%" height="0" alt="" />
196181
<a href="https://wandb.ai/site?utm_campaign=repo_yolo_readme">
197182
<img src="https://github.com/ultralytics/yolov5/releases/download/v1.0/logo-wb.png" width="10%" /></a>
198183
</div>
199184

200-
|Deci ⭐ NEW|ClearML ⭐ NEW|Roboflow|Weights & Biases
201-
|:-:|:-:|:-:|:-:|
202-
|Automatically compile and quantize YOLOv5 for better inference performance in one click at [Deci](https://bit.ly/yolov5-deci-platform)|Automatically track, visualize and even remotely train YOLOv5 using [ClearML](https://cutt.ly/yolov5-readme-clearml) (open-source!)|Label and export your custom datasets directly to YOLOv5 for training with [Roboflow](https://roboflow.com/?ref=ultralytics) |Automatically track and visualize all your YOLOv5 training runs in the cloud with [Weights & Biases](https://wandb.ai/site?utm_campaign=repo_yolo_readme)
185+
|Comet ⭐ NEW|Deci ⭐ NEW|ClearML ⭐ NEW|Roboflow|Weights & Biases
186+
|:-:|:-:|:-:|:-:|:-:|
187+
|Visualize model metrics and predictions and upload models and datasets in realtime with [Comet](https://www.comet.com/site/?ref=yolov5&utm_source=yolov5&utm_medium=affilliate&utm_campaign=yolov5_comet_integration)|Automatically compile and quantize YOLOv5 for better inference performance in one click at [Deci](https://bit.ly/yolov5-deci-platform)|Automatically track, visualize and even remotely train YOLOv5 using [ClearML](https://cutt.ly/yolov5-readme-clearml) (open-source!)|Label and export your custom datasets directly to YOLOv5 for training with [Roboflow](https://roboflow.com/?ref=ultralytics) |Automatically track and visualize all your YOLOv5 training runs in the cloud with [Weights & Biases](https://wandb.ai/site?utm_campaign=repo_yolo_readme)
203188

204189

205190
## <div align="center">Why YOLOv5</div>
@@ -323,6 +308,28 @@ python export.py --weights yolov5s-cls.pt resnet50.pt efficientnet_b0.pt --inclu
323308
</details>
324309

325310

311+
## <div align="center">Environments</div>
312+
313+
Get started in seconds with our verified environments. Click each icon below for details.
314+
315+
<div align="center">
316+
<a href="https://colab.research.google.com/github/ultralytics/yolov5/blob/master/tutorial.ipynb">
317+
<img src="https://github.com/ultralytics/yolov5/releases/download/v1.0/logo-colab-small.png" width="10%" /></a>
318+
<img src="https://github.com/ultralytics/assets/raw/master/social/logo-transparent.png" width="5%" alt="" />
319+
<a href="https://www.kaggle.com/ultralytics/yolov5">
320+
<img src="https://github.com/ultralytics/yolov5/releases/download/v1.0/logo-kaggle-small.png" width="10%" /></a>
321+
<img src="https://github.com/ultralytics/assets/raw/master/social/logo-transparent.png" width="5%" alt="" />
322+
<a href="https://hub.docker.com/r/ultralytics/yolov5">
323+
<img src="https://github.com/ultralytics/yolov5/releases/download/v1.0/logo-docker-small.png" width="10%" /></a>
324+
<img src="https://github.com/ultralytics/assets/raw/master/social/logo-transparent.png" width="5%" alt="" />
325+
<a href="https://github.com/ultralytics/yolov5/wiki/AWS-Quickstart">
326+
<img src="https://github.com/ultralytics/yolov5/releases/download/v1.0/logo-aws-small.png" width="10%" /></a>
327+
<img src="https://github.com/ultralytics/assets/raw/master/social/logo-transparent.png" width="5%" alt="" />
328+
<a href="https://github.com/ultralytics/yolov5/wiki/GCP-Quickstart">
329+
<img src="https://github.com/ultralytics/yolov5/releases/download/v1.0/logo-gcp-small.png" width="10%" /></a>
330+
</div>
331+
332+
326333
## <div align="center">Contribute</div>
327334

328335
We love your input! We want to make contributing to YOLOv5 as easy and transparent as possible. Please see our [Contributing Guide](CONTRIBUTING.md) to get started, and fill out the [YOLOv5 Survey](https://ultralytics.com/survey?utm_source=github&utm_medium=social&utm_campaign=Survey) to send us feedback on your experiences. Thank you to all our contributors!

train.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
init_seeds, intersect_dicts, labels_to_class_weights, labels_to_image_weights, methods,
5353
one_cycle, print_args, print_mutation, strip_optimizer, yaml_save)
5454
from utils.loggers import Loggers
55+
from utils.loggers.comet.comet_utils import check_comet_resume
5556
from utils.loggers.wandb.wandb_utils import check_wandb_resume
5657
from utils.loss import ComputeLoss
5758
from utils.metrics import fitness
@@ -330,7 +331,7 @@ def train(hyp, opt, device, callbacks): # hyp is path/to/hyp.yaml or hyp dictio
330331
mem = f'{torch.cuda.memory_reserved() / 1E9 if torch.cuda.is_available() else 0:.3g}G' # (GB)
331332
pbar.set_description(('%11s' * 2 + '%11.4g' * 5) %
332333
(f'{epoch}/{epochs - 1}', mem, *mloss, targets.shape[0], imgs.shape[-1]))
333-
callbacks.run('on_train_batch_end', model, ni, imgs, targets, paths)
334+
callbacks.run('on_train_batch_end', model, ni, imgs, targets, paths, list(mloss))
334335
if callbacks.stop_training:
335336
return
336337
# end batch ------------------------------------------------------------------------------------------------
@@ -465,11 +466,11 @@ def parse_opt(known=False):
465466
parser.add_argument('--seed', type=int, default=0, help='Global training seed')
466467
parser.add_argument('--local_rank', type=int, default=-1, help='Automatic DDP Multi-GPU argument, do not modify')
467468

468-
# Weights & Biases arguments
469-
parser.add_argument('--entity', default=None, help='W&B: Entity')
470-
parser.add_argument('--upload_dataset', nargs='?', const=True, default=False, help='W&B: Upload data, "val" option')
471-
parser.add_argument('--bbox_interval', type=int, default=-1, help='W&B: Set bounding-box image logging interval')
472-
parser.add_argument('--artifact_alias', type=str, default='latest', help='W&B: Version of dataset artifact to use')
469+
# Logger arguments
470+
parser.add_argument('--entity', default=None, help='Entity')
471+
parser.add_argument('--upload_dataset', nargs='?', const=True, default=False, help='Upload data, "val" option')
472+
parser.add_argument('--bbox_interval', type=int, default=-1, help='Set bounding-box image logging interval')
473+
parser.add_argument('--artifact_alias', type=str, default='latest', help='Version of dataset artifact to use')
473474

474475
return parser.parse_known_args()[0] if known else parser.parse_args()
475476

@@ -481,8 +482,8 @@ def main(opt, callbacks=Callbacks()):
481482
check_git_status()
482483
check_requirements()
483484

484-
# Resume
485-
if opt.resume and not (check_wandb_resume(opt) or opt.evolve): # resume from specified or most recent last.pt
485+
# Resume (from specified or most recent last.pt)
486+
if opt.resume and not check_wandb_resume(opt) and not check_comet_resume(opt) or opt.evolve:
486487
last = Path(check_file(opt.resume) if isinstance(opt.resume, str) else get_latest_run())
487488
opt_yaml = last.parent.parent / 'opt.yaml' # train options yaml
488489
opt_data = opt.data # original dataset

tutorial.ipynb

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,7 @@
413413
"import utils\n",
414414
"display = utils.notebook_init() # checks"
415415
],
416-
"execution_count": 1,
416+
"execution_count": null,
417417
"outputs": [
418418
{
419419
"output_type": "stream",
@@ -465,7 +465,7 @@
465465
"!python detect.py --weights yolov5s.pt --img 640 --conf 0.25 --source data/images\n",
466466
"# display.Image(filename='runs/detect/exp/zidane.jpg', width=600)"
467467
],
468-
"execution_count": 2,
468+
"execution_count": null,
469469
"outputs": [
470470
{
471471
"output_type": "stream",
@@ -535,7 +535,7 @@
535535
"torch.hub.download_url_to_file('https://ultralytics.com/assets/coco2017val.zip', 'tmp.zip') # download (780M - 5000 images)\n",
536536
"!unzip -q tmp.zip -d ../datasets && rm tmp.zip # unzip"
537537
],
538-
"execution_count": 3,
538+
"execution_count": null,
539539
"outputs": [
540540
{
541541
"output_type": "display_data",
@@ -566,7 +566,7 @@
566566
"# Validate YOLOv5s on COCO val\n",
567567
"!python val.py --weights yolov5s.pt --data coco.yaml --img 640 --half"
568568
],
569-
"execution_count": 4,
569+
"execution_count": null,
570570
"outputs": [
571571
{
572572
"output_type": "stream",
@@ -653,11 +653,14 @@
653653
"cell_type": "code",
654654
"source": [
655655
"#@title Select YOLOv5 🚀 logger {run: 'auto'}\n",
656-
"logger = 'TensorBoard' #@param ['TensorBoard', 'ClearML', 'W&B']\n",
656+
"logger = 'TensorBoard' #@param ['TensorBoard', 'Comet', 'ClearML', 'W&B']\n",
657657
"\n",
658658
"if logger == 'TensorBoard':\n",
659659
" %load_ext tensorboard\n",
660660
" %tensorboard --logdir runs/train\n",
661+
"elif logger == 'Comet':\n",
662+
" %pip install -q comet_ml\n",
663+
" import comet_ml; comet_ml.init()\n",
661664
"elif logger == 'ClearML':\n",
662665
" %pip install -q clearml && clearml-init\n",
663666
"elif logger == 'W&B':\n",
@@ -683,7 +686,7 @@
683686
"# Train YOLOv5s on COCO128 for 3 epochs\n",
684687
"!python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt --cache"
685688
],
686-
"execution_count": 5,
689+
"execution_count": null,
687690
"outputs": [
688691
{
689692
"output_type": "stream",
@@ -857,6 +860,28 @@
857860
"# 4. Visualize"
858861
]
859862
},
863+
{
864+
"cell_type": "markdown",
865+
"source": [
866+
"## Comet Logging and Visualization 🌟 NEW\n",
867+
"[Comet](https://www.comet.com/site/?ref=yolov5&utm_source=yolov5&utm_medium=affilliate&utm_campaign=yolov5_comet_integration) is now fully integrated with YOLOv5. Track and visualize model metrics in real time, save your hyperparameters, datasets, and model checkpoints, and visualize your model predictions with [Comet Custom Panels](https://www.comet.com/docs/v2/guides/comet-dashboard/code-panels/about-panels/?ref=yolov5&utm_source=yolov5&utm_medium=affilliate&utm_campaign=yolov5_comet_integration)! Comet makes sure you never lose track of your work and makes it easy to share results and collaborate across teams of all sizes! \n",
868+
"\n",
869+
"Getting started is easy:\n",
870+
"```shell\n",
871+
"pip install comet_ml # 1. install\n",
872+
"export COMET_API_KEY=<Your API Key> # 2. paste API key\n",
873+
"python train.py --img 640 --epochs 3 --data coco128.yaml --weights yolov5s.pt # 3. train\n",
874+
"```\n",
875+
"\n",
876+
"To learn more about all of the supported Comet features for this integration, check out the [Comet Tutorial](https://github.com/ultralytics/yolov5/tree/master/utils/loggers/comet). If you'd like to learn more about Comet, head over to our [documentation](https://www.comet.com/docs/v2/?ref=yolov5&utm_source=yolov5&utm_medium=affilliate&utm_campaign=yolov5_comet_integration). Get started by trying out the Comet Colab Notebook:\n",
877+
"[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1RG0WOQyxlDlo5Km8GogJpIEJlg_5lyYO?usp=sharing)\n",
878+
"\n",
879+
"<img width=\"1920\" alt=\"yolo-ui\" src=\"https://user-images.githubusercontent.com/7529846/187608607-ff89c3d5-1b8b-4743-a974-9275301b0524.png\">"
880+
],
881+
"metadata": {
882+
"id": "nWOsI5wJR1o3"
883+
}
884+
},
860885
{
861886
"cell_type": "markdown",
862887
"source": [
@@ -1096,4 +1121,4 @@
10961121
"outputs": []
10971122
}
10981123
]
1099-
}
1124+
}

0 commit comments

Comments
 (0)