diff --git a/train.py b/train.py index f2fde133..e5af1d00 100644 --- a/train.py +++ b/train.py @@ -20,6 +20,10 @@ last = wdir + 'last.pt' best = wdir + 'best.pt' results_file = 'results.txt' +# last = '../coco/last_sgd273_default_ltrb25x4.pt' +# best = '../coco/best_sgd273_default_ltrb25x4.pt' +# results_file = '../coco/results_sgd273_default_ltrb25x4.txt' + # Hyperparameters (j-series, 50.5 mAP yolov3-320) evolved by @ktian08 https://github.com/ultralytics/yolov3/issues/310 hyp = {'giou': 1.582, # giou loss gain 'cls': 27.76, # cls loss gain (CE=~1.0, uCE=~20) @@ -386,8 +390,8 @@ if __name__ == '__main__': parser.add_argument('--epochs', type=int, default=273) # 500200 batches at bs 16, 117263 images = 273 epochs parser.add_argument('--batch-size', type=int, default=32) # effective bs = batch_size * accumulate = 16 * 4 = 64 parser.add_argument('--accumulate', type=int, default=2, help='batches to accumulate before optimizing') - parser.add_argument('--cfg', type=str, default='cfg/yolov3-spp.cfg', help='cfg file path') - parser.add_argument('--data', type=str, default='data/coco.data', help='*.data file path') + parser.add_argument('--cfg', type=str, default='cfg/yolov3-spp-2overlap.cfg', help='cfg file path') + parser.add_argument('--data', type=str, default='data/coco_64img.data', help='*.data file path') parser.add_argument('--multi-scale', action='store_true', help='adjust (67% - 150%) img_size every 10 batches') parser.add_argument('--img-size', type=int, default=416, help='inference size (pixels)') parser.add_argument('--rect', action='store_true', help='rectangular training') diff --git a/utils/datasets.py b/utils/datasets.py index ae5d89ce..6f891365 100755 --- a/utils/datasets.py +++ b/utils/datasets.py @@ -644,7 +644,7 @@ def cutout(image, labels): return inter_area / box2_area # create random masks - scales = [0.5] * 1 # + [0.25] * 4 + [0.125] * 16 # image size fraction + scales = [0.5] * 1 # + [0.25] * 4 + [0.125] * 16 + [0.0625] * 64 + [0.03125] * 256 # image size fraction for s in scales: mask_h = random.randint(1, int(h * s)) mask_w = random.randint(1, int(w * s)) @@ -660,7 +660,7 @@ def cutout(image, labels): image[ymin:ymax, xmin:xmax] = mask_color # return unobscured labels - if len(labels): + if len(labels) and s > 0.03: box = np.array([xmin, ymin, xmax, ymax], dtype=np.float32) ioa = bbox_ioa(box, labels[:, 1:5]) # intersection over area labels = labels[ioa < 0.90] # remove >90% obscured labels