1 背景介绍
mm-detection在功能上基本和Detectron一致,都是detection codebase((视觉)检测代码库),而Detectron是世界上首个,所以先介绍下Detectron的诞生背景。
1.1 Detectron 是什么?
2018年初,Facebook AI研究院(FAIR)公开了一个目标(视觉)检测平台,名叫Detectron。它是一个软件系统,由Python语言和Caffe2深度学习框架构建而成。
近几年深度学习技术的发展极为迅速,经典的深度学习算法越来越多,而算法只是一种思想或伪代码,让算法能够发挥作用,必须将其用软件代码实现。而使用深度学习框架独自去复现这些现代神经网络算法是一件门槛极高(需要精通深度学习框架,需要从只言片语的算法中自己领悟并填补细节)且极为费时的事情。很多时候,人们为了用深度学习技术解决某个问题,需要去测试并比对各种深度学习算法在该问题上的处理效果。
一般情况下,主流的深度学习算法网上有很多复现的版本,但每个版本适用不同类型的深度学习框架、适用不同版本的深度学习框架(深度学习框架就像深度学习技术一样,日新月异,各软件、各库、各硬件升级带来的兼容性问题催生了各种类型的新事物出现,而Detectron也算其中之一)、适用不同的编程语言、适用不同的操作系统等。不说参差不齐的代码质量和性能影响训练的时间和检测的精度,在寻找和测试这些代码能否运行方面就需要花费很长无意义的时间。
1.2 为什么用detectron?
鉴于上述问题,Detectron的诞生目标是为物体检测的研究提供高质量,高性能的代码库。
优点如下:
(1)丰富、快速:集成各主流算法的实现和模型预训练,并可直接调用,为新颖的想法提供快速的实现和评估。
(2)可训练、操作简单:可用你自己的数据集重新训练模型,且训练流程相比一般的深度学习框架,操作更简单。
不足之处:
(1)Linux平台:由于包含众多算法的实现,而深度学习业界一般使用Linux系统,所以该软件平台也只能在Linux系统下进行使用。
2 mm-detection介绍
2.1 mm-detection基本情况
定义:一个开源库(所以没有人机交互界面),提供已公开发表的多种视觉检测核心模块,通过这些模块的组合,可以迅速搭建出各种著名的检测框架(即深度学习模型)。
创建者:香港中文大学-商汤联合实验室
开源时间:2018年10月12日
2.2 mm-detection和Detectron的差异
mm-detection | Detectron | |
发布时间 | 2018年10月 | 2018年1月 |
深度学习算法模型数量 | (截止2019年6月)更多 | --- |
搭建该平台的时间 | (2018年10月刚推出时)“成功安装 Detectron 的时间,大概可以装好一打的 mmdetection 吧。” | --- |
底层深度学习框架 | Pytorch | caffe2 |
模型的代码性能 | 稍高(某些算法Detectron复现的更好) | --- |
模型重新训练的速度 | 稍快(某些算法Detectron复现的更好) | --- |
所需显存 | 稍小(某些算法Detectron复现的更好) | --- |
从上可看出,商汤科技的mm-detection暂时是压倒性的胜过Detectron,arxiv.org上6月17日(本文撰写的前天)发布了mm-detection的最新一篇论文:https://arxiv.org/pdf/1906.07155.pdf,该论文中有提到目前该框架囊括的算法情况,见下图。论文的概述可见“
”微信公众号在6月19日的一篇文章:《目标检测用这个就够了!多家机构联合提出MMDetection工具箱助力目标检测新发展》2.3 创建者发布mm-detection的目的
mmdetection 和 mmcv (包含一些工具函数,以及一套深度学习模型训练工具)都同属于香港中文大学多媒体实验室的 Open-MMLab 计划。港中大助理教授林达华称,启动 Open-MMLab 计划,是希望在一个统一的代码架构上,逐步开放实验室积累的算法和模型,为计算机视觉的研究社区贡献自己的一分力量。以下是简单说明:
1. 这是一个纯粹的学术开源计划,所开放的都是已经公开发表的算法和模型(包括我们自己和其它研究组提出的代表性算法),不涉及任何的商业化技术。
2. 我们希望这个计划能够降低算法复现的难度,和不必要的重复实验与训练,从而让使用者能够专注于新问题的提出、新思路的探索,而不需要花费主要精力用于已有算法组件的细节调试。
3. 我们在开放的 codebase 中会对现有的主流算法框架进行重构,把它们分解为可复用的组件。希望未来的研究者可以基于这些组件,能迅速建立新的算法框架原型,加快探索的进度。
4. 我们希望 Open-MMLab 成为一个学术交流和探讨的渠道。
2.4 mm-detection应用示例
需求:检测图片中有些什么物体
方法:创建一个py文件,写入如下代码,并将此文件放到mmdetection文件夹目录下,然后运行。
from mmdet.apis import init_detector, inference_detector, show_result # 首先下载模型文件https://s3.ap-northeast-2.amazonaws.com/open-mmlab/mmdetection/models/faster_rcnn_r50_fpn_1x_20181010-3d1b3351.pth config_file = 'configs/faster_rcnn_r50_fpn_1x.py' checkpoint_file = 'checkpoints/faster_rcnn_r50_fpn_1x_20181010-3d1b3351.pth' # 初始化模型 model = init_detector(config_file, checkpoint_file) # 测试一张图片 img = 'test.jpg' result = inference_detector(model, img) show_result(img, result, model.CLASSES) # 测试一系列图片 imgs = ['test1.jpg', 'test2.jpg'] for i, result in enumerate(inference_detector(model, imgs, device='cuda:0')): show_result(imgs[i], result, model.CLASSES, out_file='result_{}.jpg'.format(i))
整个代码极为简洁,非常适合快速验证深度学习算法的适用性。
而模型的训练也非常简单,只要按照固定的文件格式制作样本,一两行代码就能开始重新训练某个模型。
3 总结
优点:
(1)这个工具能够快速的验证现代主流深度学习算法(前提是该库包含该算法)在某个具体问题上的测试效果。
(2)也可以用里面的模块,像搭积木一样,快速搭建一个新型结构的神经网络模型。
这些优点,能够帮助帮我们解决的最大问题就是:节省寻找和测试深度学习模型效果的时间。
不足:
(1)适用场景尚不全面。
比如OCR光学字符识别领域,目前业界公认经典的神经网络算法是CTPN网络(文本区域检测)+CRNN网络(文本内容识别),这两个网络在该库中并不存在,也难以通过该框架简单的“搭积木”设计出来。
(2)提供的是一种快速测试和训练神经网络的功能,其他方面的工作并没有牵涉。
比如:如下两张图,是我用两个开源项目:Yolo3+CRNN网络以及CTPN+CRNN网络测试的字符识别效果:
Yolo3+CRNN网络模型测试结果
CTPN+CRNN网络模型测试结果
深度学习技术的落地,选择适宜的开源模型只是第一步,后期其他工作,比如获取数据集、设计其他视觉、图像处理算法等,该类型库不能提供帮助。
4 参考资料:
[1] 整合全部顶尖目标检测算法:FAIR开源Detectron
https://baijiahao.baidu.com/s?id=1590357939261351068&wfr=spider&for=pc
[2] 以Detectron用自己的数据集训练目标检测模型
http://www.yueye.org/2018/train-object-detection-model-using-detectron.html
[3] Detectron开源地址
https://github.com/facebookresearch/Detectron/blob/master/README.md
[4] 商汤科技正式开源 mmdetection 和 mmcv
https://baijiahao.baidu.com/s?id=1614278154523071090&wfr=spider&for=pc
[5] 商汤和港中大开源了基于PyTorch的检测库——mmdetection
http://www.elecfans.com/d/800480.html
[6] 如何评价商汤开源的 mm-detection 检测库?
https://www.zhihu.com/question/294578141
[7] 对象检测工具包mmdetection简介、安装及测试代码
http://www.pianshen.com/article/2881198172/
[8] 深度学习目标检测工具箱mmdetection,训练自己的数据
https://blog.csdn.net/hajlyx/article/details/83542167
[9] mmdetection开源地址
https://github.com/open-mmlab/mmdetection