# 附加Model attributes
# nl:这个属性代表模型中的检测层数量。它用于调整假设的规模。
nl = de_parallel(model).model[-1].nl # 检测层的数量(用于缩放hyps)
# hyp['box']:该属性被缩放了3除以nl的因子。它用于调整边界框的大小。
hyp['box'] *= 3 / nl # # 缩放到层级
# hyp['cls']:该属性被缩放了nc / 80乘以3除以nl的因子。它用于调整类别和层数的大小。
hyp['cls'] *= nc / 80 * 3 / nl # 缩放到类别和层级
# hyp['obj']:该属性被缩放了(imgsz / 640) ** 2乘以3除以nl的因子。它用于根据图像大小和层数调整对象的大小。
hyp['obj'] *= (imgsz / 640) ** 2 * 3 / nl # 缩放到图像大小和层级
# hyp['label_smoothing']:该属性被设置为opt.label_smoothing的值。它用于在训练过程中进行标签平滑处理。
hyp['label_smoothing'] = opt.label_smoothing
# model.nc:该属性代表模型中的类别数量。nc被附加到模型上。
model.nc = nc # 将类别数量附加到模型
# model.hyp:该属性代表模型的超参数。hyp被附加到模型上。
model.hyp = hyp # 将超参数附加到模型
# 从训练样本标签得到类别权重(和类别中的目标数即类别频率成反比)
# model.class_weights:该属性代表模型的类别权重。它使用labels_to_class_weights函数和数据集的标签以及nc作为参数进行计算。然后乘以nc并附加到模型上。
model.class_weights = labels_to_class_weights(dataset.labels, nc).to(device) * nc # 附加类别权重
# model.names:该属性代表模型中类别的名称。
model.names = names # 获取类别名
nl
:这个属性代表模型中的检测层数量。它用于调整假设的规模。
hyp['box']
:该属性被缩放了3除以nl
的因子。它用于调整边界框的大小。
hyp['cls']
:该属性被缩放了nc / 80
乘以3除以nl
的因子。它用于调整类别和层数的大小。
hyp['obj']
:该属性被缩放了(imgsz / 640) ** 2
乘以3除以nl
的因子。它用于根据图像大小和层数调整对象的大小。
hyp['label_smoothing']
:该属性被设置为opt.label_smoothing
的值。它用于在训练过程中进行标签平滑处理。
model.nc
:该属性代表模型中的类别数量。它被附加到模型上。
model.hyp
:该属性代表模型的超参数。它被附加到模型上。
model.class_weights
:该属性代表模型的类别权重。它使用labels_to_class_weights
函数和数据集的标签以及nc
作为参数进行计算。然后乘以nc
并附加到模型上。
model.names
:该属性代表模型中类别的名称。