YOLTv4:改进的卫星图像目标检测
作者|Adam Van Etten
编译|VK
来源|Towards Data Science
原文链接: https:// towardsdatascience.com/ announcing-yoltv4-improved-satellite-imagery-object-detection-f5091e913fad
这个博客详细介绍了我在业余时间独立完成的工作。
在之前的一些博客[1,2,3]和学术论文[4,5,6]中,我们已经证明了YOLO探测卫星图像中物体的惊人功效。
回想一下,YOLO是一个深度学习对象检测框架,旨在检测图像中的对象。YOLO的最大图像大小只有几千像素,太小了,无法处理超过1亿像素的大尺度卫星图像。
因此,我们构建了YOLT(并用SIMRDWN扩展了YOLT)来优化任意大尺寸卫星图像的目标检测框架。
我们现在很高兴地宣布,一个改进的版本,YOLTv4,已经发布,有更快和更高的性能。代码在 https:// github.com/avanetten/yo ltv4 。在下面的小节中,我们将详细介绍这个新存储库并提供示例结果。
1.简介
YOLTv4旨在快速检测航空或卫星图像中的物体,大小远超过600×600像素。该存储库建立在AlexeyAB的YOLOv4实现的基础上,与YOLOv3相比,YOLOv4在速度和检测性能方面都有所提高。我们使用YOLOv4代替“YOLOv5”,因为YOLOv4被YOLO的原始创建者认可,而“YOLOv5”没有;此外,YOLOv4似乎具有优越的性能。
YOLTv4将YOLOv4主干与SIMRDWN的预处理和后处理脚本结合起来,创建一个改进的、轻量级的替代SIMRDWN。回想一下,SIMRDWN允许用户从多种骨干(例如YOLO、SSD、Faster-RCNN等)中进行选择。
虽然这种灵活性非常有用,但它会膨胀代码库;此外,多项研究[5,6]表明,YOLO主干在卫星图像目标检测方面优于其他方法。因此,在YOLTv4中,我们选择创建一个更简单的代码,只关注YOLOv4主干。
下面,我们提供了如何将此存储库与开源Rareplanes数据集结合使用的示例: https:// registry.opendata.aws/r areplanes/
2.运行YOLTv4
在本节中,我们将演示如何使用Rareplanes数据集训练和测试YOLTv4以定位飞机。
2.1. 安装
YOLTv4构建为在支持GPU的机器上的docker容器中执行。docker命令使用cuda9.2、python3.6和conda创建一个ubuntu16.04镜像。
-
克隆此存储库(例如,到/yoltv4/)。
-
将模型权重下载到yoltv4/darknet/weights(例如,请参阅:
https://
github.com/AlexeyAB/dar
knet/releases/download/darknet_yolo_v3_optimal/yolov4.conv.137
).
-
安装nvidia docker。
-
生成docker文件。
-
docker容器(参见docker文档中的选项)。
nvidia-docker run -it -v /yoltv4:/yoltv4 -ti — ipc=host — name yoltv4_gpu0 yoltv4_image
-
编译Darknet C程序。首先在/yoltv4/darknet/Makefile设置
GPU=1 CUDNN=1, CUDNN_HALF=1, OPENCV=1然后:cd /yoltv4/darknet和make
2.2. 训练
A.准备数据
-
制作YOLO图像和标签(有关详细信息,请参阅
yoltv4/notebooks/prep_data.ipynb
)。
-
创建一个txt文件,列出训练图像。
-
创建文件obj.names文件,每个所需的对象名称在其自己的行上。
-
在目录yoltv4/darknet/data中创建文件obj.data。例如*/yoltv4/darknet/data/rareplanes_train.data*:
/yoltv4/darknet/data/rareplanes_train.data: classes = 30 train = /local_data/cosmiq/wdata/rareplanes/train/txt/train.txt valid = /local_data/cosmiq/wdata/rareplanes/train/txt/valid.txt names = /yoltv4/darknet/data/rareplanes.name backup = backup
-
准备配置文件。
请参阅此处的说明,或调整*/yoltv4/darknet/cfg/yoltv4_rareplanes.cfg*: https:// github.com/AlexeyAB/dar knet#how-to-train-to-detect-your-custom-objects 。
B.执行训练
-
执行。
cd /yoltv4/darknet time ./darknet detector train data/rareplanes_train.data cfg/yoltv4_rareplanes.cfg weights/yolov4.conv.137 -dont_show -mjpeg_port 8090 -map
-
进度(参见下面的图1):
2.3. 测试
A.准备数据
-
制作切片图像(有关详细信息,请参阅yoltv4/notebooks/prep_data.ipynb)。
-
创建一个txt文件,列出训练图像。
-
在包含必要文件的目录yoltv4/darknet/data中创建文件obj.data。例如/yoltv4/darknet/data/rareplanes_test.data:
/yoltv4/darknet/data/rareplanes_test.data: classes = 30 train = valid = /local_data/cosmiq/wdata/rareplanes/test/txt/test.txt names = /yoltv4/darknet/data/rareplanes.name backup = backup/
B.执行测试
-
执行(在特斯拉P100上以>80帧/秒的速度进行):
-
time ./darknet detector valid data/rareplanes_test.data cfg/yoltv4_rareplanes.cfg backup/ yoltv4_rareplanes_best.weights
-
后处理检测,将图像重新缝合在一起,并绘制绘图:
time python /yoltv4/yoltv4/post_process.py \
— pred_dir=/yoltv4/darknet/results/rareplanes_preds_v0/orig_txt/ \
— raw_im_dir=/local_data/cosmiq/wdata/rareplanes/test/images/ \