1. 多卡训练
CUDA_VISIBLE_DEVICES=0,1,2,3 PORT=15200 ./tool/dist_train.py configs/***.py 4
多机多卡:
机器1: python -m torch.distributed.launch --nproc_per_node=8 --nnodes=2 --node_rank=0 --master_addr=172.16.30.2 --master_port=29502 tools/train.py ***.py --launcher=pytorch
机器2:python -m torch.distributed.launch --nproc_per_node=8 --nnodes=2 --node_rank=1 --master_addr=172.16.30.2 --master_port=29502 tools/train.py ***.py --launcher=pytorch
(
-
- 关于多机多卡训练的几个注意事项:
1. 代码:
a. 需要写代码的时候支持多机多卡,这个openmmlab系列的代码默认是支持的。如果是自己新实现的代码,一般多卡可以用,那么多机多卡也可以用。
b. 不同机器上要用完全相同的一套代码(除非是故意设计成不一样的),因为会涉及到数据通信,否则会出现卡死或结果不对
c. 最好保持不同机器的代码放在同一个路径下,可以放在共享目录,也可以放在不同机器的相同绝对路径
2. 数据:用同样的数据,放在同一个位置。参考1.c的放置方法(本地也可以,保证训练代码一致,路径一致就行)
3. 环境:参考2数据放置的方法(注意这里的环境不仅包括conda环境,还包含各种环境变量,cuda,cudnn等)
4. 使用:假设有2台机器,机器1的IP:192.168.28.71,机器2的IP:192.168.28.72。
在机器1上执行:NNODES=2 NODE_RANK=0 MASTER_ADDR=192.168.28.71 PORT=29512 bash tools/dist_train.sh .......
在机器2上执行:NNODES=2 NODE_RANK=1 MASTER_ADDR=192.168.28.71 PORT=29512 bash tools/dist_train.sh .......
- 关于多机多卡训练的几个注意事项:
)
2. 普通测试
python tools/test.py configs/yolox/mobilenetv2/yolox_nano_mobilenetv2_050_yoloxpafpn_face_person_0207.py work_dir/yolox_nano_mobilenetv2_050_yoloxpafpn_face_person_0207/best_bbox_mAP_epoch_99.pth --eval bbox
3. 生成PR指标测试(内部实现)
python tools/test.py configs/yolox/face_person_0207.py work_dir/face_person_0207/best_bbox_mAP_epoch_99.pth --eval bbox --eval_for_engineering
4. 保存预测的JSON文件
python tools/test.py configs/yolox/face_person_0207.py work_dir/face_person_0207/best_bbox_mAP_epoch_99.pth --format-only --eval-options jsonfile_prefix=facedata_v1
5. 在线测试 JSON文件(work_dir不起作用可以随便设置)
python tools/test.py configs/yolox/face_person_0207.py work_dir/face_person_0207/best_bbox_mAP_epoch_99.pth --offline_pr **.json --eval bbox --eval_for_engineering
6. 离线工具测试命令(detection_evalution)
python main.py --mmdet_result ***.json --config ***config.py --label_file **gt.json
7.生成onnx
python tools/deployment/pytorch2onnx.py configs/yolox/mobilenetv2/yolox_nano_mobilenetv2_025_yoloxpafpn_face_person_0209_person_relu.py work_dir/yolox_nano_mobilenetv2_025_yoloxpafpn_face_person_0209_person_relu/epoch_1.pth --output-file work_dir/yolox_nano_mobilenetv2_025_yoloxpafpn_face_person_0209_person_relu/mobilenet_025_320_192 --shape 192 320 --skip-postprocess
8.绘制loss曲线,查看模型收敛情况
python tools/analysis_tools/analyze_logs.py plot_curve work_dir/a/20230214_053242.log.json --keys loss --start-epoch 1 --eval-interval 10 --legend loss --out=work_dir/a/loss.png
9.查看网络细节信息
models = torch.load("***.pth")
models.keys() #查看模型关键字
state_dict = models['state_dict']
for name, v in state_dict.items():
print(name, v.shape)
10.查看 param 和 flops
python tools/analysis_tools/get_flops.py /home/liushuan/work_space/mmdetection_superacme/configs/yolox/yolox_nano_cspdarknetv10_person_face_keypoint_ov.py --shape 384 640
11.可视化loss结果
python tools/analysis_tools/analyze_logs.py plot_curve *.log.json --keys loss --out **/loss.jpg
(也可使用tensorbord 可视化,需要提前在config里面做相关配置)
MMYolo
1.保存onnx模型
python projects/easydeploy/tools/export.py \ configs/yolov5/yolov5_s-v61_fast_1xb12-40e_cat.py \ work_dirs/yolov5_s-v61_fast_1xb12-40e_cat/epoch_40.pth \ --work-dir work_dirs/yolov5_s-v61_fast_1xb12-40e_cat \ --img-size 640 640 \ --batch 1 \ --device cpu \ --simplify \ --opset 11 \ --backend 1 \ --pre-topk 1000 \ --keep-topk 100 \ --iou-threshold 0.65 \ --score-threshold 0.25