![8b7768d53caf120dc1a29bc7a671e1ca.png](https://i-blog.csdnimg.cn/blog_migrate/e488eb7f8e2dce3af16b3a22cfc083da.jpeg)
1. 前言
前几天听人聊到了这个YOLT,本着长见识的目的稍微看了看,然后打算在这里给没看到的人做一个科普,希望这里面的几个Tricks可以对你有所启发。YOLT论文全称「You Only Look Twice: Rapid Multi-Scale Object Detection In Satellite Imagery」 ,是专为卫星图像目标检测而设计的一个检测器,是在YOLOV2的基础上进行改进的。论文原文和代码实现见附录。
2. 介绍
众所周知,卫星图像的目标检测和普通场景的目标检测最大的区别在于卫星图像尺寸很大比如
3. YOLT核心理论
下面的Figure3详细展示了卫星图像目标检测的主要几个难点以及YOLT的解决方案,左边这一列代表难点,右边则代表YOLT提出的方法。
![5d9c9b479407c62df0eb3e56f3b4a9bf.png](https://i-blog.csdnimg.cn/blog_migrate/67ab1ca52d7a178dd7c01d7e1af8e298.jpeg)
我们来描述一下这几个难点和解决方案:
- 一,卫星图目标的「尺寸,方向多样」。卫星图是从空中拍摄的,因此角度不固定,像船、汽车的方向都可能和常规目标检测算法中的差别较大,因此检测难度大。针对这一点的解决方案是对数据做「尺度变换,旋转等数据增强操作」。
- 二,「小目标的检测难度大」。针对这一点解决方案有下面三点。
1、修改网络结构,使得YOLOV2的stride
变成
2、沿用YOLOV2中的passthrough layer
,融合不同尺度的特征(
3、不同尺度的检测模型融合,即Ensemble,原因是例如飞机和机场的尺度差异很大,因此采用不同尺度的输入训练检测模型,然后再融合检测结果得到最终输出。
- 三,「卫星图像尺寸太大」。解决方案有将原始图像切块,然后分别输入模型进行检测以及将不同尺度的检测模型进行融合。
YOLT的网络结构如下面的Table1所示:
![b9af110a8bd50abbbca0c0ec9546279a.png](https://i-blog.csdnimg.cn/blog_migrate/43d6351d729b8c31ad60ed0cb4ca5db1.jpeg)
可以看到网络结构相对于YOLOV2最大的修改就是最后输出特征尺寸只到了
4. 一些观察
下面的Figure2展示了使用两种不同类型的图像作为输入时模型(原始的YOLOv2)的预测结果对比,左边是直接把卫星图像原图resize
到
resize
到网络输入大小是不靠谱的,所以YOLT采用了裁剪方式进行训练和测试图片。
![36865892daa1bf2a865985df6ffe6e84.png](https://i-blog.csdnimg.cn/blog_migrate/d7670a29bac594d80a78abde3b68f5be.jpeg)
下面的Figure4则展示了在测试模型时如何对输入图像进行处理。
![36d4b1c5b32617f5194641a0ca2cca29.png](https://i-blog.csdnimg.cn/blog_migrate/6ff70dc3f10ebd8c0fa920a760275273.jpeg)
上半部分表示的是原始的卫星图片,因为图片分辨率太大,所以采用了划窗方式裁剪指定尺寸如
下面的Figure5展示了训练数据的整体情况,一共有
![e0596b102db70b6d690b70aa695adb8c.png](https://i-blog.csdnimg.cn/blog_migrate/2d7a3a4513d047e862973ca99a0801f9.jpeg)
「这篇论文的一个核心操作就是:」
针对「机场目标」和「其它目标」分别训练了一个检测模型,这两个检测模型的输入图像尺度也不一样,测试图像时同理,最后将不同检测模型、不同chip的检测结果合并在一起就得到最终一张卫星图像的输出。也即是说这篇文章的核心操作就是这个「不同尺度的模型融合」以及「针对机场单独训练一个模型」,这样确实是从数据出发能够很好的解决实际场景(卫星图像)中机场目标数据太少带来的问题。
5. 实验结果
下面的Figure7展示了一张对于汽车目标的检测结果,可以看到效果还是不错的,并且在
![0a2620ec28aa064e54534cf1631cfc5b.png](https://i-blog.csdnimg.cn/blog_migrate/86fc846b4573966d061c7b794eb4f0c1.jpeg)
接下来作者还对不同输入分辨率做了实验,下面的Figure10代表对原始分辨率(左上角的0.15m表示GSD是0.15m)进行不同程度的放大之后获得的低分辨率图像,这些图像都被用来训练模型,
![c58fd42dfc45ff070368153f813bbe59.png](https://i-blog.csdnimg.cn/blog_migrate/a11e0f49d396c5674ea5bd71bfb2c08b.jpeg)
然后Figure13将不同分辨率输入下检测模型的F1值进行了图表量化,其中横坐标代表目标的像素尺寸。可以看到,随着分辨率的降低,图像中目标的像素尺寸也越来越小,检测效果(F1值)也越来越低。
我们还可以发现即便目标只有
![e5f5184f9388c92817adcd5d3e37f42a.png](https://i-blog.csdnimg.cn/blog_migrate/1f1575f561f445bf2f00ed5ca91ef096.jpeg)
其中不同的场景有不同颜色的线代表,不过这不重要,重要的已经讲过了。
下面的Figure12则可视化了不同分辨率图像的检测效果,左边是15cm GSD的结果,右边则表示了90cm GSD的效果,直观来说,左边的效果是比右边好的。
![29048cb4b52ae22ea815b1d06721abf7.png](https://i-blog.csdnimg.cn/blog_migrate/cdab3078625916bebd9e818249712cc3.jpeg)
最后Table3展示了YOLT算法对于不同目标的测试精度以及速度情况。
![584a5f0a6836e492c393d67f984e9660.png](https://i-blog.csdnimg.cn/blog_migrate/b4ad1ad3f2fd423e694345e8cd0642fd.png)
6. 结论
这篇文章没什么特别新的东西,但是我比较欣赏这篇文章对数据进行分析的思路。我认为深度学习不应该是把数据输入进去直接给我们返回结果,我们也应当自己思考数据是否有突破点,是否可以降低CNN模型的处理难度,我觉得这一点是十分重要的。
7. 附录
- 论文:https://arxiv.org/abs/1805.09512
- 代码:hps://http://github.com/CosmiQ/yolt
欢迎关注GiantPandaCV, 在这里你将看到独家的深度学习分享,坚持原创,每天分享我们学习到的新鲜知识。( • ̀ω•́ )✧
有对文章相关的问题,或者想要加入交流群,欢迎添加BBuf微信:
![5c25b6fa494a8b00b6ed81c0c0f26827.png](https://i-blog.csdnimg.cn/blog_migrate/c7494151e14d4b814d27c9b8e4ad9e7c.png)