Yes, I use YOLO3DefaultTrainTransform in my case. Change the detection size to 608 can detect more pikachu, but still lack than SSD, maybe one of the reason is pikachu are too small and yolov3 is bad at detect small object compare with ssd.
def get_dataloader(net, train_dataset, val_dataset, data_shape, batch_size, num_workers, args):
"""Get dataloader."""
width, height = data_shape, data_shape
batchify_fn = Tuple(*([Stack() for _ in range(6)] + [Pad(axis=0, pad_val=-1) for _ in range(1)])) # stack image, all targets generated
if args.no_random_shape:
print("no random shape")
train_loader = gluon.data.DataLoader(
train_dataset.transform(YOLO3DefaultTrainTransform(width, height, net, mixup=args.mixup)),
batch_size, True, batchify_fn=batchify_fn, last_batch='rollover', num_workers=num_workers)
else:
print("with random shape")
transform_fns = [YOLO3DefaultTrainTransform(x * 32, x * 32, net, mixup=args.mixup) for x in range(10, 20)]
train_loader = RandomTransformDataLoader(
transform_fns, train_dataset, batch_size=batch_size, interval=10, last_batch='rollover',
shuffle=True, batchify_fn=batchify_fn, num_workers=num_workers)
val_batchify_fn = Tuple(Stack(), Pad(pad_val=-1))
val_loader = gluon.data.DataLoader(
val_dataset.transform(YOLO3DefaultValTransform(width, height)),
batch_size, True, batchify_fn=val_batchify_fn, last_batch='keep', num_workers=num_workers)
return train_loader, val_loader
Traceback (most recent call last):
File "train_yolo3_custom.py", line 364, in <module>
validate(net, val_data, ctx, eval_metric)
File "train_yolo3_custom.py", line 181, in validate
eval_metric.update(det_bboxes, det_ids, det_scores, gt_bboxes, gt_ids, gt_difficults)
File "C:\Users\yyyy\Anaconda3\lib\site-packages\gluoncv\utils\metrics\voc_detection.py", line 107, in update
gt_bboxes, gt_labels, gt_difficults]]):
File "C:\Users\yyyy\Anaconda3\lib\site-packages\gluoncv\utils\metrics\voc_detection.py", line 106, in <listcomp>
*[as_numpy(x) for x in [pred_bboxes, pred_labels, pred_scores,
File "C:\Users\yyyy\Anaconda3\lib\site-packages\gluoncv\utils\metrics\voc_detection.py", line 97, in as_numpy
return np.concatenate(out, axis=0)
ValueError: zero-dimensional arrays cannot be concatenated
My goal is make the script support any rec file, I use pikachu_train.rec in this post because I want to make sure the data is fine.
Full codes are put here pastebin
Thanks for your help