之前作者用滑动窗口和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+滑动窗口的方法。

参考论文:《You Only Look Twice — Multi-Scale Object Detection in Satellite Imagery With Convolutional Neural Networks》by Adam Van Etten Part1

YOLT:将YOLO用于卫星图像目标检测的更多相关文章

  1. 大尺寸卫星图像目标检测:yoloT

    大尺寸卫星图像目标检测:yoloT 1. 前言 YOLT论文全称「You Only Look Twice: Rapid Multi-Scale Object Detection In Satellit ...

  2. 10分钟学会使用YOLO及Opencv实现目标检测(下)|附源码

    将YOLO应用于视频流对象检测 首先打开 yolo_video.py文件并插入以下代码: # import the necessary packages import numpy as np impo ...

  3. 基于YOLO和PSPNet的目标检测与语义分割系统(python)

    基于YOLO和PSPNet的目标检测与语义分割系统 源代码地址 概述 这是我的本科毕业设计 它的主要功能是通过YOLOv5进行目标检测,并使用PSPNet进行语义分割. 本项目YOLOv5部分代码基于 ...

  4. 使用Caffe完成图像目标检测 和 caffe 全卷积网络

    一.[用Python学习Caffe]2. 使用Caffe完成图像目标检测 标签: pythoncaffe深度学习目标检测ssd 2017-06-22 22:08 207人阅读 评论(0) 收藏 举报 ...

  5. 在opencv3中利用SVM进行图像目标检测和分类

    采用鼠标事件,手动选择样本点,包括目标样本和背景样本.组成训练数据进行训练 1.主函数 #include "stdafx.h" #include "opencv2/ope ...

  6. 一文带你学会使用YOLO及Opencv完成图像及视频流目标检测(上)|附源码

    计算机视觉领域中,目标检测一直是工业应用上比较热门且成熟的应用领域,比如人脸识别.行人检测等,国内的旷视科技.商汤科技等公司在该领域占据行业领先地位.相对于图像分类任务而言,目标检测会更加复杂一些,不 ...

  7. AI佳作解读系列(二)——目标检测AI算法集杂谈:R-CNN,faster R-CNN,yolo,SSD,yoloV2,yoloV3

    1 引言 深度学习目前已经应用到了各个领域,应用场景大体分为三类:物体识别,目标检测,自然语言处理.本文着重与分析目标检测领域的深度学习方法,对其中的经典模型框架进行深入分析. 目标检测可以理解为是物 ...

  8. 第三十六节,目标检测之yolo源码解析

    在一个月前,我就已经介绍了yolo目标检测的原理,后来也把tensorflow实现代码仔细看了一遍.但是由于这个暑假事情比较大,就一直搁浅了下来,趁今天有时间,就把源码解析一下.关于yolo目标检测的 ...

  9. 第三十五节,目标检测之YOLO算法详解

    Redmon, J., Divvala, S., Girshick, R., Farhadi, A.: You only look once: Unified, real-time object de ...

随机推荐

  1. python -yield理解

    参考:https://foofish.net/iterators-vs-generators.html 从网上看到一个面试题,求最后的输出结果: def add(n, i): return n+ide ...

  2. storm-sql-kafka问题情况

    首先上官方文档:http://storm.apache.org/releases/1.2.2/storm-sql.html 解决的问题 1.kafka版本不对 开始测试时采用storm1.2.2+ka ...

  3. Why choose Nexiq USB-link 125032 Diesel Truck Diagnose

    Nexiq 125032 usb link is Diesel Truck diagnostic Interface. Nexiq truck scanner can compatible with ...

  4. springmvc整合swagger

    前言 Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法,参数和模型紧密集 ...

  5. 6.JAVA基础复习——JAVA中文档注释与帮助文档的生成

    java中的文档注释:用于说明该类的功能作用方便他人使用关键词前需要加@符 用于类的注释 @author name 作者 @version v1.0 版本 …… 用于函数的注释 @param para ...

  6. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  7. 【shell】shuf命令提取文件的随机行

    shuf命令可以随机提取一个文本文件的不同行,输出到文件或者标准输出中. shuf 用法: shuf [选项]... [文件] 或者: shuf -e [选项]... [参数]... 或者: shuf ...

  8. 《视觉SLAM十四讲课后作业》第一讲

    1. 如何在 Ubuntu 中安装软件(命令⾏界⾯)?它们通常被安装在什么地⽅? 答:一般有两种安装方式(1)apt-get install (2)dpkg -i package.deb.系统软件一般 ...

  9. 1.4:SubShader

    文章著作权归作者所有.转载请联系作者,并在文中注明出处,给出原文链接. 本系列原更新于作者的github博客,这里给出链接. 在了解了渲染流水线之后,我们可以开始SubShader的学习了. 什么是S ...

  10. C++ STL标准容器插入删除算法的复杂度

    1 vector内部实现: 数组 // 就是没有固定大小的数组,vector直接翻译是向量的意思支持操作:begin(), //取首个元素,返回一个iteratorend(), //取末尾(最后一个元 ...