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

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

推荐阅读:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

通过postgis空间库导入sql格式的矢量数据到arcgis中

1、在postgis中创建数据库 命名为test3 2、创建空间扩展 3、导入sql矢量文件 进入psql.exe目录中 进入dos命令框中 输入命令,其中host输入自己的主机ip,database为自己的数据库名称,数据路径修改为自己电脑上的路径,注意反斜杠 psql

毫米波雷达技术在自动驾驶中的关键作用:安全、精准、无可替代

自动驾驶技术正以前所未有的速度不断演进&#xff0c;而其中的关键之一就是毫米波雷达技术。作为自动驾驶系统中的核心感知器件之一&#xff0c;毫米波雷达在保障车辆安全、实现精准定位和应对复杂环境中发挥着不可替代的作用。本文将深入探讨毫米波雷达技术在自动驾驶中的关键…

移远EC600U-CN开发板 day01

1.官方文档快速上手&#xff0c;安装驱动&#xff0c;下载QPYcom QuecPython 快速入门 - QuecPython (quectel.com)https://python.quectel.com/doc/Getting_started/zh/index.html 注意&#xff1a; &#xff08;1&#xff09;打开开发板步骤 成功打开之后就可以连接开发板…

IDC发布2023H1CRM报告 ,纷享销客增长率稳居第一

近期&#xff0c;国际数据公司&#xff08;IDC&#xff09;发布了《IDC China Semiannual CRM SaaS Tracker 2023H1》数据报告&#xff0c;该报告详细分析了纷享销客和Salesforce等国内外CRM厂商的数据。根据报告数据显示&#xff0c;纷享销客2023年H1的增长速度依然保持近40%&…

万宾科技智能井盖,实现对井盖的监测

随着人工智能和物联网技术的不断变化&#xff0c;各种适用于市政府提高管理能力和公共服务水平的高科技产品不断更新。在道路基础设施建设过程中&#xff0c;智能井盖传感器的出现时刻保护着城市地下生命线&#xff0c;而且可以对地下水道井盖进行实时的监测并完成数据上传等工…

原来阿里字节大厂程序员的简历长这样!

1 前言 疫情过后&#xff0c;IT行业内卷就不说了&#xff0c;有很多小伙伴跟我咨询面试环节及简历上的事&#xff0c;都想在简历方面有些突出&#xff0c;博眼球。我发现大部分初、中级甚至高级程序员的简历逻辑都比较混乱&#xff0c;花里胡哨&#xff0c;没有突出重点&#x…

基于单片机的甲醛检测器设计

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式 文章目录 概要 一、设计的主要内容二、系统硬件设计三、软件设计4.1 程序结构流程图原理图 四、结论五、 文章目录 概要 本文将要提…

响应式生活常识新闻博客资讯网站模板源码带后台

模板信息&#xff1a; 模板编号&#xff1a;30483 模板编码&#xff1a;UTF8 模板分类&#xff1a;博客、文章、资讯、其他 适合行业&#xff1a;博客类企业 模板介绍&#xff1a; 本模板自带eyoucms内核&#xff0c;无需再下载eyou系统&#xff0c;原创设计、手工书写DIVCSS&a…

世界互联网大会领先科技奖发布 百度知识增强大语言模型关键技术获奖

11月8日&#xff0c;2023年世界互联网大会乌镇峰会正式开幕&#xff0c;今年是乌镇峰会举办的第十年&#xff0c;本次峰会的主题为“建设包容、普惠、有韧性的数字世界——携手构建网络空间命运共同体”。 目录 百度知识增强大语言模型关键技术荣获“世界互联网大会领先科技奖”…

十分钟理解回归测试(Regression Testing)

回归测试是一个系统的质量控制过程&#xff0c;用于验证最近对软件的更改或更新是否无意中引入了新错误或对以前的功能方面产生了负面影响&#xff08;比如你在家中安装了新的空调系统&#xff0c;发现虽然新的空调系统可以按预期工作&#xff0c;但是本来亮的等却不亮了&#…

应用在便携式多媒体播放器中的音频Codec芯片

便携式多媒体播放器(PMP&#xff0c;Portable Media Player)&#xff0c;也就是通常人们所说的MP4。PMP的主要优点是&#xff1a;携带方便&#xff0c;能够直接播放高品质音/视频文件&#xff1b;也可以浏览图片&#xff0c;以及作为移动硬盘使用&#xff1b;此外&#xff0c;P…

无人机航拍技术基础入门,无人机拍摄的方法与技巧

一、教程描述 买了无人机&#xff0c;可是我不敢飞怎么办&#xff1f;禁飞区越来越多&#xff0c;到底哪儿才能飞&#xff1f;我的无人机跟你一样&#xff0c;为什么我拍不出大片&#xff1f;厂家的说明书看不进去&#xff0c;有没有一套无人机的课程&#xff0c;可以快速上手…

博阳精讯、凡得科技访问上海斯歌:共探BPM流程服务新高地

10月27日下午&#xff0c;来自博阳精讯、凡得科技的流程领域专家、领导一行参观访问了上海斯歌总部。三方举行了深度交流会谈&#xff0c;分享了彼此对流程领域的前沿洞察和技术实践&#xff0c;共同探索了BPM流程服务科技力与价值力的新高地。 本次研讨会上&#xff0c;博阳精…

高性能网络编程 - 解读5种I/O模型

文章目录 服务端处理网络请求流程图基础概念阻塞调用 vs 非阻塞调用同步处理 vs 异步处理阻塞、非阻塞 和 同步、异步的区别recvfrom 函数 五种I/O模型I/O模型1&#xff1a;阻塞式 I/O 模型(blocking I/O&#xff09;I/O模型2&#xff1a;非阻塞式 I/O 模型(non-blocking I/O&a…

【Rust日报】2023-11-08 RustyVault -- 基于 rust 的现代秘密管理系统

RustyVault -- 基于 rust 的现代秘密管理系统 RustyVault 是一个用 Rust 编写的现代秘密管理系统。RustyVault 提供多种功能&#xff0c;支持多种场景&#xff0c;包括安全存储、云身份管理、秘密管理、Kubernetes 集成、PKI 基础设施、密码计算、传统密钥管理等。RustyVault 可…

基于MATLAB的关节型六轴机械臂轨迹规划仿真

笛卡尔空间下的轨迹规划&#xff0c;分为直线轨迹规划和圆弧轨迹规划&#xff0c;本文为笛卡尔空间下圆弧插值法的matlab仿真分析 目录 1 实验目的 2 实验内容 2.1标准D-H参数法 2.2实验中使用的Matlab函数 3 全部代码 4 仿真结果 1 实验目的 基于机器人学理论知识&…

C++二分查找算法:阶乘函数后 K 个零

涉及知识点 二分查找 数学 题目 f(x) 是 x! 末尾是 0 的数量。回想一下 x! 1 * 2 * 3 * … * x&#xff0c;且 0! 1 。 例如&#xff0c; f(3) 0 &#xff0c;因为 3! 6 的末尾没有 0 &#xff1b;而 f(11) 2 &#xff0c;因为 11! 39916800 末端有 2 个 0 。 给定 k&a…

Go RabbitMQ简介 使用

RabbitMQ简介 RabbitMQ 是一个广泛使用的开源消息队列系统&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;标准&#xff0c;为分布式应用程序提供了强大的消息传递功能。RabbitMQ 是 Erlang 语言编写的&#xff0c;具有高度的可扩展性和可靠性&#xff0c;…

暴力递归转动态规划(十四)

题目 arr是面值数组&#xff0c;其中的值都是正数且没有重复。再给定一个正数aim。 每个值都认为是一种面值&#xff0c;且认为张数是无限的。 返回组成aim的最少货币数 暴力递归 依然是面值张数的问题&#xff0c;暴力递归尝试的过程是从数组arr index 0位置出发&#xff0c…

sql注入学习笔记

sql注入原理 掌握sql注入漏洞的原理掌握sql注入漏洞的分类 万能用户名 777 or 11 #原句 select userid from cms_users where username ".$username." and password".md5 ( $password ) ."输入过后为 select userid from cms_users where username …