glenn-jocher commited on
Commit
9f482cb
1 Parent(s): 4949401

utils.general comment updates/bug fixes

Browse files
Files changed (4) hide show
  1. Dockerfile +1 -1
  2. detect.py +1 -1
  3. tutorial.ipynb +2 -2
  4. utils/general.py +12 -12
Dockerfile CHANGED
@@ -43,7 +43,7 @@ COPY . /usr/src/app
43
  # sudo docker commit 092b16b25c5b usr/resume && sudo docker run -it --gpus all --ipc=host -v "$(pwd)"/coco:/usr/src/coco --entrypoint=sh usr/resume
44
 
45
  # Send weights to GCP
46
- # python -c "from utils.utils import *; strip_optimizer('runs/exp0/weights/last.pt', 'temp.pt')" && gsutil cp temp.pt gs://*
47
 
48
  # Clean up
49
  # docker system prune -a --volumes
 
43
  # sudo docker commit 092b16b25c5b usr/resume && sudo docker run -it --gpus all --ipc=host -v "$(pwd)"/coco:/usr/src/coco --entrypoint=sh usr/resume
44
 
45
  # Send weights to GCP
46
+ # python -c "from utils.general import *; strip_optimizer('runs/exp0_*/weights/last.pt', 'tmp.pt')" && gsutil cp tmp.pt gs://*
47
 
48
  # Clean up
49
  # docker system prune -a --volumes
detect.py CHANGED
@@ -138,7 +138,7 @@ def detect(save_img=False):
138
 
139
  if save_txt or save_img:
140
  print('Results saved to %s' % Path(out))
141
- if platform == 'darwin' and not opt.update: # MacOS
142
  os.system('open ' + save_path)
143
 
144
  print('Done. (%.3fs)' % (time.time() - t0))
 
138
 
139
  if save_txt or save_img:
140
  print('Results saved to %s' % Path(out))
141
+ if platform.system() == 'Darwin' and not opt.update: # MacOS
142
  os.system('open ' + save_path)
143
 
144
  print('Done. (%.3fs)' % (time.time() - t0))
tutorial.ipynb CHANGED
@@ -622,7 +622,7 @@
622
  "colab_type": "text"
623
  },
624
  "source": [
625
- "Training losses and performance metrics are saved to Tensorboard and also to a `runs/exp0/results.txt` logfile. `results.txt` is plotted as `results.png` after training completes. Partially completed `results.txt` files can be plotted with `from utils.utils import plot_results; plot_results()`. Here we show YOLOv5s trained on coco128 to 300 epochs, starting from scratch (blue), and from pretrained `yolov5s.pt` (orange)."
626
  ]
627
  },
628
  {
@@ -637,7 +637,7 @@
637
  "outputId": "c1146425-643e-49ab-de25-73216f0dde23"
638
  },
639
  "source": [
640
- "from utils.utils import plot_results; plot_results() # plot results.txt files as results.png"
641
  ],
642
  "execution_count": null,
643
  "outputs": [
 
622
  "colab_type": "text"
623
  },
624
  "source": [
625
+ "Training losses and performance metrics are saved to Tensorboard and also to a `runs/exp0/results.txt` logfile. `results.txt` is plotted as `results.png` after training completes. Partially completed `results.txt` files can be plotted with `from utils.general import plot_results; plot_results()`. Here we show YOLOv5s trained on coco128 to 300 epochs, starting from scratch (blue), and from pretrained `yolov5s.pt` (orange)."
626
  ]
627
  },
628
  {
 
637
  "outputId": "c1146425-643e-49ab-de25-73216f0dde23"
638
  },
639
  "source": [
640
+ "from utils.general import plot_results; plot_results() # plot results.txt files as results.png"
641
  ],
642
  "execution_count": null,
643
  "outputs": [
utils/general.py CHANGED
@@ -670,7 +670,7 @@ def non_max_suppression(prediction, conf_thres=0.1, iou_thres=0.6, merge=False,
670
  return output
671
 
672
 
673
- def strip_optimizer(f='weights/best.pt', s=''): # from utils.utils import *; strip_optimizer()
674
  # Strip optimizer from 'f' to finalize training, optionally save as 's'
675
  x = torch.load(f, map_location=torch.device('cpu'))
676
  x['optimizer'] = None
@@ -695,7 +695,7 @@ def coco_class_count(path='../coco/labels/train2014/'):
695
  print(i, len(files))
696
 
697
 
698
- def coco_only_people(path='../coco/labels/train2017/'): # from utils.utils import *; coco_only_people()
699
  # Find images with only people
700
  files = sorted(glob.glob('%s/*.*' % path))
701
  for i, file in enumerate(files):
@@ -704,7 +704,7 @@ def coco_only_people(path='../coco/labels/train2017/'): # from utils.utils impo
704
  print(labels.shape[0], file)
705
 
706
 
707
- def crop_images_random(path='../images/', scale=0.50): # from utils.utils import *; crop_images_random()
708
  # crops images into random squares up to scale fraction
709
  # WARNING: overwrites images!
710
  for file in tqdm(sorted(glob.glob('%s/*.*' % path))):
@@ -728,7 +728,7 @@ def crop_images_random(path='../images/', scale=0.50): # from utils.utils impor
728
 
729
 
730
  def coco_single_class_labels(path='../coco/labels/train2014/', label_class=43):
731
- # Makes single-class coco datasets. from utils.utils import *; coco_single_class_labels()
732
  if os.path.exists('new/'):
733
  shutil.rmtree('new/') # delete output folder
734
  os.makedirs('new/') # make new output folder
@@ -763,7 +763,7 @@ def kmean_anchors(path='./data/coco128.yaml', n=9, img_size=640, thr=4.0, gen=10
763
  k: kmeans evolved anchors
764
 
765
  Usage:
766
- from utils.utils import *; _ = kmean_anchors()
767
  """
768
  thr = 1. / thr
769
 
@@ -986,7 +986,7 @@ def plot_one_box(x, img, color=None, label=None, line_thickness=None):
986
  cv2.putText(img, label, (c1[0], c1[1] - 2), 0, tl / 3, [225, 255, 255], thickness=tf, lineType=cv2.LINE_AA)
987
 
988
 
989
- def plot_wh_methods(): # from utils.utils import *; plot_wh_methods()
990
  # Compares the two methods for width-height anchor multiplication
991
  # https://github.com/ultralytics/yolov3/issues/168
992
  x = np.arange(-4.0, 4.0, .1)
@@ -1107,7 +1107,7 @@ def plot_lr_scheduler(optimizer, scheduler, epochs=300, save_dir=''):
1107
  plt.savefig(Path(save_dir) / 'LR.png', dpi=200)
1108
 
1109
 
1110
- def plot_test_txt(): # from utils.utils import *; plot_test()
1111
  # Plot test.txt histograms
1112
  x = np.loadtxt('test.txt', dtype=np.float32)
1113
  box = xyxy2xywh(x[:, :4])
@@ -1124,7 +1124,7 @@ def plot_test_txt(): # from utils.utils import *; plot_test()
1124
  plt.savefig('hist1d.png', dpi=200)
1125
 
1126
 
1127
- def plot_targets_txt(): # from utils.utils import *; plot_targets_txt()
1128
  # Plot targets.txt histograms
1129
  x = np.loadtxt('targets.txt', dtype=np.float32).T
1130
  s = ['x targets', 'y targets', 'width targets', 'height targets']
@@ -1137,7 +1137,7 @@ def plot_targets_txt(): # from utils.utils import *; plot_targets_txt()
1137
  plt.savefig('targets.jpg', dpi=200)
1138
 
1139
 
1140
- def plot_study_txt(f='study.txt', x=None): # from utils.utils import *; plot_study_txt()
1141
  # Plot study.txt generated by test.py
1142
  fig, ax = plt.subplots(2, 4, figsize=(10, 6), tight_layout=True)
1143
  ax = ax.ravel()
@@ -1188,7 +1188,7 @@ def plot_labels(labels, save_dir=''):
1188
  plt.close()
1189
 
1190
 
1191
- def plot_evolution(yaml_file='runs/evolve/hyp_evolved.yaml'): # from utils.utils import *; plot_evolution()
1192
  # Plot hyperparameter evolution results in evolve.txt
1193
  with open(yaml_file) as f:
1194
  hyp = yaml.load(f, Loader=yaml.FullLoader)
@@ -1212,7 +1212,7 @@ def plot_evolution(yaml_file='runs/evolve/hyp_evolved.yaml'): # from utils.util
1212
  print('\nPlot saved as evolve.png')
1213
 
1214
 
1215
- def plot_results_overlay(start=0, stop=0): # from utils.utils import *; plot_results_overlay()
1216
  # Plot training 'results*.txt', overlaying train and val losses
1217
  s = ['train', 'train', 'train', 'Precision', 'mAP@0.5', 'val', 'val', 'val', 'Recall', 'mAP@0.5:0.95'] # legends
1218
  t = ['GIoU', 'Objectness', 'Classification', 'P-R', 'mAP-F1'] # titles
@@ -1236,7 +1236,7 @@ def plot_results_overlay(start=0, stop=0): # from utils.utils import *; plot_re
1236
 
1237
 
1238
  def plot_results(start=0, stop=0, bucket='', id=(), labels=(),
1239
- save_dir=''): # from utils.utils import *; plot_results()
1240
  # Plot training 'results*.txt' as seen in https://github.com/ultralytics/yolov5#reproduce-our-training
1241
  fig, ax = plt.subplots(2, 5, figsize=(12, 6))
1242
  ax = ax.ravel()
 
670
  return output
671
 
672
 
673
+ def strip_optimizer(f='weights/best.pt', s=''): # from utils.general import *; strip_optimizer()
674
  # Strip optimizer from 'f' to finalize training, optionally save as 's'
675
  x = torch.load(f, map_location=torch.device('cpu'))
676
  x['optimizer'] = None
 
695
  print(i, len(files))
696
 
697
 
698
+ def coco_only_people(path='../coco/labels/train2017/'): # from utils.general import *; coco_only_people()
699
  # Find images with only people
700
  files = sorted(glob.glob('%s/*.*' % path))
701
  for i, file in enumerate(files):
 
704
  print(labels.shape[0], file)
705
 
706
 
707
+ def crop_images_random(path='../images/', scale=0.50): # from utils.general import *; crop_images_random()
708
  # crops images into random squares up to scale fraction
709
  # WARNING: overwrites images!
710
  for file in tqdm(sorted(glob.glob('%s/*.*' % path))):
 
728
 
729
 
730
  def coco_single_class_labels(path='../coco/labels/train2014/', label_class=43):
731
+ # Makes single-class coco datasets. from utils.general import *; coco_single_class_labels()
732
  if os.path.exists('new/'):
733
  shutil.rmtree('new/') # delete output folder
734
  os.makedirs('new/') # make new output folder
 
763
  k: kmeans evolved anchors
764
 
765
  Usage:
766
+ from utils.general import *; _ = kmean_anchors()
767
  """
768
  thr = 1. / thr
769
 
 
986
  cv2.putText(img, label, (c1[0], c1[1] - 2), 0, tl / 3, [225, 255, 255], thickness=tf, lineType=cv2.LINE_AA)
987
 
988
 
989
+ def plot_wh_methods(): # from utils.general import *; plot_wh_methods()
990
  # Compares the two methods for width-height anchor multiplication
991
  # https://github.com/ultralytics/yolov3/issues/168
992
  x = np.arange(-4.0, 4.0, .1)
 
1107
  plt.savefig(Path(save_dir) / 'LR.png', dpi=200)
1108
 
1109
 
1110
+ def plot_test_txt(): # from utils.general import *; plot_test()
1111
  # Plot test.txt histograms
1112
  x = np.loadtxt('test.txt', dtype=np.float32)
1113
  box = xyxy2xywh(x[:, :4])
 
1124
  plt.savefig('hist1d.png', dpi=200)
1125
 
1126
 
1127
+ def plot_targets_txt(): # from utils.general import *; plot_targets_txt()
1128
  # Plot targets.txt histograms
1129
  x = np.loadtxt('targets.txt', dtype=np.float32).T
1130
  s = ['x targets', 'y targets', 'width targets', 'height targets']
 
1137
  plt.savefig('targets.jpg', dpi=200)
1138
 
1139
 
1140
+ def plot_study_txt(f='study.txt', x=None): # from utils.general import *; plot_study_txt()
1141
  # Plot study.txt generated by test.py
1142
  fig, ax = plt.subplots(2, 4, figsize=(10, 6), tight_layout=True)
1143
  ax = ax.ravel()
 
1188
  plt.close()
1189
 
1190
 
1191
+ def plot_evolution(yaml_file='runs/evolve/hyp_evolved.yaml'): # from utils.general import *; plot_evolution()
1192
  # Plot hyperparameter evolution results in evolve.txt
1193
  with open(yaml_file) as f:
1194
  hyp = yaml.load(f, Loader=yaml.FullLoader)
 
1212
  print('\nPlot saved as evolve.png')
1213
 
1214
 
1215
+ def plot_results_overlay(start=0, stop=0): # from utils.general import *; plot_results_overlay()
1216
  # Plot training 'results*.txt', overlaying train and val losses
1217
  s = ['train', 'train', 'train', 'Precision', 'mAP@0.5', 'val', 'val', 'val', 'Recall', 'mAP@0.5:0.95'] # legends
1218
  t = ['GIoU', 'Objectness', 'Classification', 'P-R', 'mAP-F1'] # titles
 
1236
 
1237
 
1238
  def plot_results(start=0, stop=0, bucket='', id=(), labels=(),
1239
+ save_dir=''): # from utils.general import *; plot_results()
1240
  # Plot training 'results*.txt' as seen in https://github.com/ultralytics/yolov5#reproduce-our-training
1241
  fig, ax = plt.subplots(2, 5, figsize=(12, 6))
1242
  ax = ax.ravel()