yolox训练数据的入口为YOLOX-main/tools/train.py。main函数中通过get_exp获取训练过程相关的超参数。
其中train.py中的make_parser函数的参数解析如下:
-expn: 训练过程数据保存的位置,默认位置是tools/YOLOX_outputs中的目录,如果指定-expn xxx,则tools/YOLOX_outputs/xxx
-n: 指定训练过程的模型名称,如yolox-s,yolox-m,yolox-l,yolox-x,yolox-tiny等
-b: 训练过程中的batch size大小
-d: 指定训练过程中使用的设备
-f: 设置训练过程中数据加载的python文件,如exps/example/yolox_voc/yolox_voc_s.py
-c: 设置预训练权重文件
-e: 开始训练的周期数
--fp16: 是否允许Apex的混合精度加速,使得训练时间缩短。代码实现如下:
from apex import amp
model, optimizer = amp.initialize(model, optimizer, opt_level="O1") # 这里是“欧一”,不是“零一”
with amp.scale_loss(loss, optimizer) as scaled_loss:
scaled_loss.backward()
混合精度训练(Mixed Precision)的精髓在于“在内存中用 FP16 做储存和乘法从而加速计算,用 FP32 做累加避免舍入误差”。混合精度训练的策略有效地缓解了舍入误差的问题。
-o: 是否首先占用GPU内存进行训练
opts: 通过命令行的形式修改训练过程的超参数
(2) 第二步(数据加载):训练过程中如果指定为VOC数据,则通过
-f exps/example/yolox_voc/yolox_voc_s.py
完整的训练语句:
python tools/train.py -f exps/example/yolox_voc/yolox_voc_s.py -d 8 -b 64 --fp16 -o -c /path/to/yolox_s.pth