YOLT:将YOLO用于卫星图像目标检测
之前作者用滑动窗口和HOG来进行船体监测,在开放水域和港湾取得了不错的成绩,但是对于不一致的复杂背景,这个方法的性能会下降。为了解决这个缺点,作者使用YOLO作为物体检测的流水线,这个方法相比于HOG提高了对背景的辨别力,并且可以快速的在不同尺度和多样传感器上进行快速检测。
- Review
ImageNet上的目标检测和卫星图像上的检测有以下四个方面的不同:
1.卫星图像的目标检测通常都很小(~20像素),而输入图像通常很大。缺少用于训练的卫星图像。
2.卫星图像中所检测的物体的物理和像素大小通常是已知的。
3.观察角度的变化很小。
4.从数以百公里之外观察物体很容易被欺骗。
- HOG+sliding windows
为了检测HOG+滑动窗口的目标检测流水线局限性,作者把它应用于来自于不同传感器具有复杂背景信息的卫星图像。
DigitalGlobe:0.5米地面采样间距(GSD)
Planet:3m的GSD

上图是将HOG+滑动窗口用于不同于训练时所用卫星图像的传感器(DigitalGlobe)的传感器(Planet)产生的卫星图像。2015年12月的图像显示了中国南海的一个人造岛屿Mischief Reef。枚举并定位这张图像中的船只非常复杂,从陆地上的线性区域提取到很多错误的红色的False Positive。并且F1得分非常低。检测这个图像在CPU上花费了125秒。
- YOLO
YOLO使用简单的CNN来预测分类和bounding box。在训练和测试时输入整张图片,这样做提高了对背景的辨别力,因为模型可以为每个目标编码上下文信息。这个模型对于小图像的实时检测非常快搞得检测速度以及对背景信息进行有效提取使得YOLO在卫星图像目标检测上成为一个引人注目的方法。
一些读者可能会问,为什么在之前的HOG+Sliding Windows中不采用深度学习的分类器而是采用了HOG特征。一个CNN分类器和滑动窗口结合会产生很棒的结果,但是计算会很难处理。评估一个基于GoogLeNet分类器会比HOG慢上大概50倍。使用基于CNN的分类器评估上图中的卫星图像的时间会从2分钟变成100分钟。在一个GPU上评估一张60立方千米的DigitalGlobe图像并且不做任何预处理需要花费几天的时间(预筛选在复杂场景下并不是很有效)。滑动窗口的另一个缺点是每次只能看到图像很小的一部分,会丢弃掉有用的背景信息。YOLO模型会明确不同的的背景信息,并且在大数据集上规模要比CNN和滑动窗口的方法小。

这个模型有以下几个局限,从原论文中引用原句并封装成三点:
1、我们的模型在小物体检测上的性能会有所下降,比如小鸟。
2、在检测新的或者不寻常的长宽比或者配置的目标上性能会下降。
3、我们模型使用先对粗糙的特征来预测bounding box因为我们的结构在原始图像上采用了很多下采样层。
为了解决这些问题,我们做了一下改变,我们将改变了的模型叫做YOLT:You Look Only Twice。
对于第一个局限性的解决方法:
- 通过滑动窗口进行过采样来寻找小的,密密麻麻的目标。
- 在多尺度上运行一个集成探测器
对于第二个局限性的解决方法:
- 通过重构和旋转来增强训练数据。
对于第三个局限性的解决方法:
- 定义一个新的网络模型,使得最后的卷积层有最终的网格密度。
YOLY模型的输出是通过预处理将来自于一张很大测试图像的全部的图像碎片组合在一起。这些改变将模型的速率从每秒44张图像降低到每秒18张图像。我们输入的最大图像的尺寸是500像素。密集网格(dense grid)的最大参数数量占满了12GB的内存。在没有要求寻找密密麻麻的目标,最大图像的大小可以增加2-4倍。
- YOLT Training Data
训练数据来自于DigitalGlobe和Planet产生的卫星图像的碎片。每个目标的标记包括bounding box和类别信息。
我们聚焦于一下四类:
- 开阔水面的船
- 港口的船
- 飞机
- 机场

作者标记了157张含有船的图像,每一张平均有3~6只船。64张标记了飞机的图像碎片,平均每张有2~4架飞机。收集了37个飞机场图像碎片,每一张都有一个飞机场。作者还旋转和在HSV空间随机的改变图像大小来增加分类器面对不同的传感器、大气条件和光线条件的鲁棒性。

输入语料的训练在一个NVIDIA Titan X GPU上花费了2~3天的时间。我们初始化的YOLT的分类器被训练去区分船和飞机。对YOLT的运行我们在两个不同尺度的巨大图像——一个120米的优化窗口寻找小船和飞行器,一个225米的窗口寻找大船和商用飞机,上采用滑动窗口的形式。
这个操作被用来最大化准确率而不是速度。我们可以通过只跑一个简单的滑动窗口或者或者通过下采样图像来增加滑动窗口的大小来增加速度。因为我们寻找的是非常小的东西,这会影响我们对不同的小物体的检测能力,比如从背景是15m建筑物的图像提取15米的船。未处理的DigitalGlobe图像大概有260megapixels,直接输入这个图像到深度学习框架会使硬件的处理能力超载。因此,过度下采样或图像切割时必须的,作者接受后一个方法。
- YOLT Object Detection Results
在一块NVIDIA Titan X GPU一运行代码,YOLT需要花费4-15秒来检测下面的图像。下面的figure6-10是基于公平的准则对比了HOG+滑动窗口和YOLT两个方法。HOG+滑动窗口被训练用来区分船以及船的航向,YOLT被训练用来处理船和飞机的定位(不是航向)。所有的图都使用Jaccard系数极限为0.25。




YOLT在开阔水域中的性能很好,尽管没有进行进一步的预处理YOLT中不理想的极度密集的区域,Figure9中证实了这个观点。上面讨论的四个区域处理了相关不统一的背景,HOG+滑动窗口的性能很好。正如figure2中所示,在一个高度不统一的背景里面HOG+滑动窗口很难从线性背景特征中区分不同的船。卷积网络可以保证在这一任务上的性能。

为了测试YOLT的鲁棒性,我们分析了在另一个卫星上得到的卫星图像的性能。

最后测试了这个分类器在飞机检测上的性能,如下方所示。

之前,我们证实了分类机器学习用于卫星图像检测的一个局限性——在高度不统一的背景上性能很差。为了解决这个问题,我们使用了YOLT来在卫星图像上快速定位船只和飞机。这个分类器不经旋转的bounding box的输出在拥挤的地区并不是最理想的,但是在稀疏的场景里面分类器的性能远高于HOG+滑动窗口的方法。
YOLT:将YOLO用于卫星图像目标检测的更多相关文章
- 大尺寸卫星图像目标检测:yoloT
大尺寸卫星图像目标检测:yoloT 1. 前言 YOLT论文全称「You Only Look Twice: Rapid Multi-Scale Object Detection In Satellit ...
- 10分钟学会使用YOLO及Opencv实现目标检测(下)|附源码
将YOLO应用于视频流对象检测 首先打开 yolo_video.py文件并插入以下代码: # import the necessary packages import numpy as np impo ...
- 基于YOLO和PSPNet的目标检测与语义分割系统(python)
基于YOLO和PSPNet的目标检测与语义分割系统 源代码地址 概述 这是我的本科毕业设计 它的主要功能是通过YOLOv5进行目标检测,并使用PSPNet进行语义分割. 本项目YOLOv5部分代码基于 ...
- 使用Caffe完成图像目标检测 和 caffe 全卷积网络
一.[用Python学习Caffe]2. 使用Caffe完成图像目标检测 标签: pythoncaffe深度学习目标检测ssd 2017-06-22 22:08 207人阅读 评论(0) 收藏 举报 ...
- 在opencv3中利用SVM进行图像目标检测和分类
采用鼠标事件,手动选择样本点,包括目标样本和背景样本.组成训练数据进行训练 1.主函数 #include "stdafx.h" #include "opencv2/ope ...
- 一文带你学会使用YOLO及Opencv完成图像及视频流目标检测(上)|附源码
计算机视觉领域中,目标检测一直是工业应用上比较热门且成熟的应用领域,比如人脸识别.行人检测等,国内的旷视科技.商汤科技等公司在该领域占据行业领先地位.相对于图像分类任务而言,目标检测会更加复杂一些,不 ...
- AI佳作解读系列(二)——目标检测AI算法集杂谈:R-CNN,faster R-CNN,yolo,SSD,yoloV2,yoloV3
1 引言 深度学习目前已经应用到了各个领域,应用场景大体分为三类:物体识别,目标检测,自然语言处理.本文着重与分析目标检测领域的深度学习方法,对其中的经典模型框架进行深入分析. 目标检测可以理解为是物 ...
- 第三十六节,目标检测之yolo源码解析
在一个月前,我就已经介绍了yolo目标检测的原理,后来也把tensorflow实现代码仔细看了一遍.但是由于这个暑假事情比较大,就一直搁浅了下来,趁今天有时间,就把源码解析一下.关于yolo目标检测的 ...
- 第三十五节,目标检测之YOLO算法详解
Redmon, J., Divvala, S., Girshick, R., Farhadi, A.: You only look once: Unified, real-time object de ...
随机推荐
- mac系统如何处理来自身份不明的开发者
打开终端(终端在 应用程序 -> 实用工具 内) sudo spctl --master-disable
- UDP广播-缓冲区过小
上次介绍到了关于客户端实时刷新摄像头所识别的图片的一些方法,采用了了UDP广播的技术做处理.理论上是没有问题的,将客户端运行在不同电脑上也能很好的看到效果,运行日志也没看出啥问题,结果今天翻看日志的时 ...
- 错误:软件包:3:docker-ce-18.09.4-3.el7.x86_64 (docker-ce-stable) 需要:container-selinux >= 2.9
命令:yum -y install http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.68-1. ...
- php伪造ip头
<? $fp = fsockopen ("passport.baidu.com", 80, $errno, $errstr, 30); if (!$fp) { echo &q ...
- 让策划也能轻松修改数据的方法:运用Excel2Json2Object插件将xml表格转为Object导入脚本
让策划也能轻松修改数据的方法:运用Excel2Json2Object插件将xml表格转为Object导入脚本 运用Excel2Json2Object插件将xml表格转为Object导入脚本 下载地址 ...
- 算法(第四版)C# 习题题解——2.1
写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 这一节内容可能会用到的库文件有 ...
- linux普通帐号可以临时切换到root(添加用户到sudoers中)
一般,进入terminal之后,默认是普通账户能操作的功能,能访问的目录有限,需要临时切换到root账户 那么此时就需要配置sudoers文件,可以让普通用户通过sudo命令临时切换到root账户 首 ...
- Bresenham算法
1 算法原理 基本原理从某处摘得:设直线方程为yi+1=yi+k(xi+1-xi)+k.假设列坐标象素已经确定为xi,其行坐标为yi.那么下一个象素的列坐标为xi+1,而行坐标要么为yi,要么递增1为 ...
- 如何使用mongodb(建立原型,连接数据库)
前两天看了一个朋友做的mongodb数据库,他是自己从某网络大学试听课学的,从可读性和模块区分方面做的比较差,所以写下此文,以作交流. 首先是创建一个modules文件夹,这里面用来存放mongodb ...
- javascript的对象内容对比
vue是这样对比的 function looseEqual (a, b) { if (a === b) return true const isObjectA = isObject(a) const ...