数据科学对大家来说已经不是什么新的名词,从汽车的自动驾驶到股票的量化交易,在我们生活中的各个领域都能找到它的身影。为加速客户在数据科学方面的探索,Oracle提供了一系列数据科学产品。比如我们之前介绍过的Oracle Data Science Notebook,它提供了完整的数据科学探索环境,不再需要繁琐的安装与配置,也不必去考虑各个组件之间的兼容性问题,只需点击几下鼠标创建数据科学服务,即可立即进行数据科学探索。Oracle的另外一个数据科学探索工具,就是在OCI当中为大家提供的AI (All-in-One) GPU Image for Data Science镜像,只要在创建OCI计算实例的时候,按照下图中所示,选择该镜像即可。

为了获得更好的计算性能,可以选择GPU环境,如果使用训练好的模型,并且性能要求不高,选择CPU的shape也是可以的。但在执行相关代码时,要进行相关设定,指定程序在CPU上运行,否则程序将报错。             

该环境中,已经包含我们在AI及机器学习中常用的组件,并已经优化好各个组件之间的兼容性,我们直接在环境中安装要使用的图像识别模块即可。在今天的内容中,我们将使用3个模型对图像进行识别,以及对视频进行合成。

1、使用Detectron2既有模型对图像中的物体进行识别

关于Detectron2,我们在《OCI数据科学工作坊:机器视觉》当中为大家做过介绍,它是一个开源的项目,可以使用既有模型对图片中的常规物体进行检测并标注,也可以对用户自定义的数据集进行模型训练,从而可以针对特定物品进行侦测与标记。

在下图中,我们使用它自带训练好的模型,对我们随机给出的一张图片进行侦测与标记,大家可以看到被识别出的物体被使用颜色蒙版标识出来,并使用方框对该物体进行框选,同时标记出该物体的大类名称和置信度。在图像识别时,如果使用CPU环境,在处理单张图片时,在i7系列4 cores CPU处理器环境下,一张图片的处理时间在几十秒。如果是批量处理,即便是多核心CPU处理器,在速度上还是很难让人满意。但如果使用Oracle OCI上的GPU环境,即便使用配置最初级的GPU3.1 shape,在批量处理图像时依旧有非常优秀的表现。

在Detectron2当中有针对复杂环境的街景侦测与标记,但对于复杂环境多物体进行标记时,对于计算性能的要求变得更加严格,推荐大家使用GPU环境来提升处理速度。

Detectron2的另外一个Trained模型是人体关键点侦测。如下图所示,不但可以将图片或者视频中的人物用方框标识出来,并且添加标签和置信度, 而且还能标记出人物躯干的关键点。这项技术在车辆自动驾驶和人类行为分析上有着很重要的作用。

2、使用自定义的数据集训练模型进行物体侦测与标记

使用Detectron2训练好的模型对一般物体进行侦测,一般情况下不能满足我们的需求,我们使用这项技术,往往都是想使用自己的数据集来训练模型,然后让机器帮我们去检查图片中的物体。比如下面所示的血液细胞标记。假设我们想做这样一个应用,让机器帮助我们检测血液样本当中各种细胞单位密度。我们首先建立自己的训练集,这个训练集很简单,就是一组图片,并且在图片上使用COCO或者其他的标记工具,对图片中的物体进行标记。然后将这些图片和标记文件(一般是一个XML文件)作为训练集。我们在《OCI数据科学工作坊:机器视觉》当中介绍和如何搭建自己的COCO标记系统,感兴趣的朋友可以去自己搭建,并创建自己的数据集。

当用于训练模型的数据集创建完毕,我们可以开始训练的动作。这时候就需要GPU作为训练的载体了。之前使用32 cores CPU @2.2GHz,64GB内存的环境,训练20张图片,每张图片上有2个标记,做2万次迭代,要使用26小时的时间,如果使用OCI GPU3.1的环境,只需要不到2个小时。如果大家的训练集比较大,建议大家使用高配置的GPU环境,并通过参数设定,让多个GPU协同工作,从而提升运算速度,减少训练时间。下面是几个训练好的模型的运行效果。首先是口罩侦测,用来辨识图片中可识别人物正脸,是否佩戴口罩。我们可以通过阈值来限定人物的辨识程度,比如下图中左侧中部的机车骑士,因为距离较远,已经无法辨别面部特征,所以在此次标记当中没有对该机车骑士进行判断。

下面的例子是路面的坑洞检测,可以与车载摄像设备相连接,在检测到路面坑洞之后,结合当前车辆卫星定位系统给出的位置信息,最终生成带有坑洞位置信息的报告交给路面养护部门进行道路维修。

下面是一个野火侦测的图像识别场景。其实使用图像识别系统来代替传统的烟雾传感器来感知火灾许多年前就有比较广泛的应用。记得读博期间参与了一个与加拿大图像识别算法公司的一个项目,在隧道当中通过视频监控来代替传统的烟雾探测器来发现隧道内的火灾。传统的隧道烟雾探测需要安装数量庞大的烟雾探测器,因为烟雾探测器的感知范围有限,如果数量不足,就会出现火灾已经发生,但是因为烟雾探测器距离较远而无法进行报警的情况,或者将烟雾探测器的告警阈值设定较低,有些尾气不达标的车辆经过,所排出的尾气也会误触烟雾报警。大量的烟雾探测器不但安装成本惊人,后期的维护成本也给当地政府带来极大的负担。使用视频监控代替传统传感器,在减少监测点降低设备采购和维护成本的同时,提高火警判断的准确性。

3、使用CLIP预训练模型

最近OpenAI的CLIP刷爆了深度学习的朋友圈,使用“暴力出奇迹”的方法,使用50万条查询得到4亿个文本图像配对数据集用对比学习目标进行训练,分别对图像和文本编码,然后两两计算相似度,再针对每个图片或文本进行分类,得出匹配结果。可以实现输入图片,输出文本的效果。通过观察下面的模型效果比较图可以看到CLIP的表现非常突出。

但就CLIP代码本身而言,熟悉深度学习的朋友应该很容易看懂,动手能力强的朋友可以通过论文自己复现所有代码。但在复现过程中的一个难点就是50万条查询得到的4亿条文本图像配对数据集。

因为OCI的AI (All-in-One) GPU Image for Data Science镜像当中已经包含了CLIP所要使用的基本安装包,只要从GitHub下载这个项目就可以直接使用。对于一般使用者而言,我们只要直接使用即可,不用去担心模型的生成。如果处理单个图像,使用CPU的环境就可以,如果是处理大量图像,使用GPU环境将得到很大的性能提升。

在下面的例子当中,我们输入一张小狗狗的图像,然后使用CLIP对图像进行识别,并输出图像与我们给定的三个文本描述的相似度,在下图当中可以看出CLIP已经准确地识别出,这是一只小狗。

上面的例子是输入图像,输出文本。感兴趣的朋友可以自己学习一下DALL-E,可以实现输入文本,输出图像。

4、在OCI上实现视频合成

NeurIPS 2019 论文《First Order Motion Model for Image Animation》当中讲述了如何让静态图像动起来,我们依旧可以在OCI上基于AI (All-in-One) GPU Image for Data Science镜像将论文中的内容实现出来。大家可以通过很多技术进行实现。我使用AI (All-in-One) GPU Image for Data Science中的Python为语言环境实现,使用人脸视频数据集voxceleb进行训练。因为计算量非常大,使用个人电脑上的GPU需要非常久的时间才能完成模型训练,所以选择使用价格低廉、功能强大的OCI GPU Shape是一个非常好的选择。下面的视频就是将训练好的模型,使用一张静态图片进行表情迁移的事例。最近都某短视频社交软件上流行的“蚂蚁牙黑”的图像合成就可以使用这个模型进行合成。在下面的视频中,是将已经训练好的模型进行应用,所以只需要使用CPU环境即可,大家可以看到10秒的视频,合成时间大概不到一分半钟。如果是使用GPU环境,哪怕使用的是OCI当中最基础配置GPU3.1,合成1分钟的视频也仅仅需要几秒钟就可以完成。

视频观看

最近正与数据科学的PM紧密合作,期待在不久的将来发布的新版Oracle Data Science Service以及新一代的AI (All-in-One) GPU Image for Data Science镜像中为大家提供更多、更强大的功能,期待您的关注,谢谢。


编辑:殷海英



©著作权归作者所有:来自51CTO博客作者mob604756ec7b7c的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 使用BERT进行跨领域情感分析
  2. 一文看尽预训练语言模型
  3. 【论文解读】UniLM:一种既能阅读又能自动生成的预训练模型
  4. 在图像生成领域里,GAN这一大家族是如何生根发芽的
  5. 谷歌「双十一」也放大招:Colab上可以免费使用P100 GPU了
  6. 热门的模型跨界,Transformer、GPT做CV任务一文大盘点
  7. 让图像识别准确率瞬间下降40个点,「江苏卷」版ImageNet你考得过吗
  8. 拯救单身狗:这个对象生成器帮你看看未来对象长啥样
  9. 专访唐杰 | 我国首个超大智能模型「悟道」发布,迎接基于模型的AI

随机推荐

  1. Android com.android.support 版本不一致
  2. android进度对话框的使用
  3. android一些不常用的事件
  4. Android第二十六课 调试模式 file.exits
  5. 2018-09-20~2018-09-21 Google Developer
  6. android性能优化-渲染-嵌套标签
  7. Android 网络链接,不要忘记添加网络权限。
  8. Android 屏保源码
  9. RxJava使用(一)基本使用
  10. Android动画