作者 | 李翔
转载自视说AI(ID:techtalkai)


写在前面

C位是近年网络上一个比较热门的词,最早来源于DOTA等游戏领域,是核心位置(Carry位)的简称,代表的是能够在游戏前中期打钱发育并在游戏后期带领队伍力挽狂澜的角色。现在C位一词逐渐扩大到了娱乐圈乃至我们的生活中,在社交、表演、比赛以及各种日常活动场景中,只要当某一个人在人群中处于中心位置,即最重要的人,大家便称呼他是C位(Center位)。

在包含众多人像的照片中,由于每个人的穿着和动作各异,同时人与人之间存在各种交互信息,以及所处的场景不同,我们通过肉眼来确定C位的时候可能会出现各种偏差。在人工智能快速发展的今天,我们能否可以通过AI来自动找出C位呢?答案当然是肯定的。在这篇文章中,我们将介绍如何利用计算机视觉和深度学习技术构建一个性能优异的C位检测器,从而快速准确地在一群人中发现真正站C位的那个最重要的人。

C位检测器前传

C位检测器的目标是检测出一群人中最重要的人。一般来说,C位检测器主要由两部分组成,第一部分是人脸/全身检测模型,通过该模型首先检测出照片中的所有人像;第二部分是人像重要性预测模型,通过该模型对检测出的每个人像计算重要性得分,重要性得分最高的人即为C位。

当前的人脸/全身检测模型的性能已经比较理想,而人像重要性预测模型还处在研究和探索阶段,所以下面我们的内容将主要围绕如何量化一群人中每个人的重要性展开。

最直接的人像重要性计算可以基于照片中人像所处的位置和面积进行设计,例如,离照片中心点越近则重要性越高,人像的面积越大则重要性越高等等。然而我们判断一个人是不是C位,除了利用照片中人像所处的位置和面积这类人像自身的几何信息外,还会根据照片上的各种信息综合判断:人像自身的外表信息(上图(a))、与其他人之间的关系信息(上图(b))以及所处的全局场景信息(上图(c))。

人与人之间的关系和人与场景之间的关系对C位的判断起到关键性作用。如果我们只利用人像的自身特征进行重要性计算,例如上图(a)中的红框女性,我们其实无法知道她是否是照片中最重要的人。但我们通过她与周围人之间和与整体场景之间的关系信息分析便可以得出她是C位的结论。

一个理想的人像重要性预测模型应根据上面提到的各方面信息进行联合计算。如何提取照片上丰富的多元化信息?如何对人与人之间和人与场景之间的关系建模,从而获取高层次的语义信息?如何最终根据照片上人像的多元化信息和高层次语义信息的特征进行重要性评估?这些都是摆在我们面前的问题,需要我们去一一解决。

一个出色的C位检测器

为了解决上节末提出的三个问题,我们实验室的小伙伴们攻坚克难,提出了一种全新而高效的人像重要性预测模型,构建了一个出色的C位检测器,相关工作发表在CVPR 2019。下面我们对其中的模型框架和建模思路进行一一介绍,希望给大家带来更多的启发和思考。

整个人像重要性预测模型分为三个模块,分别是特征表达模块、关系计算模块和重要性分类模块。特征表达模块能够有效地提取照片中每个人的自身特征和整张照片的全局场景特征。关系计算模块能够对人与人之间和人与场景之间的关系进行建模。重要性分类模块能够计算每个人像的重要性得分,从而最终识别出最重要的C位人选。完整的模型框架如下图所示。

特征表达模块针对上节末“如何提取照片上丰富的多元化信息?”这一问题进行设计。为了充分地获取人像自身丰富的特征表达,人像的外表信息和几何信息都会进行特征提取。深度卷积神经网络被用来实现提取流程,如下图所示。其中,外表信息被分为内在(绿框)和外在(蓝框)两部分,内在区域更多提取人像固有的外表信息,外在区域更多用于提取人像外表以及与周围环境的上下文信息,从而保证了人像信息的多元化。此外整张照片的全局场景信息(黄框)也会通过卷积神经网络实现特征提取。

关系计算模块针对上节末“如何对人与人之间和人与场景之间的关系建模,从而获取高层次的语义信息?”这一问题进行设计,是整个模型中最关键的模块。在该模块中,关系网络(Relation Networks)被用来对在特征表达模块中提取的人像特征和场景特征进行关系建模。关系网络能够在没有额外监督信息的前提下,自动学习人与人之间和人与场景之间的关系,从而提取更高层次的语义信息以表征人在场景中的重要性。具体会分别建立人与人之间的关系图和人与场景之间的关系图,通过多个并行的关系网络提取关系特征并连接,再与原有的人像特征相加,得到最终的特征表达。

重要性分类模块针对上节末“如何最终根据照片上人像的多元化信息以及高层次语义信息的特征进行重要性评估?”这一问题进行设计。通过对在关系计算模型中提取的每个人像的最终特征表达进行重要/不重要的二分类,将每个人像被分为重要这个类别的概率作为重要性得分,得分最高的人像就是模型认定的C位。

以上三个模块一起实现了端到端的人像重要性训练和预测。最后我们来看一看利用上述模型进行C位检测的可视化结果。红框代表的是模型检测出来的C位,绿框代表的是当前其他最好方法的检测结果,可以看出在充分考虑了照片中人与人之间和人与场景之间的关系信息后,在各种复杂场景下,AI均能够准确地检测出真正的C位。

写在最后


C位检测可以自动快速地在人群中找出最重要的那个人。通过这篇文章,我们介绍了利用AI进行C位检测的一般流程和遇到的挑战,也进一步分享了一种优秀的C位检测器的构建思路与过程。其中的更多细节大家可以在arXiv上搜索《Learning to Learn Relation for Important People Detection in Still Images》进行查看。最后祝大家都能在各自的领域内不断进步,实现自我价值,站上属于自己的C位。

作者简介

李翔,国内某互联网大厂AI民工,前携程酒店图像技术负责人,计算机视觉和深度学习重度爱好者。

一些资料

[1] Learning to learn relation for important people detection in still images

[2] Personrank: Detecting important people in images

[3] Relation networks for object detection

(*本文为 AI科技大本营转载文章,转载请联系作者)

公开课精彩推荐

本次课程将会介绍如何利用TensorRT加速YOLO目标检测,课程将会着重介绍编程方法。本次课程还会涉及到 TensorRT 中数据类型,流处理,多精度推理等细节的展示。本次课程特色是讲解+示例分享。本次课程中,QA也是一个非常精彩的环节。

推荐阅读

  • 拍照技术烂?实时在线AI构图模型VPN,让你变身摄影大神!

  • 继往开来!目标检测二十年技术综述

  • 阿里巴巴杨群:高并发场景下Python的性能挑战

  • 为Python回测代码提升10倍性能,具体做了哪些?

  • 鸿蒙将至,安卓安否?

  • 面试阿里,我还是挂在了第四轮……

  • 独家对话V神! 质疑之下的以太坊路在何方?

  • 那些去德国的程序员后来怎么样了?

你点的每个“在看”,我都认真当成了喜欢

你是个成熟的C位检测器了,应该可以自动找C位了相关推荐

  1. 64位微处理器_MCU芯片市场研究:主导8位MCU,但32位MCU受欧美和日本高度垄断

    ↑ 点击上方 " 财经热闻解析 " 关注我们 从古老的用电子管堆出来的成吨的逻辑门到现在的超级数据中心,电子技术的发展走过了一代又一代,自然而然,各种芯片也在百花齐放.到了今天,芯 ...

  2. 7.某计算机的控制器采用微程序控制方式,微指令中的操作控制字段的16位采用混合表示法,其中用11位采用直接表示法,另外5位分为3位和2位的编码表示法,则此格式的微指令最多可表示多少个微指令?

    7.某计算机的控制器采用微程序控制方式,微指令中的操作控制字段的16位采用混合表示法,其中用11位采用直接表示法,另外5位分为3位和2位的编码表示法,则此格式的微指令最多可表示多少个微指令? 解: - ...

  3. ms sql 主键自动生成32位guid

    因同步数据业务需要,主键被设定为varchar(32),而自动生成的newid()是36位的,需要将中间的横线去掉,才合适.为此写如下标量函数: CREATE FUNCTION get_32guid ...

  4. 一个n位的数,去掉其中的k位,问怎样去使得留下来的(n-k)位数按原来的前后顺序组成的数最小...

    例如 8314925去掉4个数,留下125最小,注意有前后顺序要求,要是没有顺序当然是123. 解决方案 贪心算法,在每次被访问的位置保证有最优解. 思路一 分析:求一共n位,求其中的m位组成的数最小 ...

  5. linux 64位vcs,求助,VCS在ubuntu 64位的问题

    我在ubuntu 10.04LTS里面安装了VCS,启动VCS和DVE都可以,我编译verilog文件的时候出现如下错误. 我有两个文件,count.v 和count_tb.v,使用vcs count ...

  6. 对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。

    //编写人:yike //时间:2021/12/25/17:11 //问题描述 // //对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能.它们的前几个是: // //00000 / ...

  7. python写整数逆位运算_简单了解python的一些位运算技巧

    前言 位运算的性能大家想必是清楚的,效率绝对高.相信爱好源码的同学,在学习阅读源码的过程中会发现不少源码使用了位运算.但是为啥在实际编程过程中应用少呢?想必最大的原因,是较为难懂.不过,在面试的过程中 ...

  8. 【C语言位运算的应用】如何按bit位翻转一个无符号整型

    其实现思路如下: 将目标数值进行末尾比特位摘取,将所摘取的bit位放到一个相同类型的末尾,目标数值bit位右移,相同类型bit位左移. C语言的位运算符:     实现代码如下: #include & ...

  9. C语言试题二十五之编写一个函数float function(double h),函数的功能使对变量h中的值保留2位小数,并对第三位进行四舍五入(规定h中的值位正数)。

    1. 题目 编写一个函数float function(double h),函数的功能使对变量h中的值保留2位小数,并对第三位进行四舍五入(规定h中的值位正数). 2 .温馨提示 C语言试题汇总里可用于 ...

最新文章

  1. 图像与视频合成领域的集大成者,都在这里了!
  2. 这可能是最好的RxJava 2.x 入门教程(二)
  3. klee错误汇报二:KLEE的optimize选项的一个困惑
  4. Idea使用Lombok简化实体类代码
  5. php redis key,redis 在 php 中的应用(key篇)
  6. flink运行原理_浅谈Flink分布式运行时和数据流图的并行化
  7. 利用JSONP解决AJAX跨域问题的原理与jQuery解决方案
  8. 30天提升技术人的写作力-第十七天
  9. python 爬虫代理_python 爬虫 使用代理 的问题
  10. 在多重Catch的情况下得到异常的完整信息
  11. 探讨 | SpringBoot + MyBatis 多数据源事物问题
  12. mysql导出约束文件_MySQL导出所有Index 和 约束
  13. GDB常用调试命令(一)
  14. 分享一个手写轮播图的学习案例
  15. Spring Event 事件发布/监听机制 详解并使用
  16. 三角肌前束(05):杠铃颈前推举
  17. 望京有没有可能成为下一个硅谷?
  18. html中repeat的作用,repeat-y
  19. nonce值是什么?(Number once)(Number used once)cnonce(client nonce)(一个只被使用一次的任意或非重复的随机数值)
  20. 已使用管理员权限运行CMD,仍报错OSError: [WinError 5] 拒绝访问。: ‘E:\\Code\\Python\\Git\\stable-diffusion-webui\\venv\\

热门文章

  1. 【二分答案】【最短路】bzoj1614 [Usaco2007 Jan]Telephone Lines架设电话线
  2. Using Apache2 with JBoss AS7 on Ubuntu
  3. ContentResolver.query()—buildQueryString()
  4. 改变shell read命令的隔符
  5. IIS 7.5 + FastCGI + PHP + Drupal 7 + Oracle
  6. 2020-10-09
  7. 判断人工智能是否可信的“四把尺子”
  8. 《数据科学家养成手册》第十一章----算法学(非线性回归)
  9. 《数据科学家养成手册》傅里叶变换与反傅里叶变换笔记
  10. 面向对象与软件工程---团队作业1