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 ...
随机推荐
- mysql的group_concat列转行函数
SELECT auditor,sum(count) total, GROUP_CONCAT(type,'=', count) AS type_count FROM auditor_dm_ol GROU ...
- spark-jobserver安装实践 (centos7.4)
spark-jobserver 提供了一个RESTful接口来提交和管理spark的jobs,jars和job contexts. 该工程位于:https://github.com/spark-job ...
- Python爬虫与一汽项目【一】爬取中海油,邮政,国家电网问题总结
项目介绍 中国海洋石油是爬取的第一个企业,之后依次爬取了,国家电网,中国邮政,这三家公司的源码并没有多大难度, 采购信息地址: 国家电网电子商务平台 http://ecp.sgcc.com.cn/pr ...
- leetcode 二进制求和 python
class Solution: def addBinary(self, a, b): """ :type a: str :type b: str :rtype: str ...
- vue-cli webpack浅析
一直对脚手架的webpack配置很感兴趣. 长话短说,先从npm start开始. 打开package.json 找到scripts 可以看到start 运行的是dev, dev 又是从 build/ ...
- LightGBM算法(转载)
原文:https://blog.csdn.net/niaolianjiulin/article/details/76584785 前者的含义是轻量级,GBM:梯度上升机. 相较于xgboost: 更快 ...
- mybatis的collection查询问题以及使用原生解决方案的结果
之前在springboot+mybatis环境的坑和sql语句简化技巧的第2点提到,数据库的一对多查询可以一次查询多级数据,并且把拿到的数据按id聚合,使父级表和子级表都有数据. 但是这种查询,必然要 ...
- 【Alpha】Scrum Meeting 8
目录 前言 任务分配 燃尽图 会议照片 签入记录 困难 前言 第8次会议在4月12日21:00进行微信会议. 交流确认了任务进度,对下一阶段任务进行分配.时长15min. 任务分配 姓名 当前阶段任务 ...
- SAP abap 语句、命令 语法查询备用
语句:碰到一个写一个 COLLECT语句用法 用于报表数据的合并计算,如果非数据字段值相等,那么数值字段值相加 内表可以不用排序 LOOP AT gtd_test into gth_test. COL ...
- CF 528D. Fuzzy Search NTT
CF 528D. Fuzzy Search NTT 题目大意 给出文本串S和模式串T和k,S,T为DNA序列(只含ATGC).对于S中的每个位置\(i\),只要中[i-k,i+k]有一个位置匹配了字符 ...