YOLOX是YOLO目标检测模型家族中的最新成员,它通过去除边界框锚点,增强了模型在边缘设备上的可移植性。此外,YOLOX将YOLO检测头解耦为独立的特征通道,用于边界框分类和回归,这不仅提高了模型的准确性,还加快了训练收敛时间。YOLOX在CVPR 2021自动驾驶研讨会上的流感知挑战赛中获胜,展示了其在速度和准确性方面的极限。与其它常用于目标检测的模型相比,YOLOX具有较低的批量延迟和较高的平均精度(AP),这是通过与Microsoft COCO数据集的基准测试得出的。
与之前的YOLO模型相比,YOLOX的改进包括:去除边界框锚点,提高了模型在边缘设备上的可移植性;将YOLO检测头解耦为独立的特征通道,用于边界框分类和回归,这提高了训练收敛时间和模型准确性;使用DarkNet53作为骨干网络。这些改进使得YOLOX成为构建更快、更准确计算机视觉模型的关键发展。
要使用YOLOX,需要按照以下步骤操作:安装YOLOX依赖项、通过Roboflow下载自定义的YOLOX目标检测数据、下载YOLOX的预训练权重、运行YOLOX训练、评估YOLOX性能、在测试图像上运行YOLOX推理以及为将来的推理导出保存的YOLOX权重。
首先,需要安装所需的依赖项。这包括克隆基础YOLOX仓库并下载必要的要求。还需要安装NVIDIA Apex和PyCocoTools,以使这个仓库按预期工作。接下来,需要获取数据,这些数据将用于训练模型。在这个教程中,将从Roboflow获取数据,并在Python中部署模型。为了导出自己的数据,需要在Roboflow上创建一个账户,并在公共工作区中创建一个新的公共工作区。对于这个笔记本,需要应用一些预处理步骤,以确保数据将与YOLOX一起工作。
如果正在使用自己的数据集,可以在Roboflow中标注图像。如果使用的是已经标注的数据集,可以跳过这一步!Roboflow允许免费管理和标注数据集,并将其转换为26多种格式,以使用不同的模型。Roboflow是基于云的,对团队来说也很容易使用。
YOLOX附带了一些预训练权重,允许模型更快地训练并实现更高的准确性。使用这些预训练权重将减少开始使用YOLOX模型所需的时间。可以使用以下命令下载这些权重:
%cd /content/
!wget https://github.com/Megvii-BaseDetection/storage/releases/download/0.0.1/yolox_s.pth
%cd /content/YOLOX/
要训练模型,可以运行tools/train.py文件:
!python tools/train.py -f exps/example/yolox_voc/yolox_voc_s.py -d 1 -b 16 --fp16 -o -c /content/yolox_s.pth
运行此命令的参数包括:经验文件、设备、批量大小和预训练权重。经过大约90个训练周期后,得到了以下平均精度指标。在上图中,展示了模型返回了0.9257的平均AP。对于第一次尝试来说,这是一个很好的结果。
要评估YOLOX性能,可以使用以下命令:
MODEL_PATH = "/content/YOLOX/YOLOX_outputs/yolox_voc_s/latest_ckpt.pth.tar"
!python3 tools/eval.py -n yolox-s -c {MODEL_PATH} -b 64 -d 1 --conf 0.001 -f exps/example/yolox_voc/yolox_voc_s.py
运行评估后,得到了以下结果。上图显示得到了0.955 mAP。这是一个强有力的结果。现在可以在测试图像上运行YOLOX并可视化预测。要运行YOLOX在测试图像上:
TEST_IMAGE_PATH = "/content/valid/BloodImage_00057_jpg.rf.1ee93e9ec4d76cfaddaa7df70456c376.jpg"
!python tools/demo.py image -f /content/YOLOX/exps/example/yolox_voc/yolox_voc_s.py -c {MODEL_PATH} --path {TEST_IMAGE_PATH} --conf 0.25 --nms 0.45 --tsize 640 --save_result --device gpu
要可视化图像上的预测,可以使用以下代码:
from PIL import Image
OUTPUT_IMAGE_PATH = "/content/YOLOX/YOLOX_outputs/yolox_voc_s/vis_res/2021_07_31_00_31_01/BloodImage_00057_jpg.rf.1ee93e9ec4d76cfaddaa7df70456c376.jpg"
Image.open(OUTPUT_IMAGE_PATH)
看起来模型按预期工作。最后,可以将模型导出到Google Drive中,如下所示:
from google.colab import drive
drive.mount('/content/gdrive')
%cp {MODEL_PATH} /content/gdrive/My\ Drive