跳转至

YOLOv3

YOLOv3: An Incremental Improvement

摘要

我们对YOLO进行了一系列更新!它包含一堆小设计,可以使系统的性能得到更新。我们也训练了一个新的、比较大的神经网络。虽然比上一版更大一些,但是精度也提高了。不用担心,它的速度依然很快。YOLOv3在320×320输入图像上运行时只需22ms,并能达到28.2mAP,其精度和SSD相当,但速度要快上3倍。使用之前0.5 IOU mAP的检测指标,YOLOv3的效果是相当不错。YOLOv3使用Titan X GPU,其耗时51ms检测精度达到57.9 AP50,与RetinaNet相比,其精度只有57.5 AP50,但却耗时198ms,相同性能的条件下YOLOv3速度比RetinaNet快3.8倍。

结果

使用图模式在 Ascend 910(8p) 上测试的表现
Name Scale BatchSize ImageSize Dataset Box mAP (%) Params Recipe Download
YOLOv3 Darknet53 16 * 8 640 MS COCO 2017 45.5 61.9M yaml weights
在Ascend 910*(8p)上测试的表现
Name Scale BatchSize ImageSize Dataset Box mAP (%) ms/step Params Recipe Download
YOLOv3 Darknet53 16 * 8 640 MS COCO 2017 46.6 396.60 61.9M yaml weights


说明

  • Box mAP:验证集上测试出的准确度。
  • 我们参考了常用的第三方 YOLOv3 的实现。

快速入门

详情请参阅 MindYOLO 中的 快速入门

训练

- 预训练模型

您可以从 此处 获取预训练模型。

要将其转换为 mindyolo 可加载的 ckpt 文件,请将其放在根目录中,然后运行以下语句:

python mindyolo/utils/convert_weight_darknet53.py

- 分布式训练

使用预置的训练配方可以轻松重现报告的结果。如需在多台Ascend 910设备上进行分布式训练,请运行

# 在多台GPU/Ascend设备上进行分布式训练
msrun --worker_num=8 --local_worker_num=8 --bind_core=True --log_dir=./yolov3_log python train.py --config ./configs/yolov3/yolov3.yaml --device_target Ascend --is_parallel True

同样的,您可以使用上述msrun命令在多台GPU设备上训练模型。注意: 更多关于msrun配置的信息,请参考这里

有关所有超参数的详细说明,请参阅config.py

注意: 由于全局batch size(batch_size x 设备数)是一个重要的超参数,建议保持全局batch size不变进行复制,或者将学习率线性调整为新的全局batch size。

- 单卡训练

如果您想在较小的数据集上训练或微调模型而不进行分布式训练,请运行:

# 在 CPU/GPU/Ascend 设备上进行单卡训练
python train.py --config ./configs/yolov3/yolov3.yaml --device_target Ascend

验证和测试

要验证训练模型的准确性,您可以使用 test.py 并使用 --weight 传入权重路径。

python test.py --config ./configs/yolov3/yolov3.yaml --device_target Ascend --weight /PATH/TO/WEIGHT.ckpt

部署

详见 部署

引用

[1] Jocher Glenn. YOLOv3 release v9.1. https://github.com/ultralytics/yolov3/releases/tag/v9.1, 2021. [2] Joseph Redmon and Ali Farhadi. YOLOv3: An incremental improvement. arXiv preprint arXiv:1804.02767, 2018.