源码地址:

https://github.com/ultralytics/yolov5/tree/v4.0

2021/6/18 开始学习源码,持续更新中

第1遍:以train.py文件为中心,学习YOLOv5是如何训练的

1.logging

2.pathlib

3.from torch.nn.parallel import DistributedDataParallel as DDP

4.import torch.distributed as dist

# utils\torch_utils.py   line:27
@contextmanager
def torch_distributed_zero_first(local_rank: int):
    """
    Decorator to make all processes in distributed training wait for each local_master to do something.
    """
    if local_rank not in [-1, 0]:
        torch.distributed.barrier()
    yield
    if local_rank == 0:
        torch.distributed.barrier()

一个进程碰到torch.distributed.barrier()就会等待,等到所有进程都碰到了torch.distributed.barrier(),就会一起解除等待,都开始运行,这是一个多进程的同步机制,目的是让rank=0的主进程单独完成一项工作,其他进程等待主进程完成这项工作。

5.wandb(待学习)

6. k是什么类型,为什么any()要这么写

    # Freeze
    freeze = []  # parameter names to freeze (full or partial)
    for k, v in model.named_parameters():
        v.requires_grad = True  # train all layers
        if any(x in k for x in freeze):
            print('freezing %s' % k)
            v.requires_grad = False

7.param group 

# train.py line 124
    if opt.adam:
        optimizer = optim.Adam(pg0, lr=hyp['lr0'], betas=(hyp['momentum'], 0.999))  # adjust beta1 to momentum
    else:
        optimizer = optim.SGD(pg0, lr=hyp['lr0'], momentum=hyp['momentum'], nesterov=True)

    optimizer.add_param_group({'params': pg1, 'weight_decay': hyp['weight_decay']})  # add pg1 with weight_decay
    optimizer.add_param_group({'params': pg2})  # add pg2 (biases)
    logger.info('Optimizer groups: %g .bias, %g conv.weight, %g other' % (len(pg2), len(pg1), len(pg0)))
    del pg0, pg1, pg2

8.cudnn

https://pytorch.org/docs/stable/notes/randomness.html

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐