贾扬清开源 AI 框架 Caffe | 开源英雄

news2024/11/26 17:51:43

37799d9015b7f776f5ceb9c37392554b.gif

【编者按】在开源与人工智能的灿烂星河里,贾扬清的名字都格外地耀眼。因为导师 Trevor Darrell 教授的一句“你是想多花时间写一篇大家估计不是很在意的毕业论文,还是写一个将来大家都会用的框架?”,学生贾扬清一头扎进了创 Caffe 的世界。Caffe 成了贾扬清的代表作,而贾扬清的开源与 AI 征途还将走得更远。

采访 | 刘韧,云算科技董事长、《知识英雄》作者、DoNews 创始人

作者 | 李欣欣 刘韧 周扬    责编 | 唐小引

出品 | 《新程序员》编辑部

2013 年 6 月,伯克利大学。28 岁的贾扬清(见图 1)正在写 Decaf(Caffe 的前身)。3 个月后,贾扬清博士毕业,此刻,他在和伯克利心理学系的 Thomas Griffith 教授合作,研究一个心理学课题──人类在个人成长过程中是如何形成“类别”概念的。研究中,贾扬清用一个概率框架来表达人的行为,但从图像中提取到的人的行为特征较弱,很难推导出完整的结论。

1c66ff38cb4aad50dfe632fa296faa5b.jpeg

图 1 伯克利时期的贾扬清

一天,贾扬清看到,一篇获得 2012 年 ILSVRC 比赛第一名的论文“Advances in neural information processing systems”,提到深度学习 AlexNet 模型,用 Convolutional Neural Network(卷积神经网络,简称 CNN)技术,击败了其它非神经网络的算法,只用两块 GPU 即可替代此前 Google 1 万 CPU 方案。一台机器顶一万台机器,且错误率从 25%降到 15%。这篇论文,一石击水,震惊行业。此前,神经网络一直不被业内人看好。

贾扬清受到启发,思考着将论文里的 CNN 提取特征技术,运用到他手头的心理学项目研究上。于是,贾扬清找到 Alex Krizhevsky(AlexNet 模型的作者之一),问他是否可以分享 AlexNet 的源代码?Alex 这样回复:抱歉,我开了公司,正在创业,因知识产权问题,无法直接给代码,但你在研究过程中,遇到问题时,可随时问我。

恰在此时,贾扬清得到 NVIDIA 的学术捐赠计划,收到了一块 K20 的 GPU(见图 2),对学生来说,“GPU 是很贵的!”于是,正在写毕业论文的贾扬清,动手攒了一台机器,利用空闲时间,复现 AlexNet 框架,用以提取图像中的特征。

610f81d7588f5fd937b9c54d91454863.jpeg

图 2 最早做框架的 GPU

此时的贾扬清每日搭乘地铁,去 Google 公司实习。坐在地铁座位上,贾扬清打开电脑,摊在双腿上,见缝插针地继续写框架。作为 GPU 的初学者,万事开头难,但贾扬清沉迷其中,“写代码可能和玩游戏上瘾差不多。”“我花在编程上的时间从 20%、40%、80%……逐渐递增。”在 Google,贾扬清每天都要喝数杯咖啡,“这样不好”,贾扬清把正写着的框架命名为 Decaf,是想警醒自己,戒咖啡。

此时,贾扬清的任务清单里有:⒈博士毕业论文;⒉心理学研究课题;⒊找工作;⒋复现 AlexNet 框架。比起前三项任务,贾扬清把更多的时间花在了最后一项,写论文的时间被严重挤压。他找导师 Trevor Darrell(计算机科学家、伯克利教授)寻求建议,导师只问了一个问题:“你是想多花时间写一篇大家估计不是很在意的毕业论文呢?还是多花时间写一个将来大家都会用的框架?”

导师的话鼓舞了贾扬清,他把论文搁在了一边,一头扎进 Decaf。“导师总能教会我,分清主次。”

贾扬清写好了脚手架,小规模“跑起来”后,他把 Decaf 放到了伯克利的小组里,让同学们试用,大家都觉得“还挺好用的”。Evan Shelhamer、Jonathan Long、Jeff Donahue、Sergio Guadarrama 和贾扬清一拍即合,决定组成一个“核心小团伙”,在日常科研和工程工作以外,一起开发 Decaf。很快,“小团伙”复现出 AlexNet 模型。

Decaf 需要基于 cuda-convnet 来训练,但是通过 Decaf 验证,深度学习特征能够利用学习范例进行深入实验,大家觉得,干脆二次开发,做成一个完整的深度学习框架,让它成为通用又干净的 AI 框架工具。

因为 GPU 飞快的速度,贾扬清忖思着把 Decaf 改为 Caffe,伯克利小组的同学们更喜欢 Caffe 的叫法。于是,Decaf 更名为 Caffe。两个月后,Caffe 写完了。贾扬清特意跟导师申请了一笔费用,买来一台冰滴式咖啡机,放在研究室。此后,Evan Shelhamer 经常给大家做咖啡喝,这导致本想戒掉咖啡的贾扬清“最终也没能戒掉咖啡”,大家索性把对外接洽咨询工作的邮箱也改为了 caffe-coldpress。

4f533be5474deb59ed9b5fb9f1554a2d.jpeg

图 3 贾扬清最早用来开发 Caffe 的电脑主机

贾扬清面临一个难题:该用哪种方式公布 Caffe?是像 Alex Krizhevsky 一样成立创业公司,商业化运作?还是作为程序库,纯粹支持科研?还是开源?贾扬清举棋不定,而其他 Caffe 开发者的意见也各有倾向,莫衷一是。

贾扬清有心开源 Caffe。他想到过去几个月,若是有一个公开的深度学习框架,能获取代码和算法的细节,自己就不必再浪费精力复现。而且,“当学生时,我内心深处就有‘做出一个东西,放到开源上’的愿望”,“我在伯克利所用到的代码,绝大多数都是开源的”,“只有把市场做大,大家才可能都有蛋糕吃”,“开源,并不会抹灭个人的技术能力”,“反正,买咖啡喝,我还是买得起的!夫复何求呢。”

该如何让大家同意呢?“这可比写 Caffe 难多了”。贾扬清决定,挨个找核心开发的同学们谈。有的同学好谈,有的则难辩,贾扬清急了,脱口说出气话“这是我写的框架,所以我应该有决定权!”的时候也有,前后谈了 7 天,最后,所幸同学们都同意 Caffe 开源。

2013 年 12 月,Caffe 放到 GitHub 上,正式开源。得知消息的 Alex Krizhevsky 也很开心。贾扬清的导师建议把伯克利大学写在 Caffe 的说明上,贾扬清也很乐意,“Caffe 以伯克利大学的名义开源,大家很骄傲,觉得为母校争光了。”

在 Google 实习时,贾扬清拿到了 Google 的正式 Offer,只等毕业后入职。不再想找工作的贾扬清完全放飞,索性毕业论文也不写了,最初研究的心理学课题,也不了了之。

Caffe 开始吸引用户和开发人员,借由 Caffe 光环,贾扬清结识了许多业内人士。两个月后,贾扬清意外收到英伟达公司的邮件,英伟达提出,将为伯克利研究所提供计算的资源,派工程师和贾扬清他们一起做框架优化,提升 Caffe 的应用稳定性。贾扬清同意合作,他看中英伟达在系统侧的优势。接下来的一年,汲取各方的力量的 Caffe,走在加速发展的路上。

Google 工作之余,贾扬清继续和伯克利的同事们一起维护 Caffe。贾扬清开始重新设计 Caffe 的一些结构,使它更模块化,更能适配各种环境下部署。有开源社区经验的 Evan Shelhamer 主导和各方进行合作;Jeff Donahue 帮助 Pinterest 建立了一个深度学习系统;Jonathan Long 给 Caffe 提供了包括 Python 接口在内的诸多新特性……在社区建设上,由 GitHub 和 caffe-users 邮件组一起组成了松散、自由的组织,依靠 Caffe 的使用者们自发管理。

做 Caffe,贾扬清经历了从 0~1 的完整项目经验积累,“Caffe 应该算是我第一个 C++ 的项目。”整体上“对我的锻炼很大,从组团开发、到如何推广、如何获取反馈、如何改进流程,我亲历了每个环节。”离开伯克利的第二年 5 月,贾扬清才终于完成了博士毕业论文。

小镇青年上清华

1984 年,贾扬清生在绍兴上虞县。父母都是中学语文老师。1 岁时,贾扬清最爱听故事,妈妈常拿着图画书给他讲故事。3 岁时,贾扬清已识两三百个字,常常捧着一本书,读得入迷。5 岁,父母带他去新华书店,贾扬清挑了《安徒生童话》,妈妈惊讶地问:书里的字,你能看懂吗?贾扬清点了点头。

贾扬清一家人住在校园,安宁平静,生活规律。6 点,父母起床,去守早自习,贾扬清也跟着起来了。小学六年级,贾扬清从父母所在的学校插班到上虞市中心学校,新环境,贾扬清感到好奇之余也有点自卑感,他更加努力学习,想通过成绩来证明自己。中考,贾扬清以上虞区第三名的成绩考进春晖中学。

初二,流行学计算机,尽管学校有机房,贾扬清父母还是花 7000 多元,给他买了台奔腾Ⅱ。贾扬清凭感觉在机器上捣鼓,试装各种软件、玩扫雷游戏……有一次,贾扬清去同学家玩,看到同学用鼠标在计算机屏幕上的图形界面上点来点去,并向他演示自己在学编程,贾扬清觉得好玩。回家后,他摸索着用 BASIC 写出一个小程序──在方框里输入一个年份数字,屏幕上显示出年份所对应的生肖。

计算机让贾扬清觉得“可以创造出一个新东西。”“很开心。”但贾扬清听父母话,为高考的目标,仍把精力放在学习上。初中,语文老师教同学们写文学评论,贾扬清把《论<西厢记>里诗歌的描写和艺术》当选题,老师很诧异,跟贾扬清的妈妈说:让孩子看《西厢记》是否太早了?妈妈则说“看吧,没关系。”父母教语文,贾扬清家里文学类书多,他常随意从父母的书架上抽出一本书,翻看。拿下一本钱钟书的《谈艺录》,翻了翻,当然“看不懂,又放了回去。”贾扬清看《西方文学史》《荷马史诗》,感觉“外面的世界和我生活的小城是不一样的。”贾扬清看《十四行诗》发现,西方的诗歌讲究韵脚,类似中国古代诗歌平仄。“居然可以相互印证,很有意思……”贾扬清一直对文学感兴趣,但他选了理科。“比起文科,理科可以靠自己的努力,走得更远一点。”又或许,受当时人人都说“学好数理化,走遍天下都不怕”的大环境影响。

高中,贾扬清拿到了全国物理和化学竞赛两个一等奖,英语也获得了综合能力二等奖。数学不突出,父母给他买了“洪恩在线”光盘,大量刷题。“不会做的题,也会买一整本练习题来做,直到熟悉运用为止。”贾扬清数学成绩逐渐好起来,获得了全国数学联赛二等奖。

2002 年,高考,物理试卷的最后一题,贾扬清失误了,痛失 27 分!结果,考了 686 分。贾扬清心之所向是清华计算机系,在跟清华招生办老师讨论后,稳妥起见,第一志愿上,填写了“清华大学自动化系”。当贾扬清打开通知书,看到封面写着“清华是你一生的骄傲”这句话时,很开心。

开启人工智能研究

清华图书馆早上 8 点开门,7 点多,贾扬清已和几位要好的同学站在门前排队等待自习。班里 27 个同学,贾扬清成绩很快又排到了前几名。本科四年,除了学习,贾扬清的生活还是学习。课余,贾扬清把微积分当作研究课题,做《吉米多维奇数学分析习题集》。

清华信息学院由自动化系、计算机系和电子系组成,三个系所学基础科目相同,计算机系偏理论和软件。“自动化系本质上就干两件事——烧锅炉和开电梯。烧锅炉,要让温度迅速升高,到达一定高温后,要让温度维持稳定,这就是控制理论要解决的问题。开电梯也同理。”

⼤三,贾扬清选修了张长⽔教授的《模式识别和智能系统》课,贾扬清忽然意识到,人工智能最让他着迷的是——从固有经验里突破出去,为可能性去探路。“这就有事儿可以干了!”而且“人工智能的算法,我们只能说以多少正确率、大概去做某些东西的识别,很多问题既无知也无解。”贾扬清对“机器学习”产生了浓厚的兴趣。“让机器自动帮人做事,把人从低级、重复的劳动中解放出来,是一件有趣、有意义的事。”论⽂阅读课,贾扬清找到《科学》杂志(Science),朗读了 Geoffrey Hinton 的《基于神经网络的数据降维》(Reducing the Dimensionality of Data with Neural Networks)文章。课后,贾扬清找“神经⽹络”相关的资料,自学,他去了解“玻尔兹曼机”等概念……尽管当时,在人工智能领域,“神经⽹络”处在低潮期。

毕业前夕,贾扬清凭兴趣做了一个课程设计——在交通拥挤的情况下识别单辆汽车。若能识别出有多少辆单辆汽车,便能判定当前路段的拥堵情况。贾扬清和同学们站在四环路上的每一个天桥上,用相机拍了许多经过桥下车辆的照片,手工在照片上做标识。“当时还没深度学习,我用了计算机视觉的经典方法,看识别车辆能到什么程度。”“我觉得这个问题好玩,有挑战,就去探索,也不是上来就能解决掉,若是已经有一个正确方法,就没意思了。”

2006 年 7 月,“好学生”贾扬清本科毕业,免试升入本校读硕士研究生。贾扬清跟随张长⽔教授,攻读模式识别和智能系统专业,正式走上人工智能研究之路。

一人独讲 5 篇国际论文

2008 年 7 月,芝加哥,计算机国际学术会议。天气炎热,穿短袖的贾扬清,被会议厅巨冷的空调吹得瑟瑟发抖。贾扬清心里也忐忑不安,他要反复上台,用英文讲 5 篇国际论文,其中 4 篇都是他陌生的领域,而台下都是来自世界各地的专业人士。

实验室 5 位同学论文入围,但只有贾扬清拿到了美国签证。无奈之下,贾扬清只好“依葫芦画瓢”代讲。导师鼓励他:“你放心,讲得烂,别人都不会记得,你没那么重要。放心讲就行了。”“搞砸了,人家记不住你;搞好了,人家会说,这个人还不错哦!” 学术会议上,欧美同行乐于主动展示自己的风气,对贾扬清冲击很大。国内实验室,大家普遍闷头做自己的科研,欧美人则非常希望自己的科研让更多人看见,他们主动找人攀谈,在讲台旁边支起易拉宝,努力宣传自己的项目。他们讲起自己正做的事,便眉飞色舞,眼里放光,浑身洋溢着自豪感。贾扬清被深深感染。“我学会了跟别人沟通自己做科研背后的想法。当时,我们普遍欠缺这种能力。”

2009 年夏天,25 岁的贾扬清从清华研究生毕业,一口气申请了十几所国外大学的博士生,其中加州大学伯克利分校计算机系提供全奖,学校在加州也甚合贾扬清的心意。那时,人工智能的研究处于摸索场景应用的初级阶段,语音识别、机器翻译、物体识别……就业方向局限在算法领域,从事数据科学家、数据挖掘等工作,还未单独成为招聘门类。

Google 实习

伯克利研讨会上,一位大厂同行主动找到贾扬清说:“我们很喜欢 Caffe。代码里,居然有单元测试!很多时候,搞科研的人写出来的代码真是没法看啊,但你们写的还不错!”这得益于贾扬清在 Google 实习,学写代码时养成了好习惯。

每年的 5 月下旬到 8 月,伯克利放暑假,学生们为培养工业实践经验,多数都会去大厂实习。2011 年,夏天,贾扬清在 NEC 实验室实习,第⼀次接触到稀疏编码(Sparse Coding),贾扬清做了⼀个⾃动学习每个特征的感知域算法,在 CIFAR 数据集上获得了当时最好的准确率。

博士二年级暑假,Google 邀请贾扬清到公司面试,随即便留下实习。Google 的实习,分产品工程和研究院两个方向。贾扬清在研究院,导师是华人韩玫(现任平安科技硅谷研究院院长)。贾扬清做图像识别和视觉图像上视频理解的研究,和图像搜索的团队一起,做精准识别模型,致力提升识别的正确率。后来,他所参与的工作,被集成到 Google Photos 的个人相册里。

置身 Google,贾扬清感受到,几万名工程师分布式协同工作的极致高效。Google 的工程实践流程体系健全,写代码的过程用规范固定下来:要求写程序时,要把单元测试方式写到旁边,方便他人修改后测试;要求用标准的格式写文档。短时间内,贾扬清写代码的能力,被迅速提升。“这一方面,得益于我从众多开源软件中学习;另一方面,我觉得好奇心是衡量学习的普世标准。看到好的代码,自己动手试一试,多写几次,不断改进。”“每个人都有好奇心,就像儿童敢吃任何东西,是因为儿童没有吃的经验,尝试吃新东西的边际收益大,世界真美味的欢乐大于偶尔吃到泥巴的苦。”“上了年纪,可借鉴的经验数据越来越多,就需要用哲学代替经济学,用信仰强行将自己置于探索行动中,而非总是科学理性地在经验中深度学习,选优。”

在 Google 实习,贾扬清“一边学东西,一边改善生活”。Google 食堂饭菜丰盛,有款名为“十磅”的甜点小蛋糕,寓意在 Google 待上一年,体重会涨 10 斤!贾扬清用 Google 的实习工资,换了一辆新车。在 Google 养成的良好工作习惯留痕在 Caffe 的代码里。

2013 年,贾扬清从伯克利毕业,获计算机博士学位。

从 TensorFlow 到 PyTorch

贾扬清到西班牙开会,患重感冒,深夜去药店买药,不懂西班牙语,打开 Google 翻译的照相机翻译,顺着货架一排排扫描过去,居然找到了布洛芬。

紧急情况下,用自己开发的功能,解决了问题,“感觉很奇妙”。Google 收购而来的 OCR 算法本来较简单,无法识别复杂的字体和文字,在云上识别,速度慢,贾扬清和作者一起,第一次将深度学习 OCR 模型做到了手机上。

2013 年,贾扬清入职 Google Brain(2023 年 4 月,Google Brain 与 DeepMind 合并为 Google DeepMind),两年后,贾扬清成为 TensorFlow 的创始团队一员。“TensorFlow 第⼀代框架的作者大多还在 Google,二代框架做得深入又完备。被 Google 的产品广泛采用。”TensorFlow 被 Google 公司开源,一度成为 GitHub 上 Star 数超高的项目。在 Google,贾扬清找到了个人的”比较“优势。“我先从 AI 的科研开始,和科学家们有共同语言;做工程,工程师们觉得我写代码不错。”“我能够让两边沟通协作。”

2016 年,贾扬清加入 Facebook 公司(现 Meta)。Facebook 需要搭建一个支持广告、Feed、搜索推荐、图像识别、自然语言处理、混合现实等所有产品的 AI 底座平台。贾扬清的 4 人团队,小而高效。在 Caffe 的基础上,开发 Caffe2。Caffe2 发布时,“增强现实和虚拟现实”突然流行,Caffe2 仅用了 2 个月的时间就嵌入了手机端。扎克伯格非常开心,亲自发了条动态,官宣了艺术家风格转换功能(见图 3)。这是深度学习⽹络首次在超过 10 亿台手机应用。

c4a789fd28bec6820cb7b9df64c2ca97.png

图 3 扎克伯格亲自官宣艺术家风格转换的功能

就在贾扬清做 Caffe2 的同时,纽约的 Facebook 人工智能研究院主导的 PyTorch 获得成功。2018 年,在贾扬清的主导下,Caffe2 的后端、PyTorch 的前端、ONNX 的标准合成⼀个完整的框架,命名为 PyTorch1.0。“如果说 TensorFlow 像一个庞大又复杂的联合收割机,PyTorch 则更像是一辆灵活又便捷的单车。”

问答实录

刘韧:机器翻译靠什么突破?

贾扬清:以往,机器翻译依赖建立语法规则实现,但两种语言间的句法差异巨大,很难用手写的方式,穷尽定义语法规则。现在,用神经网络,再借助互联网收集数据,训练神经网络,逐步优化、提升其精准度。

刘韧:规则方式和神经网络方式,不同在哪?

贾扬清:程序员写规则,就会陷入到无尽的规则中,进入规则沼泽,例外之外还有例外,是一个无穷尽的问题。用神经网络,用模糊的方式模糊地解决问题,再通过数据训练逐步提高预测准确率。

刘韧:深度学习和强化深度学习有什么不同?

贾扬清:强化深度学习意思是,如何把将来获得的收益或惩罚回归到现在。

刘韧:人工智能会在哪个方向上和人争工作?

贾扬清:简单重复的人类劳动被替换是个好事,人解放出来的时间,可以想更多的可能性。达芬奇有幅非常著名的画叫《岩间圣母》(Virgin of the Rocks),圣母的主体是达芬奇画的,背景的花草石头是达芬奇的助手画的,达芬奇也需要助手。今天很多画家,他画主体,再找助手把背景填上去。他也可以让 AI 来填背景。就像达·芬奇的助手一样,AI 能提升画家的效率。

刘韧:中美的技术差距体现在哪方面?

贾扬清:好奇心。我们最优秀的人才在追求执行力,解决具体问题。欧美人更喜欢搞新东西。不得不承认,美国人已经解决温饱很长时间,因此他们玩得更多,玩得多,总能玩出一些新东西。我们在很多方面要追,这事急不来。

关于《开源英雄

《开源英雄》是由 CSDN 创始人&董事长、极客帮创投创始合伙人蒋涛发起,中国著名 IT 记者、DoNews 创始人刘韧领衔,CSDN、《新程序员》联合出品的专访栏目。通过开源开放的 CSDN 写作班,深入访谈全球顶尖开源人物,为广大开发者传递更多、更高质量的信息,透过他们的人生及成长寻找共鸣、共舞开源世界。

自栏目推出至今,我们专访了 Vue 作者尤雨溪、LVS 创始人章文嵩、Linux 内核守护者吴峰光、中国 Linux 第一人宫敏、小米开源奠基者崔宝秋、Caffe 作者贾扬清,如果你有想让我们报道的开源人物,欢迎在 GitCode 上提交 Issues 或 PR。

地址:https://gitcode.net/programmer_editor/Open-Source-Heroes

推荐阅读:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1190691.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

零代码+分布式微服务架构打造新一代一站式服务集成平台

目 录 01 项目背景 02 普元ESB产品介绍 03 新版本功能特性 04 应用案例‍‍‍‍ 05 展望与发展 01 项目背景 企业在实现数字化转型的过程中&#xff0c;随着信息化程度的提高&#xff0c;越来越多的企业开始采用微服务架构来构建自己的业务系统,各种系统之间的集成、数据共享…

计算机网络:概述

0 学时安排及讨论题目 0.1讨论题目&#xff1a; CSMA/CD协议交换机基本原理ARP协议及其安全子网划分IP分片路由选择算法网络地址转换NATTCP连接建立和释放再论网络体系结构 0.2 本节主要内容 计算机网络在信息时代中的作用 互联网概述 互联网的组成 计算机网络在我国的发展 …

【vector题解】连续子数组的最大和 | 数组中出现次数超过一次的数字

连续子数组的最大和 连续子数组的最大和_牛客题霸_牛客网 描述 输入一个长度为n的整型数组array&#xff0c;数组中的一个或连续多个整数组成一个子数组&#xff0c;子数组最小长度为1。求所有子数组的和的最大值。 要求:时间复杂度为 O(n)&#xff0c;空间复杂度为 O(n) 进…

Java算法(五):手写数组逆置API方法,实现数组逆置。 while实现 for循环实现

Java算法&#xff08;五&#xff09; while 循环实现 需求&#xff1a; 已知一个数组&#xff0c;arr {11, 22, 33, 44, 55};使用程序实现把数组中的元素交换位置。 交换后的数组为 arr {55, 44, 33, 22, 11}; 并在控制台输出交换后的数组元素。 代码示例 package com.…

集成MCU的OTP-2.4G合封芯片XL2401D,收发一体 上手简单

芯岭技术的XL2401D是一颗2.4G合封芯片&#xff0c;收发一体。合封芯片可以很好的节省PCB面积和开发成本。一颗芯片可以做到之前两颗芯片才能做到的事情。XL2401D内含MCU为九齐NY8A054E。有九齐MCU开发经验的话开发起来非常容易上手。 XL2401D芯片是工作在2.400~2.483GHz世界通…

UE5蓝图接口使用方法

在内容区右键创建蓝图接口 命名自定义&#xff08;可以用好识别的&#xff09; 双击打开后关闭左边窗口 右键函数 -- 重命名 -- 名称自定义&#xff08;用好记的&#xff09; 点击下边输入后面的 号创建一个变量 点击编译并保存 在一个蓝图类里面 -- 点击类设置 在右侧已实现的…

YOLOX: Exceeding YOLO Series in 2021(2021.8)

文章目录 AbstractIntroduction介绍前人的工作提出问题解决 YOLOXYOLOX-DarkNet53Implementation detailsYOLOv3 baselineDecoupled headStrong data augmentationAnchor-freeMulti positivesSimOTAEnd-to-end YOLOOther BackbonesModified CSPNet in YOLOv5Tiny and Nano dete…

SQL note1:Basic Queries + Joins Subqueries

目录 一、Basic Queries 1、数据库术语 2、查表 3、过滤掉我们不感兴趣的行 4、布尔运算 5、过滤空值&#xff08;NULL&#xff09; 6、分组和聚合 1&#xff09;汇总数据的列 2&#xff09;汇总数据组 7、分组聚合的警告 1&#xff09;SELECT age, AVG(num_dogs) FR…

【Shell脚本8】Shell printf 命令

Shell printf 命令 printf 命令模仿 C 程序库&#xff08;library&#xff09;里的 printf() 程序。 printf 由 POSIX 标准所定义&#xff0c;因此使用 printf 的脚本比使用 echo 移植性好。 printf 使用引用文本或空格分隔的参数&#xff0c;外面可以在 printf 中使用格式化…

银行APP虚拟金额软件,建设农业工商邮政余额生成器,易语言开源版

用易语言开发了一个虚拟余额装逼软件&#xff0c;可以生成虚拟的余额截图&#xff0c;就是APP端的截图&#xff0c;用的画板组件&#xff0c;但是生成出来的图片是非常高清的&#xff0c;软件里面因为图片是缩放状态&#xff0c;所以看起来有点失真的感觉&#xff0c;生成图片的…

pandas 获取一段时间内每个月的最后一个工作日和日历日

获取一段时间内每个月的最后一个工作日 endlistpd.date_range(start‘2023-01-01’, end‘2023-09-30’, freq‘BM’).strftime(“%Y-%m-%d”).to_list() 获取一段时间内每个月的最后一个日历日 endlistpd.date_range(start‘2023-01-01’, end‘2023-09-30’, freq‘M’).st…

Leetcode Hot 100之四:283. 移动零+11. 盛最多水的容器

283.移动零 题目&#xff1a; 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] …

nodejs+vue+python+PHP+微信小程序南七街道志愿者服务平台的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

简单的小调度器

收集小资源下的简单调度器 https://github.com/sigma318/TOS/tree/master https://github.com/smset028/xxddq

css呼吸效果实现

实现一个图片有规律的大小变化&#xff0c;呈现呼吸效果&#xff0c;怎么用CSS实现这个呼吸效果呢 一.实现 CSS实现动态效果可以使用动画( animation)来属性实现&#xff0c;放大缩小效果可以用transform: scale来实现&#xff0c;在这基础上有了动画&#xff0c;就可以设置一个…

rabbitMq创建交换机,以及路由键绑定队列教程

创建交换机&#xff1a; 创建队列&#xff1a; 创建路由&#xff0c;绑定到交换机&#xff1a;

Java9新增特性

特性列表 模块化系统&#xff1a;Java 9引入了模块化系统&#xff0c;将代码划分为模块&#xff0c;以更好地组织和管理代码。新的日期和时间API&#xff1a;Java 9引入了新的日期和时间API&#xff0c;使得处理日期和时间变得更简单、更强大。HTTP/2支持&#xff1a;Java 9引…

【OJ比赛日历】快周末了,不来一场比赛吗? #11.11-11.17 #12场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 2023-11-11&#xff08;周六&#xff09; #5场比赛2023-11-12…

python学习笔记-函数

1、使用关键字参数调用函数 2、使用函数的默认值 3、可变参数