一个更快的YOLOv5问世,附送全面中文解析教程
作为计算机视觉领域的基础性技术,目标检测在业界具有广泛应用,而YOLO系列因其综合性能较好,成为广受欢迎的首选框架。
这次,为了让用户深入了解OneFlow训练目标检测模型的可行性以及性能的优越性,我们将Ultralytics版YOLOv5(https:github。comultralyticsyolov5)通过importoneflowastorch的方式迁移为OneFlow后端(对应YOLOv5的commit为:48a85314bc80d8023c99bfb114cea98d71dd0591)。
相比PyTorch,目前YOLOv5在OneFlow上进行小batch训练时有510的性能优势,而训练大batch的性能与PyTorch持平。
需要说明的是,本次发布的OneFlow后端的OneYOLOv5只是一个基础版本,还没有用任何优化技巧,相信在后续的一些定制化的性能优化技巧下(比如nn。Graph加持,算子的优化),OneFlow可以继续提升YOLOv5在COCO等数据集的训练速度,更有效缩短目标检测模型的训练时间。
此外,我们还推出了《YOLOv5全面解析教程》,其中对YOLOv5的相关教程进行了汉化,并添加了一系列详细的代码解读、原理讲解以及部署教程,并将逐步配备相应的视频讲解。相信这是一份很不错地从零开始深入学习YOLOv5的资料,希望帮助你更好地理解和使用YOLOv5。代码仓库地址:https:github。comOneflowInconeyolov5文档网站地址:https:start。oneflow。orgoneflowyolodocindex。htmlOneFlow安装方法:https:github。comOneflowInconeflowinstalloneflow
欢迎在GitHub上StarOneYOLOv5项目获取最新的动态,并在仓库提Issue、PR。以下将详细介绍OneYOLOv5在COCO上的精度以及性能表现。
1OneYOLOv5与UltralyticsYOLOv5精度一致
以YOLOv5n网络为例,result。csv(https:oneflowstatic。osscnbeijing。aliyuncs。comoneyoloYOLOv5nresults。csv)这个日志展示了基于OneYOLOv5在COCO上从零开始训练YOLOv5n网络的日志。下图展示了boxloss,objloss,clsloss,map0。5,map0。5:0。95等指标在训练过程中的变化情况:
可以看到,最终在第300个epoch时,map0。5达到了0。45174,map0。5:0。95达到了0。27726。这与UltralyticsYOLOv5n给出的精度数据一致。(https:github。comultralyticsyolov5pretrainedcheckpoints,注意官网给出的精度指定iou为0。65的精度,而上述csv文件中是在iou为0。60下的精度,使用我们训练的权重并把iou指定为0。65可以完全对齐官方给出的精度数据)。
关于这一点,我们可以使用UltralyticsYOLOv5n来验证:pythonval。pyweightsyolov5n。ptdatadatacoco。yamlimg640iou0。60
输出:val:datadatacoco。yaml,weights〔yolov5n。pt〕,batchsize32,imgsz640,confthres0。001,iouthres0。6,maxdet300,taskval,device,workers8,singleclsFalse,augmentFalse,verboseFalse,savetxtFalse,savehybridFalse,saveconfFalse,savejsonTrue,projectrunsval,nameexp,existokFalse,halfFalse,dnnFalseYOLOv5v6。1384g7fd9867Python3。8。13torch1。10。0cu113CUDA:0(NVIDIAGeForceRTX3080Ti,12054MiB)cuda:0Fusinglayers。。。YOLOv5nsummary:213layers,1867405parameters,0gradients,4。5GFLOPsval:Scanningdatadatasetfengwencocoval2017。cacheimagesandlabels。。。4952found,48missing,0empty,0corrupt:100ClassImagesInstancesPRmAP50mAP5095:100157157〔00:4000:00,3。all5000363350。5730。4320。4560。277
上述输出可以说明,OneYOLOv5n与UltralyticsYOLOv5n的精度完全对齐。
在OneYOLOv5n从零开始训练YOLOv5n进行精度复现的命令为(2卡DDP模式):pythonmoneflow。distributed。launchnprocpernode2train。pydatadatacoco。yamlweightscfgmodelsyolov5n。yamlbatch64
2小batch训练,OneYOLOv5性能更优
以下性能结果都是直接将PyTorch切换为OneFlow之后测试的,还没有做针对性优化,后续会在此基础上继续提升OneFlow后端YOLOv5的训练速度。
在3080Ti的性能测试结果
单卡测试结果以下为GTX3080ti(12GB)的YOLOv5测试结果(OneFlow后端vsPyTorch后端)以下测试结果的数据配置均为coco。yaml,模型配置也完全一样,并记录训练完COCO数据集的1个epoch所需时间由于OneFlowEager目前AMP的支持还不完善,所以我们提供的结果均为FP32模式下进行训练的性能结果PyTorch版本yolov5codebase:https:github。comultralyticsyolov5OneFlow版本yolov5codebase:https:github。comOneflowInconeyolov5CUDA版本11。7,cuDNN版本为8。5。0测试命令(其中batch参数是动态变化的)为:pythontrain。pybatch16cfgmodelsyolov5n。yamlweightsdatacoco。yamlimg640device0
可以看到,在batch比较小时,OneFlow后端的YOLOv5相比PyTorch有510的性能优势,这得益于OneFlow的Eager运行时系统可以更快的做CUDAKernelLaunch。而batch比较大的时候OneFlow后端的YOLOv5相比于PyTorch的性能基本持平,这是因为当batch比较大时CUDAKernelLaunch的开销相比计算的开销会比较小。
两卡DDP测试结果配置和单卡均一致测试命令(其中batch参数是动态变化的)为:pythonmoneflow。distributed。launchnprocpernode2train。pybatch16datacoco。yamlweightsdevice0,1
在2卡DDP模式下,得益于单卡的性能优势,在batch比较小时,OneFlow后端的YOLOv5相比PyTorch的性能稍微领先,而对于大batch来说,OneFlow的性能相比PyTorch基本持平。
3总结
基于OneFlow移植Ultralytics版的YOLOv5,在精度训练达标的情况下可以在batch比较小时取得一些性能优势。此外,对想深入了解YOLOv5的用户,我们发布了《YOLOv5全面解析教程》,希望它可以成为帮助你学习YOLOv5的绝佳资料。
欢迎下载体验OneFlowv0。8。0最新版本:
https:github。comOneflowInconeflow