从框架选取的角度来说,以不同的应用选取不同的框架。比如说你要用人脸的,CoverNet 的卷积方式更适合,你要想做简单的分类,或者是做一些跨平台的融合,Test Flow 应该是大家关注更多的,而且我们现在每个框架基本上都用。另外 MX Net 本身的 Bug 比较多,大多数都是中国人,模型释放的比较少,如果你自己选择转模型就会有大量的损失。所以我建议你以 Test Flow 为主,或者你做 OCR 或者是语音相关的,你要做时序相关的,一般这种 Touch 的也很多,就看你的应用方向,还有你最后的发布平台。 提问:刚才您有些例子是在手机端实现的,在手机端识别的话都有哪些技术要点? 王金桥:手机端识别就是多核多线程要解决的,我们的代码都是自己写的,你要有一个很好的框架来解决这个问题。另外就是说你要把库减少到最小,在 ARM 上做优化。另外就是网络要设计得非常浅,要做一些定点化,目前支持定点化的是 Test Flow,其他的都要你自己去更新,就是你是网络的压缩,要设计一个网络,把计算的样本控制到最小,多线程、多核的调用以及你最后性能的调优,最后代码的移植,目前这些公司应该都在做。 尹相志:我补充问一下,最近有些论文提出来说,可以把一些很复杂的网络通过一些 Training 的手法做缩减和压缩,你认为这是一个比较重要的方向吗?还是说先从比较浅层的规则来做? 王金桥:网络的剪枝、裁减和网络的压缩一般是同时来做的,一般是裁减,我们先用一个非常深的网络,要布这些核心数据,要让它性能最优,我们会减某些层。减了之后,我发现性能损失在 2% 左右,我不能再减了,再减性能损失就下来了。我们要压缩,包括小网络拟合大网络,这种训练的方式的话就要特别依赖你的数据,这种就是进行网络训练不是特别的敏感,目前大部分的方法还是通过剪枝的方式,一般的通过训练的方式得到这种剪枝或者层级量化,不但工作量比较大,而且目前一般的能做 MPGA 或者芯片的,目前倾向于这种方式。 提问:我比较外行,我问一个问题。深度网络输入的应该是一些图片,最后得到的特征,比如说人脸是什么脸形或者什么头发,或者是他背包没有,就是你输出的一些特征。中间层会是一些什么东西呢?是一些小的图片还是一些有意义的标签之类的东西? 王金桥:它输入的都是图像,是一个完整的人,他在训练的时候有两种方式,一个是全局的属性,就是这个人的年龄、性别、男女,是整个人体的框直接做一个全局的分类。第二个就是说局部的,是否背包,是否拉着箱子,是什么发形,穿的衣服是什么颜色,基于这些标签,我们输出的是这个序列的标签,和标注是一样的。 提问:中间层是一些什么? 王金桥:中间层次就是对这些区域的一些响应,神经网络做一些可视化,通过卷积层,Cover1、Cover2、Cover3 都是和我们的人脸一样,看上去之后都是一些简单的纹理特征,看不出什么差别,他们在 Cover4 和 Cover5 这几层,有结构的特征,比如人脸的话有眼的特征、鼻子,Cover5 就有很明确的特征,比如裙子,这个裙子的轮廓就出来了,响应度很高,别的响应度很低。就是低层到高层的抽象机制,但是这个理解跟我们人并不一致。 2. 深度学习框架的内容问答 提问:你刚才介绍了这么多检测的框架,大概会分为 RCN 系列、SSD 和 YOLO。我想问一下,针对不同的问题,我们选择哪一个框架比较好?SSD 和 FasterRCNN 会有什么优点? 陈朝才:我觉得针对不同的问题需要对应用场景做配置。SSD 这里的设计就是导致你可以一下子可以检测 8 张图,FasterRCNN 一下子只能检测 1 张图片,这样的话会导致会有 8 张图片的延迟。但是我觉得如果你用 FasterRCNN 的话,你可以优化前面的这个,在实际使用的时候可以把这个网络简化一下。YOLO 做了这样一些设计,在做 3×3×256 的运算之前先有一个 1×1×128 的卷积层,这样的话,它会让你下一层的运算量减少一半。就是说前面一层输出的维数变为一半,下一层再做大卷积和的时候,这样的运算更小了。也可以针对这个做一个相同的优化,让这个网络结构变得更小。这样的话,也可以让这个检测速度提升得更快。 (责任编辑:本港台直播) |