自YOLOv4推出以来已经5个多月了。YOLO框架使用C语言作为底层代码,对于习惯了Python的研究者来说有点不友好。因此网上出现了很多基于各种深度学习框架的YOLO复刻版。最近,一些研究人员在GitHub上更新了基于PyTorch的YOLOv4。自今年4月YOLOv4发布以来,关于这个目标检测框架被问得最多的问题可能就是:“有没有同学复现过YOLOv4,可以交流一下吗?”由于最初的YOLO是用C语言编程的,光是这一点就让很多同学望而却步。网上有很多基于TF/Keras和Caffe的复现版本,但是很多项目只给出代码,并没有给出模型在COCO和PASCALVOC数据集上的训练结果。近期,有研究者在GitHub上开源了一个项目:基于PyTorch深度学习框架的YOLOv4复现版,基于YOLOv4作者给出的AlexeyAB/darknet实现,运行在PASCALVOC、COCO和custom上数据集。项目地址:https://github.com/argusswift/YOLOv4-PyTorch另外,本项目在骨干网络中加入了一些有用的attention方法,实现了mobilenetv2-YOLOV4和mobilenetv3-YOLOV4。attentionYOLOv4这个项目在骨干网络中加入了一些attention方法,比如SEnet,CBAM。SEnet(CVPR2017)CBAM(CVPR2018)mobilenetYOLOv4这项研究还实现了mobilenetv2-YOLOV4和mobilenetv3-YOLOV4(只需更改config/yolov4_config.py中的MODEL_TYPE)。下表是mobilenetv2-YOLOV4的性能结果:下面我们来看一下这个项目的细节和要求。环境要求NvidaGeForceRTX2080TICUDA10.0CUDNN7.0windowsorlinux系统python3.6featuresDO-Conv(https://arxiv.org/abs/2006.12030)(torch>=1.2)Attentionfp_16trainingMishCustomdataDataAugment(RandomHorizo??ntalFlip,RandomCroppine,ResizeA)Multi-scaleTraining(320to640)focallossCIOULabelsmoothMixupcosinelrinstalldependenciesrunscriptinstalldependencies.您需要提供conda安装路径(例如~/anaconda3)和创建的conda环境的名称(此处为YOLOv4-PyTorch)。注:安装脚本已在Ubuntu18.04和Windows10系统上测试。如果出现问题,请查看详细的安装说明:https://github.com/argusswift/YOLOv4-PyTorch/blob/master/INSTALL.md。准备工作1.gitcopyYOLOv4library准备工作的第一步是拷贝YOLOv4。然后更新配置文件“config/yolov4_config.py”中的“PROJECT_PATH”。2.数据集准备本项目准备PascalVOC和MSCOCO2017数据集。其中,PascalVOC数据集包括VOC2012_trainval、VOC2007_trainval和VOC2007_test,MSCOCO2017数据集包括train2017_img、train2017_ann、val2017_img、val2017_ann、test2017_img、test2017_list。PascalVOC数据集下载命令:MSCOCO2017数据集下载命令:数据集下载完成后,需要进行如下操作:将数据集放入目录,更新config/yolov4_config.py中的DATA_PATH参数。(对于COCO数据集)使用coco_to_voc.py将COCO数据类型转换为VOC数据类型。转换数据格式:使用utils/voc.py或utils/coco.py将pascalvoc*.xml格式(或COCO*.json格式)转换为*.txt格式(Image_pathxmin0,ymin0,xmax0,ymax0,class0xmin1,ymin1,xmax1,ymax1,class1...)。3、下载权重文件1)darknet预训练权重:yolov4(https://drive.google.com/file/d/1cewMfusmPjYWbrnuJRuKhPMwRe_b9PaT/view)。2)Mobilenet预训练权重:mobilenetv2:(https://pan.baidu.com/share/init?surl=sjixK2L9L0YgQnvfDuVTJQ,提取码:args);mobilenetv3:(https://pan.baidu.com/share/init?surl=75wKejULuM0ZD05b9iSftg,提取码:args)。3)在根目录下创建weight文件夹,将下载好的weight文件放在weight/目录下。4)训练时在config/yolov4_config.py中设置MODEL_TYPE。4.转换为自定义数据集(基于自定义数据集进行训练)1)将自定义数据集的图片放入JPEGImages文件夹,标注文件放入Annotations文件夹。2)使用xml_to_txt.py文件将训练和测试文件列表写入ImageSets/Main/*.txt。3)转换数据格式:使用utils/voc.py或utils/coco.py将pascalvoc*.xml格式(或COCO*.json格式)转换为*.txt格式(Image_pathxmin0,ymin0,xmax0,ymax0,class0xmin1、ymin1、xmax1、ymax1、class1...)。训练运行以下命令开始训练,详情见config/yolov4_config.py。DATA_TYPE训练时应设置为VOC或COCO。也支持resume训练,添加--resume,使用如下命令自动加载last.pt。Detect修改检测图片路径:DATA_TEST=/path/to/your/test_data#你自己的图片。结果可以在output/中查看如下:Evaluation(PascalVOCdataset)修改评估数据集路径:DATA_PATH=/path/to/your/test_data#你自己的图片Evaluation(COCOdataset)修改评估数据集路径:DATA_PATH=/path/to/your/test_data#自己的图像Visualheatmap在val_voc.py中设置showatt=Ture,网络就可以输出heatmap了。可以在输出/中查看热图,如下所示:
