写点什么

大规模机器学习在爱奇艺视频分析理解中的实践

  • 2019-03-08
  • 本文字数:8473 字

    阅读完需:约 28 分钟

大规模机器学习在爱奇艺视频分析理解中的实践

视频包含了图像、声音、文字等多种信息,可以表达生动、丰富的内容。随着 AI 时代的带来,互联网视频应用高速发展,视频更成为一种人人可生成的内容,数据量暴涨。如何利用机器学习将海量的视频内容充分利用起来,成为 AI 领域研究人员和企业开发应用的重要课题。本文,我们将分享爱奇艺资深科学家王涛在 AICon 上的精彩演讲,介绍爱奇艺在大规模视频分析理解方面的实践探索。


我会从以下几个方面给大家分享,爱奇艺在互联网视频 AI 方面的实践工作。


演讲大纲:


  • 互联网视频发展现状

  • 视频理解应用场景

  • 深度学习核心算法

  • 实验结果分析

  • 总结与展望

互联网视频发展现状


首先,互联网视频行业的用户和数据量正在飞速增长。中国在线视频用户超过 6 亿,占全国互联网用户的 75%。仅在爱奇艺视频平台,用户月观看时长超过 60 亿小时,接近甚至超过了美国 Youtube 的观看时长。爱奇艺有十几万部 PGC 专业影视剧,千万级的 UGC 用户生成短视频,视频数据量巨大。此外,传递视频的网络带宽巨大,爱奇艺的总带宽达到 49TB。海量用户、视频和带宽,对我们的工作带来巨大的挑战,必须要借助 AI 进行有效的分析处理,才能够提高用户体验和生产运营效率。


下面介绍我们这个行业在做什么事。爱奇艺视频是一个苹果园生态,核心是提供视频内容给用户观看,上游有文学、漫画,下游有票务、商城、游戏、直播等内容衍生品,围绕 IP 打造成了一个从创作,观看,到消费变现的闭环生态系统,为用户提供全方位的娱乐服务。这其中最重要的是 IP,通过 IP 内容连接人与服务,通过 AI 提升极致的视听体验效果和各环节的生产运营效率。

视频理解应用场景


AI 在互联网视频行业的成功应用,主要依赖以下几方面的核心要素:


(1)可供训练的大数据。


(2)精准算法,如正在进行的视频分析识别与语义理解等算法。


(3)计算芯片,需要非常强大的计算力。


(4)好的落地场景,更便捷的服务。



如上图所示,爱奇艺从创作、生产、分发、变现,到客户体验的每个环节,都有了 AI 的用武之地。

智能创作


这是 AI 在视频创作中应用,利用 AI 算法,可以生成特定风格化的视频,比如漫画风格等,还可以智能化添加虚拟道具和特效,让用户拍摄的短视频更加酷炫有趣。AI 还可以自动生成背景音乐,根据视频内容的特点生成不同风格的配曲。

智能生产


接下来是 AI 在生产流程里的应用。首先是是智能拆条,视频进来之后,把片头、片尾和广告去掉,其次是标注,就像把所有的商品打上标签一样,根据这个标签进行推荐和搜索。然后是审核,过滤盗版、情色等内容。最后是播放处理,比如自动生成封面和动态海报图,帮助对剪辑不熟悉的自媒体用户选取魅力封面图,也提高了海量视频的分发效率。目前爱奇艺首屏的每一栏目左上角都有动态的海报图,AI 会把视频的精彩的片段识别出来进行播放,帮助用户更好地选择视频内容。



视频标注为视频打上时间-语义标签,是 AI 视频理解的关键。标签有不同类别、层次和粒度,例如识别不同人物、行为、场景、物品等等,还可以用于对内容和用户的精细化分析,例如年龄、表情、服装款式,手机品牌等,更好地进行搜索推荐,实现精准的内容分发。



AI 可用于人物识别,实现用户仅观看喜欢演员片段的“只看 TA”应用。在著名的 Labeled Faces in the Wild(LFW)等图片数据集上,人脸识别精度达 99%,超过了人类的识别能力。但在真实视频场景中,由于分辨率,姿态,表情,还有化妆等干扰因素给人物识别任务带来巨大挑战,仍然有很多研究工作急需突破。爱奇艺发布的全球最大的明星影视剧视频数据集(iQIYI-VID)上,一般技术仅达到 80%左右的识别精度,现在全球通过人脸特征做得最好的精度是 88%,爱奇艺通过人脸,头部和音频等多特征融合方法获得 89%精度。更进一步,我们除了识别人,还要识别人体姿势、行为,穿的什么衣服、鞋子等属性信息,用于以图搜剧和情景广告等应用。



AI 应用在文字识别,可以对字幕进行文字识别和语义理解,对审核图片、视频中的不合规文字信息进行识别和反垃圾过滤。文字识别主要用的技术是双向 LSTM 加上 CTC,在网上有很多开源,大家可以找到。文字识别在黑白文档中可以达到 98%的识别率,但在视频中同样有很多挑战,比如影视剧的字幕比黑白文档更难识别,因为字幕不但背景复杂,而且字体多样,有很多装饰的效果,每个字的间距可能挤在一起。而在内容审核任务中,用户为了反机器识别,图片文字甚至已经不是横着写了,有时候斜着写,甚至弯曲着写,手写体的草书,中英文数字混写,大大提高了识别的难度。



AI 还可以用于视频质量评估,包括黑边检测、模糊检测、马赛克检测、音频一致性检测等,保证发布视频的质量。比如选择视频海报图,需要自动选择无黑边、清晰、美观的图片发布。再比如,多个用户上传了多个版本但分辨率和质量不同的视频内容,通过内容质量评价选出清晰度和色彩质量最好的视频给用户观看。模糊检测也不是那么容易,如果是局部模糊,比如说目标的脸部不清楚,但是背景很清楚,这就是聚焦错误的模糊图片,不是清晰的图片,我们要把这些特殊因素考虑进去。



AI 用于视频内容评价,简单理解就是在视频中找到精彩的片段,给予评分。这里需要机器去识别什么是精彩片段? 比如评价画面如何精美,剧情如何精彩,动作如何紧张,和音乐如何浪漫。机器筛选出精彩片段后,可用于长视频的内容拆条,生成精彩看点短视频,满足用户对碎片化视频内容的观看需要。

智能播放


接下来介绍一下我们在视频播放方面做的工作。第一个是 ZoomAI 超分辨。上图为 80 年代非常火爆的电视剧《渴望》,但是现在你把这个片源拿出来在大屏幕上观看,会发现很多噪音、抖动,而且分辨率特别低。为了提高观看体验,我们研发了视频超分辨技术,通过深度学习把低分辨的视频恢复成高分辨的视频。另外还有画面破损修复的问题,上面左图有划痕、抖动,我们利用多帧图片的信息,通过多帧预测当前帧的图片,最后做一个融合,修复画面。上图左边的字边界比较模糊,右边的不但字很清楚,边界也特别清楚,这里我们不但考虑了两张图像之间的像素灰度值损失最小,而且还要加上梯度损失最小,从而优化了视频的纹理和边缘细节。



AI 蒙版弹幕,是一个神奇的应用。相比于普通弹幕,能够避免密集弹幕文字对近景人物区域的遮挡,降低了弹幕对用户观看视频画面的干扰。我们使用了基于深度学习的语义分割技术,引入镜头类型识别算法,识别出当前帧的场景类型,无明显人像主体类型的画面中不生成蒙版;而在特写、近景、中景等镜头画面中,生成人体掩码蒙版。播放时,随视频同步传输的蒙版文件“认为”是背景的图像区域上才会覆盖弹幕,因此弹幕不会覆盖到画面中的主体人像,提高了用户观看弹幕的体验。

智能变现


AI 还可以用于视频内容变现,将用户观看流量最后转化为商业价值。比如情景广告,根据画面中的明星、台词、场景等类别,推荐与内容匹配的广告,提高广告投放关联性效果与用户观看的趣味性。如左图所示,系统识别了人物的京戏服装,推荐了京绣装的特伦苏牛奶。右图中,进行情景识别出皇上生气、魏璎珞吓得腿软的镜头,所以它的广告词配的特别有趣:腿软了,随时“脉动”向前,给用户展示脉动饮料来鼓劲。

深度学习核心算法

代表性网络结构

大家对这些应用背后是怎么做到的也非常感兴趣,下面简单介绍一下深度学习的核心算法,包括代表性的 2D、3D 卷积神经网络和常用的 loss 函数。



深度学习最重要的功能是分类器。比较有代表性的像 Inception Model V3 模型,具有非常好的图片分类性能,谷歌推出的 Youtube8M 视频竞赛数据集用的就是 InceptionV3 模型提取的图像特征。Inception Model 有 V1、V2、V3 和 V4 版本,V1 首次使用了 Inception 概念。它类似于电影《盗梦空间》中一层层的深入空间,当你进入一层梦境时,还有更深入的一层空间,再进去可能还有更深一层的世界。深度学习本来是个网络模型,进到每层节点后,节点内又是个展开的网络。它就相当于把一个网络节点变为网中网,里面横向用很多组卷积滤波器,纵向有好几层组成,让这个网络更加有宽度,更加有深度。V2 版在卷积后做了一个 batch Normalization 归一化,避免梯度消失的问题。V3 版把 5×5 的卷积分解成若干个卷积,比如 V2 版的两个 3×3 卷积,到 V3 变成 3×1 和 1×3 两个卷积来代替 1 个 5×5 的卷积。它的好处是减少参数并提高计算速度。参数少就好小样本学习,层数多更利于提取出高层语义特征。



第二个代表性网络结构是 MobileNet V2,用于提高手机上运行模型的速度。这里主要用了两个技术,一个叫反向残差模块 Inverted Residual block,一个叫深度分离卷积 depthwise conv。如中间图所示,Depthwise Separable Convolutions 的基本思想是,把标准的卷积运算(每个卷积核的通道数与输入的通道数都相同),分解为两个步骤,第一步是 depthwise convolution,它对每个输入的通道应用单独的卷积滤波器(单通道卷积核),第二层是 pointwise convolution,使用 1*1 的卷积核,对输入特征的 channels 进行线性组合为新的特征。



对于视频输入,3D 卷积可以提取视频的空间和时间特征。图中的 C3D (Convolutional 3D)是代表性的 3D 卷积网络,使用 d×k×k(例如,3×3×3)的卷积核,d 是卷积核的时间维度的深度,k 是卷积核的空间 size。与 2D 卷积相比,标准的 3D 卷积不但要做空间卷积,还要做时域的卷积,计算量很大。



为了解决提高速度,微软团队提出了 P3D 模型。如前面提到的,3D 卷积核为 d × k × k 大小,d 是卷积核在时间维度上的深度,k 是卷积核的空间上的宽/高。对于 3×3×3 的 3D 卷积滤波器,可以将其解耦为 1×3×3 的卷积滤波器和 3×1×1 的卷积滤波器,前者等同于空间域的 2D CNN,后者看成是时间域的 1D CNN,这种处理就是 Pseudo 3D CNN 的思想。P3D 有三种结构,S 代表空间维度(spatial dimension)的 2D filters,T 代表时间维度(temporal domain)的 1D filters,第一种是 T 串行级联在 S 的后面,第二种是 T 和 S 并行,第三种是前两种结构的折中或综合。



还有 I3D 模型,整个网络中的某一个模块,把 Inc.的模块用中间这张图的 Inception 结构塞进去,从而把这个网变得更宽更深。



更复杂的网络组合结构,就是把 2D 卷积网络、3D 卷积网络、LSTM 长短时记忆循环神经网络等这些不同的网络模块组合起来使用。比如把 ConvNet 放到 LSTM 里,把不同 path 的网络进行汇合。这是大概的网络设计思路,大家可尝试不同的网络结构来改进性能。

Loss 损失函数


另外,除了网络结构之外, 收敛最优化的准则 Loss 函数也很重要。通常有 均方差 MSE Loss,还有交叉熵 Loss,交叉熵主要是衡量预测的置信度概率分布与真实概率分布间的差异。在做图像分类时,每类别的样本数目不同,各类别的权重和预测精度也不一样。为了改进识别精度低、样本数比较小的样本,何恺明提出了 Focal loss 方法。这跟 cross_entropy 有什么差别?为什么要加这项(1-qi)r?qi 是分类器输出的第 i 类的概率,如果这个概率很低的话,那么 1-qi 很大,相当于把这一个样本的精度权重贡献加大,ai 用于调整样本数目的权重,通过这个方法来提高判定函数的整体识别精度。


Focal loss 的提出为了处理检测任务中的正、负样本不均衡问题,大多数的负样本容易区分,Focal loss 会一定程素削减容易样本的权重。Focal loss 的公式不局限于检测中的两类别,可以推广到多类别分类问题中。

短视频分类实践

深度学习、机器学习要解决的根本问题就是分类。检测也是在测试不同的区域,并判断这个区域是否包含指定类别。分类是最基本的一个问题,下面通过案例说明短视频分类中不同方法的实验性能。



首先介绍视频分类的几个重要数据集。这些数据集大部分是公开的,大家都可以用。第一个数据集是谷歌 YouTube8M,数据量百万级非常大,视频长度 2 分钟到 6 分钟左右,有 3800 多个类别,大家可以尝试一下。



第二个数据集 Moments in Time,这个数据集有 339 个类别,每条视频 3 秒左右。短时长有什么好处?可以方便大家训练,时间长的问题就是数据量大,而且长视频标签,不一定能充满整个视频片段,会带来一些噪音片段。



第三个是 ActivityNet 数据集,该竞赛定义了人物相关的事件定位、事件分类、事件描述等识别任务,有二百个类别,每个类大概有一百个视频,时长 648 个小时。



最后是美图短时频分类 mtsvrc2018 数据集,是 UGC 短视频实际应用非常有代表性的数据集,有 50 个类,10 万个短视频,50 个标签。下面我们将在 mtsvrc2018 数据集上,进行短视频分类方向的数据分析、实验比较。在 mtsvrc2018 数据集上,实验的评价指标,第一个是精度要高,第二个,速度要快。最终评论指标看提交的算法性能点和蓝色参考点的距离长短,越靠近蓝色原点,表示性能越好。



我们针对美图短视频分类数据集做了一些实验。算法流程上,首先把视频的图片解码出第二,凑齐 N 帧,保证每个视频有相同的采样帧。第三,提取特征,第四,融合多张图片的分类结果。想要要提高速度,每个模块速度都要快,要提高精度,可以在数据的预处理、模型训练,还有后处理融合这几块来下工夫。



这是使用 Inceotion 模型的初始分类结果,横轴是 50 个类别,纵轴是精度。可以看到不同类别的精度波动非常大,好的到 90%,差的只有 30%-40%的精度。有的类别精度为什么很低?有两部分原因,第一,这个类别很难识别,比如里面定义了风土人情和风景,这两个类别非常相似。风土人情中的赛龙州,它属于风土人情的人文活动,但是龙舟之外还会拍到两岸的景色,这很容易混淆。第二,这个类别的样本数也非常少,我们画了一张图,发现精度比较低的类别都是样本非常少的类别。这张图还比较了两个算法, Inception V3 橙色曲线的精度比 BNInception 模型的蓝色曲线精度更高一些。

实验结果分析

我们做了一些实验,通过实践证明哪个方法是有效的,哪些没有效果,以及效果有多好。包括抽帧阶段的补帧、如何选择卷积网络、是否使用预训练模型等等。



首先就是抽帧,每个视频里关键帧 i 帧这个数目是不同的,我们也画了个分布。比如说如果一个视频只有四帧,我们如何取八帧,怎么再凑足这个八帧。有两个方法,第一个办法是再补尾帧,后面重复实现。还有一个办法是均匀插帧,11,22,33,把红色的帧插进去。经评测,均匀补帧比插尾帧效果好很多,因为插尾帧的时候,相当于把最后第四帧插了很多帧无效的信息。如果第四帧是黑帧,或者是无意义的帧,它会带来负面的影响。



第二是选模型,选模型就是选择用来特征提取的神经网络。Github 上有个公开的模型性能评测,如上图所示,横轴代表了乘加计算量,纵轴代表精度,大家看到最好的模型是 NasNet、Inception、ResNet 等,优于 mobileNet,VGG-16 等。


我们做了一个实验,对经过和未经过 imageNet 预训练的 Mnasnet 模型进行验证集准确率对比。一开始就用美图数据集做训练不行,我们要把在 imageNet 数据集上的预训练模型拿过来,再在美图的数据去训练,结果显示精度提高 7%,精度提高非常大,一个好的预训练模型非常重要。



刚才的图有很多模型,它们在短视频分类的精度到底怎么样,我们做了一个实验比较。大家可以看到,因为验证集每类样本数不同,按类别平均的精度比按照个数平均的精度,与测试集的结果更加接近。MobileNetV2 精度大概是 82%,InceptionV3 达到 86%,Resnet 也是 86%,这说明什么?MobileNet 虽然模型小、速度快,但精度与复杂模型相比降了 4%。所以说大家要慎重使用小模型,因为精度确实较低。到底选择哪个模型,还得看它的性价比。


最后一列表示耗时,MobileNetV2 是 6ms,V3 大概 25 毫秒,多花 20 毫秒能提高 4 个百分点精度,这个代价在比赛中还是非常值得的。最底下两行代表三维卷积,刚才介绍视频需要使用时空信息,结果怎么样呢?我们做了 P3D,精度大概 87%,这里并没有比 Inception 模型精度高。I3D 方法理论上很好,但是它没有预训练模型,比有预训练模型的 P3D 低 10%,这就说明,预训练模型很重要,3D 卷积也不一定总是很有用,因为对于短视频分类任务来说,好多不是事件,不是连续动作,给一张图,就可以分出类别,所以说在这个任务上耗时的 3D 卷积方法并不适用于提高精度。



增加样本数目,可以提高分类精度。但在给定的数据集上调整样本采样率,能否提高精度?左图画了一个样本的分布,样本最多的类别有五千个,最低大约三百个样本。对小样本类别提高采样率,使每类有相同数目的样本进行训练。右图的实验表明增加小样本采样率,没有性能改进。即使通过线性内插方法生成更多的样本,因为没有增加信息量扩大样本特征空间范围,性能也不会提高。



对于小样本和易错分的类别,Focal loss 是不是很有用,我们也做了实验。第一行表示没用 Focal loss,第二行是用 Focal loss,按个数平均的精度没提高,反而降了 0.3%,但是按类平均精度提高了 0.06%, 所以说 Focal loss 调整能力对解决这个问题效果很有限,仅微小的提高了分类器的推广性能。



下面介绍基于多个子数据集的融合实验和基于多个卷积网络结构的融合实验。我们采用了融合的办法,第一个就是数据集融合。把一个数据集随机抽了 5 份。在测试集上,每个模型比验证集的精度还低,因为它的分布是不一致的。在测试集上,精度大概在 82%-83%之间,经过把这 5 个数据集训练得到的 5 个分类模型进行融合,准确率为 84.4%,这个子数据集融合方案可以把精度提高 1%。



另外我们还使用了多模型融合的方法,在相同数据集上训练了多个模型,将 4 个模型进行融合后精度从 84%提高到 86.5%,5 个模型融合起来可以达到精度 87%,这个精度已经达到了第一名的成绩。但速度还是有差距的,第一名的速度非常快,我们如果使用 5 个模型,要多花 5 倍的时间,除非让 5 个模型并行,才能达到很好的速度。

总结与展望


最后,我们来做个总结和展望。上面介绍了互联网 AI 视频中的一些应用,也通过具体的案例实验给大家分析了不同方法的性能。在具体的工作中,比如说要训练一个模型,肯定也会碰到类似的这些问题,那怎么把速度和性能提上去呢?这里总结一下:


第一,为了提高速度,处理视频的时候要快速解码,为了更快速地处理,可以只处理关键帧 i 帧,因为 i 帧不需要做前项后项预测的恢复,解码非常快可以提高 10 倍。原来要解码需要两百毫秒,但是优化之后只要 20 毫秒左右,就可以把视频的 i 帧解完。


第二,学前辅导。好的预训练模型非常重要,能够轻松提高 7%以上的精度。


第三,单兵作战,增加网络宽度、深度、回路等方法的复杂大模型通常比简单轻模型精度更高,更稳定。在选择模型的时候,要根据具体场景慎重考虑精度与速度间的折衷。


最后,协同作战,通过子数据集融合和多模型融合,性能可以稳步提高 1%到 2%以上的精度。


发现的潜在问题,也是整个业界有待解决的研究问题。第一个是脏数据问题。因为易混淆样本,人工标注的数据质量不可能很准。人可以通过不断总结,不断重复找到正确规律,但是深度学习能否从含有噪声的脏数据中找到真相?第二点,推广性问题。训练时,训练集收敛精度达到 99%,但是验证集精度是 88%-90%,下降了 10%,而测试集的精度又下降 4 个点,到了 82%左右。由于训练集的过拟合、训练、测试不同数据集之间分布不同,模型推广到陌生数据集后性能差异很大。增加训练的数据集大小,推广性更好。复杂模型的推广性通常比简单模型的性能要更加稳定。但是对于给定的训练和验证数据集,如何有效提高推广性?第三个是小样本数目不均衡问题。调整各类样本的采样率,不能提高精度。调整类别权值的 focal loss 效果还不理想。

AI 视频的未来


最后展望一下 AI 视频的未来。可以从三个层面来说。


第一是智能,未来,人工智能一定会越来越聪明。AI 机器将能够有很好的感知能力,能识字,能图,说话。从感知智能到认知智能,理解语义,借助知识库和记忆进行精确推理。


第二是交互。人和机器间的自然交互,机器会善解人意;VR 在视觉、听觉展现上的交互, 让人身临其境。


最后一个是开放。互联网 AI 时代为什么发展这么迅速?其实就是因为开放,有很多大牛把自己的平台,模型算法和代码无私的分享出来,其他人在这个基础上继续做,加速了整个 AI 技术的发展。同时,人人皆是媒体,每个人可以创作内容,分享内容,创造巨大的数据量和需求。还有透明互信,有很多开放内容,通过区块链技术,建立可信、有价值的存证和交易网络。AI,互联网、物联网、5G、端到端边缘计算把人、机器、智能家居、智慧城市、智慧娱乐等信息连接起来,实现整个智能信息的空间进行交互,那么我想,未来发展一定会更加蓬勃,充满生机。

作者介绍

王涛博士,爱奇艺公司资深科学家,中国计算机学会(CCF)理事,杰出会员,计算机视觉专委会副主任,YOCSEF 荣誉委员,全国信标委计算机视觉标准组副组长。2003 年博士毕业于清华大学计算机系后,加入英特尔中国研究院,任高级研究员。2014 年加入爱奇艺公司,主要从事多媒体智能分析,计算机视觉、模式识别、虚拟现实、数据挖掘、AI 视频云等相关技术的研究,领导并参与了爱奇艺随视购、视频拆条、视频审核、以图搜剧、对白搜索、场景看点、音频水印、VR 渲染直播、区块链等项目。在 IJCV、CVPR、ACM MMSJ、ACM Multimedia 等国际期刊和会议上发表论文六十余篇,申请四十多项专利,翻译《软件优化技术》著作一本。



2019-03-08 08:057909

评论

发布
暂无评论
发现更多内容

架构词典:缓存

lidaobing

缓存 架构

【java基础】-- java接口和抽象类的异同分析

秦怀杂货店

Java 接口

第七周作业

孤星

《Linux就该这么学》PDF版免费下载

计算机与AI

Linux

性能压测的时候,随着并发压力的增加,系统响应时间和吞吐量如何变化,为什么?

落朽

架构师训练营第11周课后作业

吴传禹

极客大学架构师训练营

架构师训练营第11周总结

吴传禹

极客大学架构师训练营

从华为看VUCA时代如何让组织不断乘风破浪?

Alan

华为 战略思考 组织发展 组织活力

架构师训练营第 1 期第 11 周学习总结

好吃不贵

极客大学架构师训练营

JVM,JRE,JDK之间的区别和联系

入门小站

JVM

IT做得好的时候,是什么状态?

boshi

职业

架构师训练营第 1 期第11周作业

业哥

5 千字长文+ 30 张图解 | 陪你手撕 STL 空间配置器源码

herongwei

c++ 源码 后端 内存 stl

使用PicGo存储markdown图片(阿里云或者github)

秦怀杂货店

markdown 图床

JDBC【4】-- jdbc预编译与拼接sql对比

秦怀杂货店

sql JDBC

11.1安全架构:Web攻击与防护

张荣召

架构师训练营 - 第十一周总结

一个节点

极客大学架构师训练营

java集合【10】——— LinkedList源码解析

秦怀杂货店

Java 集合 linkedlist

【Java基础】-- instanceof 用法详解

秦怀杂货店

Java

秒懂DHCP是什么

架构师训练营 - 第十一周作业

一个节点

极客大学架构师训练营

架构师训练营 -week11-总结

大刘

极客大学架构师训练营

月薪8k和月薪38K的程序员差距在哪里?学习Linux C/C++ 这些你就知道了

ShenDu_Linux

c++ Linux 程序员 Linux服务器开发 C、C++程序员

架构师训练营第七周作业

丁乐洪

系统性能的主要技术指标以及变化

皮蛋

第七周总结

孤星

11.8作业

张荣召

到手的股权,又没了 | 法庭上的CTO(2)

赵新龙

股权 CTO 28天写作

架构师训练营第 1 期第 11 周作业

好吃不贵

极客大学架构师训练营

Mybatis【5】-- Mybatis多种增删改查那些你会了么?

秦怀杂货店

Java mybatis JDBC

Mybatis【6】-- Mybatis插入数据后自增id怎么获取?

秦怀杂货店

mybatis

大规模机器学习在爱奇艺视频分析理解中的实践_AI&大模型_王涛_InfoQ精选文章