Open e96031413 opened 4 years ago
group_id
沒增加code的話結構會變
訓練yolov4-tiny的程式可以參考這裡
或者試試在這行後面暫時加上 balance = [0.4, 1.0] if np == 2 else balance
好的,謝謝您的回覆
我兩個方法都嘗試看看,後續有結果再回來通知
在ScaledYOLOv4的這行後面加上 balance = [0.4, 1.0] if np == 2 else balance,進行YOLOv4-Tiny訓練後,所測試出來的結果
指令如下:
python -m torch.distributed.launch --nproc_per_node 4 train.py --device 0,1,2,3 --batch-size 64 --data coco.yaml --cfg yolov4-tiny.cfg --weights 'yolov4-tiny.conv.29' --name yolov4-tiny --sync-bn
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.193
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.357
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.182
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.070
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.260
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.287
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.187
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.318
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.353
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.134
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.473
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.517
目前來測試PyTorch_YOLOv4的u3_preview版本看看
修改了PyTorch_YOLOv4的u3_preview當中,models.py第355行(支援pre-trained weight)、train.py第67行(支援32倍數的解析度)、dataset.py第262及267行(處理dataset相對路徑的問題)
models.py line 355
def load_darknet_weights(self, weights, cutoff=-1):
# Parses and loads the weights stored in 'weights'
# Establish cutoffs (load layers between 0 and cutoff. if cutoff = -1 all are loaded)
file = Path(weights).name
if file == 'darknet53.conv.74':
cutoff = 75
elif file == 'yolov3-tiny.conv.15':
cutoff = 15
elif file == 'yolov4-tiny.conv.29':
cutoff = 29
.
.
.
.
train.py line 67
gs = 32 # (pixels) grid size # 原本gs = 64改成32
assert math.fmod(imgsz_min, gs) == 0, '--img-size %g must be a %g-multiple' % (imgsz_min, gs)
utils/dataset.py line 262 and 267
class LoadImagesAndLabels(Dataset): # for training/testing
def __init__(self, path, img_size=416, batch_size=16, augment=False, hyp=None, rect=False, image_weights=False,
cache_images=False, single_cls=False):
path = str(Path(path)) # os-agnostic
parent = str(Path(path).parent) + os.sep # add this
assert os.path.isfile(path), 'File not found %s. See %s' % (path, help_url)
with open(path, 'r') as f:
self.img_files = [x.replace('/', os.sep) for x in f.read().splitlines() # os-agnostic
if os.path.splitext(x)[-1].lower() in img_formats]
self.img_files = [x.replace('./', parent) if x.startswith('./') else x for x in self.img_files] # add this
透過u3_preview版本經由以下指令訓練300個Epochs並進行testing得到的AP結果:
CUDA_VISIBLE_DEVICES=0 python train.py --data coco2017.data --cfg yolov4-tiny.cfg --weights 'yolov4-tiny.conv.29' --name yolov4-tiny --img 416 416 416
python test.py --data coco2017.data --cfg yolov4-tiny.cfg --weights weights/best.pt --img 416 --batch-size 8
darknet版本測出是40.2
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.221
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.394
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.219
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.077
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.263
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.340
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.217
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.368
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.400
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.151
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.484
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.612
這幾天嘗試透過yolov4-csp的branch進行COCO 2017 dataset訓練,為了讓yolov4-tiny能過正常訓練,我在parse_config.py中的supported新增了['resize','group_id'],讓yolov4-tiny.cfg中的這兩個參數得以被讀取到,其餘程式碼沒有任何更動。
結果發現訓練出來的yolov4-tiny,AP表現低於您在darknet上所測出來的yolov4-tiny,如下表所示:
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.158 Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.299 Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.150 Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.052 Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.212 Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.248 Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.169 Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.285 Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.313 Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.097 Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.421 Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.482
使用的指令是:
python -m torch.distributed.launch --nproc_per_node 4 train.py --device 0,1,2,3 --batch-size 64 --data coco.yaml --cfg yolov4-tiny.cfg --weights 'yolov4-tiny.conv.29' --name yolov4-tiny --sync-bn
之前曾經嘗試在ultralytics/yolov3版本底下訓練YOLOv3-tiny過,測試出來的AP結果還蠻正常的,與darknet版本差不多。
我自己有在猜測會不會是使用多顆GPU進行訓練的關係,不過也不是很確定就是了
我也有讀了yolov4-csp branch中的models.py、layers.py、test.py,發現與ultralytics/yolov3的差異不是很大,不知道您針對這個現象有沒有什麼想法呢?
Hi @e96031413 How did you make yolov4-csp branch support ['resize','group_id']? Could you please help me with that?
Hi @kanybekasanbekov,
Just add 'resize' and 'group_id' in yolov4-csp/utils/parse_config.py
supported = ['type', 'batch_normalize', 'filters', 'size', 'stride', 'pad', 'activation', 'layers', 'groups',
'from', 'mask', 'anchors', 'classes', 'num', 'jitter', 'ignore_thresh', 'truth_thresh', 'random',
'stride_x', 'stride_y', 'weights_type', 'weights_normalization', 'scale_x_y', 'beta_nms','nms_kind',
'iou_loss', 'iou_normalizer', 'cls_normalizer', 'iou_thresh', 'atoms', 'na', 'nc', 'resize', 'group_id']
這幾天嘗試透過yolov4-csp的branch進行COCO 2017 dataset訓練,為了讓yolov4-tiny能過正常訓練,我在parse_config.py中的supported新增了['resize','group_id'],讓yolov4-tiny.cfg中的這兩個參數得以被讀取到,其餘程式碼沒有任何更動。
結果發現訓練出來的yolov4-tiny,AP表現低於您在darknet上所測出來的yolov4-tiny,如下表所示:
使用的指令是:
之前曾經嘗試在ultralytics/yolov3版本底下訓練YOLOv3-tiny過,測試出來的AP結果還蠻正常的,與darknet版本差不多。
我自己有在猜測會不會是使用多顆GPU進行訓練的關係,不過也不是很確定就是了
我也有讀了yolov4-csp branch中的models.py、layers.py、test.py,發現與ultralytics/yolov3的差異不是很大,不知道您針對這個現象有沒有什麼想法呢?