综述:图像计算传感器

共 11537字,需浏览 24分钟

 ·

2020-08-20 11:29

↑ 点击蓝字 关注极市平台

作者丨Wang Hawk@知乎
来源丨https://zhuanlan.zhihu.com/p/149548281

极市导读

 

本文完整地梳理了图像传感器的进化历程。从半个世纪前Gene发明传感器基础单元开始,图像传感器越来越先进和复杂。它们不再只是能感知光信号的设备,而成为主动进行复杂处理的计算传感器>>>极市七夕粉丝福利活动:炼丹师们,七夕这道算法题,你会解吗?


1 引子



我在这篇文章的开篇,放上这位老人的照片。
按照他的遗嘱,他去世时没有葬礼,没有正式的仪式,而他的骨灰则洒在内华达山脉荒野的某个秘密地点——他只是想静静的离去。
你可能不认识他,但你几乎每天都在使用他开创的技术 —— 他就是图像传感器的开创者,Gene Peter Weckler(吉恩·彼得·韦克勒)。
吉恩1932年7月3日出生于加利福尼亚州旧金山,2019年12月3日在德克萨斯州洛根死于阿尔茨海默氏症并发症, 享年87岁。
吉恩年轻时,他就一直对无线电和电子技术感兴趣,他1951年19岁时加入了美国海军,在军队里面他在电子技术学校中学习相关的技术,在1955年退伍后,他加入了犹他州州立大学继续学习,而这所学校恰好闻名于其在二战期间为军队开设的许多电子技术速成课程。
那个年代,正是硅谷的半导体行业刚刚开始萌芽的年代。1959年,吉恩加入了著名的肖克利半导体实验室,这个实验室的开创者就是大名鼎鼎的William Shockley(威廉.肖克力),肖克利和另外两名科学家John Bardeen、Walter Houser Brattain一起,发明了晶体管,并在1956年获得了诺贝尔奖。
William Shockley、John Bardeen、Walter Houser Brattain
吉恩加入不久前,肖克利的实验室刚刚发生著名的”八叛徒“事件。肖克力确实是一名杰出的科学家,富有技术远见,还有极强的敏锐性——他的名气使得他招聘到了那个时代最为杰出的一批年轻人。但肖克利身上还具有另外一面:偏执、蔑视下属、傲慢,甚至要求用测谎仪去对待这些员工,总害怕这些员工会暗地里动摇他的地位。这使他很快就失去了这些员工的信任与支持, 其中有8位年轻人在同一天向他提交了辞呈,走出了实验室。这八个人就是硅谷历史上最著名的”八叛徒“ ——其中包括了后来Intel的创始人罗伯特.诺伊斯、戈登.摩尔(也是摩尔定律的提出者)。他们1957年离开肖克利后,很快就开创了仙童半导体公司(Fairchild Semiconductor)——这是一家有史以来最伟大的公司,后来有超过100家硅谷公司都是从这家公司中分离出来。它的故事我们以后可以单独再讲。
硅谷八叛徒
虽然肖克利这么糟糕,但吉恩却还是在1959年加入了肖克利的实验室,还在那里工作了4年,直到1963年——然后,还是加入了仙童半导体公司。你看,硅谷的传奇人物很多都是在这两家公司都干过的。
吉恩在仙童半导体公司工作了八年,这期间他取得了很多成就,但最最重要(没有之一)的成就是他发表的论文Operation of p-n Junction Photodetectors in a Photon Flux Integrating Mode,这是世界上第一篇描述利用描述利用PN结的光电二极管的文章,也被看做是MOS图像传感器的的第一篇奠基之作。下面两幅图摘自吉恩的论文,描述了单体的反向偏置的PN结光电二极管,以及将这些光电二极管组成阵列的方式。基于这种反向偏置的PN结光电二极管,后来终于出现了实用的图像传感器。
2 CCD和CMOS,两种传感器对比
吉恩的论文总结中提到:
Integrated arrays of storage mode detectors are suitable for application as image detectors. Under this broad classification are such applications as pattern recognition, print or photo readers , image tracking, and real-time surveillance.
存储模式检测器的集成阵列适合用作图像检测器。在这个广泛的领域下,有诸如模式识别、打印或照片浏览器、图像跟踪和实时监控等应用。
读读这句话,再想想这是一篇1967年的论文,你一定会和我一样感受到吉恩的技术远见。
基于MOS的图像传感器并未像吉恩所描述的那样很快出现。相反,上世纪70年代CCD技术很快成为了图像传感器的主流,它的特性是高量子效率、高灵敏度、低暗电流、高一致性、低噪音。下图展示了CCD的示意:电荷通过垂直和水平CCD移出阵列,通过简单的放大器转换成电压,然后串行读出。CCD的结构使得它的像素有效利用面积很高,因此可以做出很小尺寸的像素。而且由于电荷在像素间转移是无源的,因此不会引入噪声。
CCD结构示意
但CCD也有自身的明显缺点:CCD采用电荷转移技术,其信号读出是串行的,导致读出速度有限。而且,为了维持完美的电荷转移效率,需要高速率、高电压的时钟,因此它的功率也很高。同时,CCD在制造时专门针对成像和电荷转移做了优化,使得在不降低性能的情况下可以缩小像素的尺寸。但也导致了很难将传感器和成像的其他功能集成在同一芯片上。
与CCD相对应的,是CMOS传感器。尽管吉恩的论文与上世纪60年代发表,但我们今天意义上的CMOS传感器实际上来源于80年代中叶VLSI视觉有限公司与喷气推进实验室开始的工作。这里电压信号以随机存取存储器的方式一次一行地读出,见下图。其读出路径包括几个同时会引入噪声的有源器件。
CMOS结构示意
CMOS图像传感器的随机存取读出使得可以以较低的功耗进行高速的信息读取,这使CMOS图像传感器非常适合实现超高分辨率和高帧率的成像设备。由于它主要采用标准工艺制造,因此可以很容易地与其他模拟和数字处理和控制电路集成,这种集成进一步降低了成像系统的功率和尺寸,从而有潜力实现新的功能。
后来,正如你已经体会到的,CMOS图像传感器逐渐成为了主流,到今天大多数你常见的摄影设备都已使用了CMOS传感器了,我们接下来就再仔细的从原理开始,认识图像传感器吧。

3 CMOS传感器的底层读取结构

不管是CCD还是CMOS,其底层核心都是吉恩在论文中所描述的反向偏置PN结光电二极管,如下图所示。光电二极管首先复位到电压V_D。然后打开复位开关,在光线照射下二极管内部光子会转换为电荷并在其二极管内部电容CD上累积,这个过程叫做直接积分。如果是CCD或者是早期CMOS传感器中采用的PPS(Passive Pixel Sensor: 无源像素传感器),那么在积分结束后CD上的电荷会被读出,并再转换为电压。而后来的CMOS传感器一般采用了APS(Active Pixel Sensor: 有源像素传感器),电荷会直接在传感器像素内部被转换为电压信号再读出。不管如何,在这两种情况下,电荷到电压的转换都是线性的。在光线较强时,光电二极管可能会积分到饱和,其最大能容纳的电量称为满阱容量。
反向偏置PN结光电二极管,直接积分
直到20世纪90年代初,CMOS传感器底层都是采用的我后面会介绍的无源像素传感器(Passive Pixel Sensor, PPS). PPS像素中光电二极管利用上述原理进行直接积分累积电荷,而当行选择晶体管选中时,这一行的电荷会通过列电子-电压放大器按列读出。读取结束后,相关的光电二极管和放大器会复位,准备读取下一行。
PPS:无源像素传感器
然而,按列读出速度很慢,并且容易受到噪声和干扰的影响。因此,在90年代初人们开始采用应用有源像素传感器(Active Pixel Sensor:APS)。比较流行的APS包括了3T结构和4T结构,这是指单个像素内部有3个晶体管或4个晶体管,如下图所示。
APS:有源像素传感器
3T结构包括了一个复位晶体管,一个源极跟随器晶体管,一个列选择晶体管。读出是一次一行执行的。每行像素在通过行选择晶体管和列放大器被读出到列电容器之后被复位。
4T结构采用Pinned型光电二极管,在基本的3T像素架构上增加了一个传输门和一个浮动扩散(FD)节点。在积分结束时,光电二极管上的累积电荷被转移到FD节点。然后再以3T结构中同样的方式被读出。APS由于加入了额外的晶体管,提高了信号的读取速度和信噪比,很快就成为了CMOS传感器的主流技术。
最新的CMOS图像传感器结构是DPS,其中模数(A/D)转换在每个像素本地执行,并且以类似于随机存取数字存储器的方式从像素阵列读出数字信号。如下图所示,它由光电二极管,ADC和存储器构成。它降低了对模拟电路性能的要求,并且消除了列噪声,并且可以实现大规模的并行模数转换和高速数字读出。
DPS示意图

4 卷帘快门效应

CMOS的总体结构如下图所示,其中包括了地址生成器、行地址解码器、列扫描和列ADC单元。地址产生器产生行地址,启动像素的曝光(即前面讲的积分过程),然后在一定时间后再产生地址,用于选择行用于数字信息的读出。
CMOS传感器基本结构和读出顺序
你可以从上图看到,CMOS传感器在读出数据时,是一行一行进行的。这样做的好处很明显,整个结构的设计简单,空间利用率高。不像全局快门(Global Shutter)那样需要额外的存储单元来存储像素信息。但它的缺点也是很明显的,那就是所谓的卷帘快门效应,这会导致再拍摄高速运动的物体时,出现倾斜现象,如下图所示。
下面这张图中飞机螺旋桨也因为这种效应变得弯曲了
卷帘快门效应,导致螺旋桨弯曲

编码卷帘快门

那么,有没有办法来改善CMOS传感器的结构,从而避免卷帘快门效应呢?这就要提到一种叫做编码卷帘快门(Coded Rolling Shutter)的技术了。前面提到普通CMOS传感器一个在行间公用的公用的列扫描和列ADC单元,因此每一行的读出时刻是不能重叠的。
CMOS每一行的读取周期不能重叠
而编码卷帘快门巧妙的通过改变地址产生的时刻,从而改变每一行的曝光起始时刻和数据读取时刻。这样,再加上后端的计算摄影算法,可以实现很多有趣的功能,包括了高速摄影、去倾斜、像素级HDR等等,而这个设计最妙的地方是仅仅改变地址产生器即可按照通常的CMOS生产工艺设计制造出来。
视频链接:https://www.zhihu.com/zvideo/1257452374626566144
这里我挑选一部分应用展示给你,我们先来看看高速摄影。有两种读取模式,我们先介绍第一种,如下面动图所示。这里不再是逐行进行读取,而是采用每隔K行交替读取。这样下图中同一种颜色的行可以认为是同一幅子图像,所以一次拍摄可以产生K个子图像。如果读取一行的时间为 △tr,那么对于一个有M行的传感器,整个读取时间为M△tr。对于传统的CMOS,帧和帧之间的时差也就是M△tr。但对于编码卷帘快门,子图像之间的时差就变成了M△tr/K。与此同时,倾斜量也就变成了M△tr/K。
视频链接:https://www.zhihu.com/zvideo/1257453339857661952
通过这样的设置,一次拍摄就可以拍摄出一个短视频,且里面的每一帧都仅有很小的倾斜:
还有另外一种交替读取的方式更夸张,可以实现超高速摄影,如下图所示。这里你可以看到,倾斜量并没有降低太多,但是帧间时差仅有单行像素的读取时间,一般是15us至40us。
用这个配置,可以捕捉画面中非常短时间内的变化细节,如下图所示,这是传统CMOS传感器无论如何做不到的。
视频链接:https://www.zhihu.com/zvideo/1257454174625021952
一次拍摄获取多个子图像是一个创举,这样我们还可以通过分析子图像之间的光流,从而实现更多的功能,比如可以去除照片中因为卷帘快门效应导致的倾斜。
两个子图像的光流很容易计算
利用子图像光流估计运动,从而扭正图像
编码卷帘快门还有很多有趣的功能,感兴趣的话你可以到项目官网https://www.cs.columbia.edu/CAVE/projects/crsp/去看一看。
这个项目的作者是华人学者Gu Jinwei (抱歉我没有查到中文名),他2005年从清华大学毕业后就到哥伦比亚大学留学,并于2010年5月获得博士学位。这篇文章Coded Rolling Shutter Photography: Flexible Space-Time Sampling 是2010年3月发表的,应该是他读博士期间的重要成就之一。
Gu先生的个人主页是https://www.gujinwei.org/, 看介绍他现在是在商汤的美国研究院工作,看起来还是同行。
SenseTime 2018-present: Mobile Photography (SensePhoto) Build and lead a R&D team of 30 people, focusing on a complete product solution named SensePhoto, which is computational photography and computational imaging on mobile phones, including super-resolution, denoising, demosaicing, HDR video, soft ISP, face image enhancement, etc. Our clients include major OEMs including Vivo, Oppo, Xiaomi, and etc. The work is a joint collaboration with major vendors (e.g., Sony, Sunny Optics, and Qualcomm).

专注于手机计算摄影与计算成像的完整产品解决方案SensePhoto,包括超分辨率、去噪、去马赛克、HDR视频、软ISP、人脸图像增强等,客户包括Vivo、Oppo、小米等主要OEM厂商,与主要厂商(如Sony、Sunny Optics、高通等)共同合作。

6 角度敏感像素结构及应用

我们刚刚介绍了传统CMOS传感器的缺点(卷帘快门效应),以及一种利用计算摄影方式解决此问题的高效方法。而包括CMOS传感器在内的所有传统图像传感器还有一个缺点,那就是只能获取2D图像,而现实的世界是要用高维光场来描述的。光场的概念,我曾介绍过,我们也看到了一些用于获取光场的技术,例如光场相机、阵列相机等,但这些技术要么牺牲了分辨率,要么复杂度高、体积大。那么有没有可能只通过单独的CMOS传感器就实现光场信息的获取呢?这要从一种特殊的像素结构讲起,它的名称是角度敏感像素结构(Angle Sensitive Pixel Structure, ASPs)
下图可见,这种像素结构最大的特点就是增加了两层光栅,一层叫做衍射光栅,一层叫做分析光栅。通过这个结构,像素值不仅跟入射光光强有关系,跟入射角度也会有关系。而传统的像素的值则是跟平均的入射光强和角度有关。
ASPs提出者是华人Albert Wang,他在2009年的论文Light field image sensors based on the talbot effect中提出。他希望构建一种图像像素,不仅能够检测入射光强度,也能够获得入射角度
他在论文中提到,一种叫做塔尔博特的效应(Talbot Effect)会导致光栅上的平面波产生周期性衍射图案。
在没有分析光栅的情况下,不同深度的传感器平面上的信号响应也是周期性的衍射图案,入射光方向偏移时,这个衍射图案也会偏移。
如果在这层光栅下面再增加一层分析光栅,那么就可以使得不同的入射角度、不同的光强在光电二极管上产生不同的响应。
实际的CMOS传感器制造工艺使得增加这样的光栅是很容易的事情,我们来看看一个CMOS传感器的扫描电子显微镜照片,这里光线从光圈入射,经过由电介质形成的隧道进入到光电二极管所在的平面,这中间要经过好几层金属层。
因此,只要在此基础上增加两层光栅层,就可以实现我们想要的Talbot效应了:
通过调整光栅层的位置和形态,还可以使得该像素对不同的入射光的方向、相位、频率、强度产生的响应不同,具体来说如下面动图所示:
由单个这样的像素的响应 ,我们无法得到其真实的强度I和入射角、频率、相位等信息,但组合相邻的不同特性的像素却可以很容易求出。其实,这非常类似于我们用利用CFA得到不同颜色的像素,再利用Demosaic技术使得每个像素都有不同的颜色值一样,本质上是一种插值方式。
这样,当我们把这些不同响应相位、频率的像素组合到一起时,就可以形成2维的像素阵列,用于捕获光场ρ
后面Albert和别的学者一起继续在研究这种特殊的像素,2011年他们提出了一种改进方案。一开始Albert设计的像素有两层光栅加上单体的光电二极管构成,但后面经过改进,变成了下面这种更简洁的结构,它由一层相位光栅加上交替的两个光电二极管构成,结构更简单,光效更高。
改进后的ASPs
ASPs是一种很好的像素结构,具有极大的潜力,但Albert和相关研究者并未描述利用这种结构重建光场的通用方法,直到2014年IEEE ICCP的最佳论文出现。
下图是几位作者领奖时的合照, 第一作者是中间这位Matt Hirsch。左起第一位则是我们曾经介绍过的Ramesh Raskar,他提出了我介绍过的Flutter Shutter.
作者们构建了由APSs像素阵列组成的图像传感器
作者认为每个像素基于不同的函数来调制入射光,可以用下面的式子直接获取二维图像,获得的图像和一般的传感器没有大的区别。
可以把这个过程抽象为Φ,入射光场抽象为l,那么就有二维图像i = Φl,那么很直接地,我们可以对这个式子求逆,利用最小二乘的方式求出光场信息,由于前面所讲的像素阵列是由多种不同的像素组成而成的,因此实际上求出的光场的分辨率是比较小的。
当从这个光场中再抽出一个子图像观察时,可以看到它相比全尺寸的2D图像要模糊很多。
视频链接:https://www.zhihu.com/zvideo/1257459293785833472
那么有没有可能获得高分辨率的光场呢?恰好,就在2013年Ramesh Raskar教授所在的MIT Media Lab发表了另外一个研究成果:压缩光场成像,里面提到了一种利用低分辨率的信息重建高分辨率的4D光场的方法。
这篇文章的作者发现光场可以表示为一个超定的字典和稀疏稀疏的乘积。
为了得到这个超定的字典,他们预先构造了大量训练用光场数据,并采用了如下的方法求解获得D
这样,在前述系统中如果要获得光场,只需要求取稀疏系数矩阵α即可,这是通过一种叫做Basis Pursuit Denoise的方法
虽然计算量较大,但是这种方法得到的光场是高分辨率的光场,其中每一个2D投影都是高清图像,如下图所示。
视频链接:https://www.zhihu.com/zvideo/1257460631688704000
总体说来,Hirsch等人系统的阐述了如何利用ASPs构建一个多功能的图像传感器,既能像普通传感器一样获取高分辨率的2D图像,也能以很高效率获取低分辨率的光场,或是利用更加复杂的算法获取高分辨率的光场。

7 事件相机、TOF、以及模拟CNN传感器

事件相机
其实,从像素结构本身着手来构造新的传感器还有很多方法,这里再给你展示一种独特的相机,它的名字叫做“事件相机(Event Camera)”,它的像素核心部件如下,它不像通常的相机是对当前时刻的入射光响应,相反它只对变化起反应。所以它还有一个名字,叫做"动态视觉传感器(Dynamic Vision Sensor)"
这里有一个视频,形象的展示了它和普通相机的区别:
视频链接:https://www.zhihu.com/zvideo/1257460934869987328
这里还有一张表,你也能看出它和普通相机的区别
有很多人研究如何利用事件相机,这里有一个有趣的技术,由2016年ECCV的最佳论文所阐述。
作者展示了如何利用单一的事件相机,实时的进行三维重建。这是第一个被证明能跟踪一般的6D运动的方法,而且不仅能重建点云的空间位置,还包括其强度,甚至还能够利用事件相机重建出灰度视频。
视频链接:https://www.zhihu.com/zvideo/1257461223383646208
TOF相机
还有一个典型的利用新的像素技术的相机是TOF相机,它利用了单光子雪崩二极管来做底层成像单元,我们最熟悉的产品可能就是微软的第二代Kinect了
关于TOF我之后还会专题讲述,这里就先不深入了。
片上处理器
我们前面讲过,CMOS传感器相比CCD的一大优势就是"很容易地与其他模拟和数字处理和控制电路集成"。所以,还有学者提出直接把图像处理器和像素阵列集成在一起,形成强大的计算传感器,下图是示例,其左边部分是传统的传感器,右半部分则集成了图像处理、压缩和存储单元。
这种带片上处理器的传感器,典型的就是南洋理工大学学者陈守顺2011年论文中提出的方案。
2016年,学者Robert LiKamWa提出了一种叫做RedEye的传感器,按照其主页描述:
The RedEye vision sensor architecture extracts ConvNet features in the analog domain to reduce analog-digital sensor readout overhead. The architecture promotes focal plane scalability by localizing design complexity and promotes energy efficiency by analog noise admission.

RedEye视觉传感器架构在模拟域中提取ConvNet特征,以减少模数传感器读出开销。该架构通过本地化设计复杂性来提高焦面可扩展性,并通过模拟噪声接纳来提高能效。
RedEye系统的作者身上也留着中国人的血,照片也自带喜感,很让人感觉亲切。他个人介绍特别强调他跟一般华人的单姓不一样,他的姓是LikamWa,他先祖李金華当年居家移民到毛里求斯时,被当地人这样称呼,后来就变成了他们全家的姓。感兴趣的话,你可以到Robert LikamWa的主页http://www.roblkw.com/去看看他的故事。

8 总结

从吉恩利用反向偏置PN结发明传感器的基础单元开始,到LiKamWa的传感器上的模拟CNN架构,图像传感器越来越先进,越来越复杂。它们不再是仅仅能感知光信号的设备,而是能够主动进行复杂处理的计算传感器
在未来,人们会尝试更紧密地结合硬件和软件,结合从编程语言到计算机体系结构,从电路到光学的方方面面来创造新的计算传感器。有可能还会为特定的应用,例如机器视觉、科学成像等目的定制特殊的图像传感器。会有各种新的技术,例如MEMS、光子学、3D堆叠等采用到传感器上。
计算传感器的前景无量。
在图像传感器的演进过程中,既有像吉恩这样的硅谷的先驱,也有很多亚裔、华人的后来者跟上。这说明,华人在传感器芯片这个硬核的领域也是很有创造力和贡献的。
写下这篇文章的时候,美国正在高科技领域的方方面面打压中国,尤其是在半导体领域让我们喘不过气来。我们要看到他们是从上世纪50年代就开始一直不断的发展、创新、追求极致,而且吸引了全世界的人才,包括华人在内的亚裔加入他们的体系作出贡献,才成就了现在的半导体霸权。所以我们要想迅速的摆脱这种限制,确实是很不现实的。但我们也要看到华人的聪明才智,咱们有这个脑力基础 只要不急功近利,不固步自封,不弄虚作假,我们放眼看世界,通过各种渠道来吸收全世界学界、工业界的优秀成果,吸引全世界能够吸引的科技力量,踏踏实实的前进,我们一定能够冲破阻碍,迈向星辰大海!

9 参考文献

今天的内容主要参考如下资料:
1、CMU 2017 Fall Computational Photography Course 15-463, Lecture 21
2、吉恩的照片来自于https://everloved.com/life-of/gene-weckler/obituary/
3、肖克利的照片来自于https://en.wikipedia.org/wiki/William_Shockley
4、八叛徒的照片来自于:http://img1.gtimg.com/digi/pics/hv1/35/40/2196/142805135.jpg
5、A El Gamal, H Eltoukhy, “CMOS Image Sensors” IEEE Circuits and Devices Magazine, 2005, CMOS传感器的很多示意图和信息来自于此文
6、编码卷帘快门项目主页:https://www.cs.columbia.edu/CAVE/projects/crsp/,我引用了该项目的论文、视频展示、以及演讲幻灯片
7、Gu Jinwei先生的主页 https://www.gujinwei.org/
8、A. Wang, P. Gill, and A. Molnar. Light field image sensors based on the talbot effect. Applied optics, 48(31):5897–5905, 2009. 这是ASPs的原始论文
9、M. Hirsch et al, “A Switchable Light Field Camera Architecture using Angle Sensitive Pixels and Dictionary-based Sparse Coding”, ICCP 2014, http://alumni.media.mit.edu/~mhirsch/lfasp/, 我引用了这里的论文、视频展示、以及演讲幻灯片
10、事件相机的视频来自于https://www.youtube.com/watch?v=kPCZESVfHoQ
11、H. Kim et al, “Real-Time 3D Reconstruction and 6-DoF Tracking with an Event Camera” ECCV 2016, 以及作者Hanme Kim的主页http://www.hanmekim.com/, 我引用了论文内容和他的照片
12、陈守顺教授的主页https://www.ntu.edu.sg/home/eechenss/
13、Robert LiKamWa的主页http://www.roblkw.com/
推荐阅读


添加极市小助手微信(ID : cvmart2),备注:姓名-学校/公司-研究方向-城市(如:小极-北大-目标检测-深圳),即可申请加入极市目标检测/图像分割/工业检测/人脸/医学影像/3D/SLAM/自动驾驶/超分辨率/姿态估计/ReID/GAN/图像增强/OCR/视频理解等技术交流群:月大咖直播分享、真实项目需求对接、求职内推、算法竞赛、干货资讯汇总、与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度等名校名企视觉开发者互动交流~

△长按添加极市小助手

△长按关注极市平台,获取最新CV干货

觉得有用麻烦给个在看啦~  
浏览 49
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报