源码学习:U版YOLOv5(持续更新)
源码地址:https://github.com/ultralytics/yolov5/tree/v4.02021/6/18 开始学习源码,持续更新中
·
源码地址:
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
更多推荐
已为社区贡献1条内容
所有评论(0)