知名的传媒行业网站开发,我国网站无障碍建设仍处于,服务营销策略,西安网站建设案例导入 还有高手 BaseExpsuper().__init__()模型配置 数据加载配置 输入尺寸 变换尺寸 train_ann和val_ann是训练使用的标注文件degrees 随机旋转角度范围 translate随机平移比例 scale缩放范围 mscale mosaic里的缩放范围#xff0c;在使用mosaic拼图时#xff0c;控制四张…导入 还有高手 BaseExpsuper().__init__()模型配置 数据加载配置 输入尺寸 变换尺寸 train_ann和val_ann是训练使用的标注文件degrees 随机旋转角度范围 translate随机平移比例 scale缩放范围 mscale mosaic里的缩放范围在使用mosaic拼图时控制四张图各自的缩放比例 shear 错切变换角度让图像产生斜拉的几何变形 perspective 透视变换强度 enable_mixup 意思是两张图按比例叠加bbox合并这些数据增强的具体的步骤看下面是定义在哪个类中就是在哪个类中实现的 去找这个类所在的代码文件就知道 这个操作具体是如何实现的了训练配置 预热epoch 是5 最大是300 预热的学习率是0这个后面应该会改 每个图像的学习率是 0.01/64 final_lr basic_lr_per_img × total_batch_sizescheduler是啥 学习率调度器 控制学习率随epoch怎么变化的策略 无数据增强的epoch是15那就是最后15个epoch无数据增强 最小的学习率比例 最小lr初始lr*0.5防止lr衰减到0 ema是啥 权重衰减是干啥的 momentum是干啥的 动量 更新方向不仅只看当前梯度还要看过去梯度 昨天就有一个 0.9 0.1的比例 每10个step打印一次 推理是10个epoch/ 获得代码文件名字作为输出的exp_name测试的输入图像的大小 测试的配置0.001 置信度阈值 貌似说的是在追踪阶段进行处理 nmsthre nms阈值 去重标准 多个框框住同一个目标 只保留一个yolox.models导入这三个类 我定义的一个函数init_yolo 输入M M应该是一个模型 M.modules 就是模型里的所有子模块 对于每一层如果 isinatance(m,nn.batchnorm2d)为真设置eps 和 momentum (不知道eps)是啥这个依附斯洛 然后如果getattr 这个函数不知道哪里来的 里面的参数是这些 不是none的话 设置输入通道和backnone head self.model就有了 然后不知道apply这个是如何引出的 哪里有这个函数 然后Head.initialize这个函数在哪里弄得 这两步骤都经过啥了 给这个model干啥了 然后最后return modelmodel.modules 会遍历所有模块instance(m,nn.batchnorm2d)层 只筛选 二维 batchnorm层getattr是python内置函数 apply是pytorch的nn.module放啊看sampler和dataloader跟前面看那个差不多 不看了 看下面这个random_resizedef random_resize(self, data_loader, epoch, rank, is_distributed):#数据加载\epoch\rank 是否分布式训练tensor torch.LongTensor(2).cuda() 创建一个长度为2的Tensor 放在GPU上 作用是在多进程之间同步输入尺寸 tensor[0] height。tensor[1] widthif rank 0:# 只让rank0来做这个 随机只能发生一次size_factor self.input_size[1] * 1.0 / self.input_size[0] 计算宽高比例 这是前面的self.input_sizesize random.randint(*self.random_size) *self.random_size 将这个范围解包为两个独立的参数 在这个范围之间 生成一个数字size (int(32 * size), 32 * int(size * size_factor)) 32乘以这个数字 到 这个数字乘以宽高比例再乘以32 size在这个范围内 这是高度 和 宽度tensor[0] size[0]#tensor[0]是第一个 数字 高tensor[1] size[1]# tensor[1]是第二个 数字if is_distributed: #如果分布式训练 后面的进程要和前面的进程保持一致 主进程将生成的tensor 发送给其他GPU进程dist.barrier()dist.broadcast(tensor, 0)input_size data_loader.change_input_dim(multiple(tensor[0].item(), tensor[1].item()), random_rangeNone)#使用这个固定的尺寸return input_size#每n个interation变一次#然后下面对于优化器的定义def get_optimizer(self, batch_size):if optimizer not in self.__dict__:#不在这个里面意思是还没创建 仅仅是创建一次if self.warmup_epochs 0:#设置warmup_epoch大于0 我记得貌似是5 lrlr self.warmup_lrelse:#不然按照这个lr self.basic_lr_per_img * batch_sizepg0, pg1, pg2 [], [], [] # optimizer parameter groups#设置三个列表for k, v in self.model.named_modules():if hasattr(v, bias) and isinstance(v.bias, nn.Parameter):pg2.append(v.bias) # biasesif isinstance(v, nn.BatchNorm2d) or bn in k:pg0.append(v.weight) # no decayelif hasattr(v, weight) and isinstance(v.weight, nn.Parameter):pg1.append(v.weight) # apply decayoptimizer torch.optim.SGD(pg0, lrlr, momentumself.momentum, nesterovTrue)optimizer.add_param_group({params: pg1, weight_decay: self.weight_decay}) # add pg1 with weight_decayoptimizer.add_param_group({params: pg2})self.optimizer optimizer不想看了 先这样吧反正就是各个部分写一个代码 然后组合起来去调用