如果你在人工智能或者计算机视觉这个圈子里待过一段时间大概率会陷入一种又爱又恨的状态爱的是 ArXiv 上每天都有海量的新工作、新idea恨不得全都塞进脑子里恨的是这个量实在太大了每天光看标题就要花掉一两个小时更别提摘要和全文了。我自己从研究生阶段开始就养成了“每日刷 ArXiv”的习惯后来工作之后这个习惯演变成了一个固定动作——每天早上第一件事先把当天的 CV 论文过一遍筛出值得精读的、值得跟进的、以及有可能和手头项目相关的。时间久了身边朋友就开始问“你今天看了哪些”“有没有什么值得读的推荐”问的人多了我就干脆把这个过程整理成了“每日更新”的 ArXiv CV 论文分享。这篇博文就是想把这件事背后的思路、工具、工作流以及我从实际操作里踩过的坑都摊开来讲一讲。不管你是刚入门的硕士生、正在准备开题还是已经在工业界做模型落地、需要持续追踪 SOTA这套方法论都能让你把“刷论文”这件事的效率提起来从一个被动的信息接收者变成一个主动的内容筛选者。1. 内容整体设计与思路拆解1.1 为什么要做“每日精选”而不是“全量搬运”先说一个大家可能都知道但不一定意识到的问题ArXiv 现在的论文量有多大拿计算机视觉方向来说光是 cs.CV 这一个分类每天新增的论文少则一两百篇多的时候能到三四百篇。全量搬运没有任何意义因为没有人能把这些全读完也没有人需要把它们全读完。真正的需求是“筛选”——从几百篇里挑出那 5 到 10 篇值得花时间看的这才是有价值的事情。所以我在设计这个每日分享的时候给自己定了几条规则。第一不追求数量每天精选的论文严格控制在 5 到 10 篇第二不只列标题和作者每篇都写清楚“这篇解决了什么问题、用了什么方法、适合谁读”第三绝对不做简单的“标题党翻译器”而是站在一个从业者的角度判断这篇工作的实际分量。这样一来读者打开一篇每日分享3 分钟就能知道今天的 CV 圈有哪些值得关注的新工作而不是被信息淹没。1.2 论文筛选的优先级逻辑每天面对两三百篇论文怎么决定哪些进精选清单我自己长期使用下来的一套筛选维度分享出来供参考。优先级最高的是“问题的重要性”。如果一篇论文解决的是一类大家都绕不开的问题比如训练不稳定、数据标注成本高、小目标检测效果差那么不管它的实验做到什么程度都值得被看到。其次看“方法的普适性”有些工作虽然是在某个特定数据集上刷了 SOTA但方法本身可以被借鉴到其他任务里这种论文的扩散价值很高。最后才是“实验的完整性”和“写作质量”实验扎实、消融完整的工作说明作者思路清晰读起来收获更大写作质量差的即使 idea 再好也往往需要花费更多时间去还原真实思路在每日分享里就会往后排。当然这套筛选逻辑不是死板的。比如某一天突然出现一篇新任务的开山之作哪怕实验不完整我也会在分享里加粗标注因为这种工作的价值不在于当下的数据而在于它打开的方向。1.3 分享内容的“读者分层”做了一段时间之后我发现不同阶段的读者对同一篇论文的关注点差异非常大。刚入门的研究生可能更关心“这篇论文有什么能复用的技巧”准备发论文的同学会关注“这个方法能不能迁移到我自己的任务上”在工业界做落地的工程师则更关心“这篇工作有没有工程价值、能不能稳定复现”。为了让一份每日分享同时满足这几类人的需求我把每篇推荐的内容拆成了三个层次一句话概括核心贡献这是给所有人的简要技术路径说明这是给想深入理解的人实际应用场景判断这是给做工程落地的人。这样一位读者就算只看了标题和第一层也能快速决定要不要继续深入。2. 核心细节解析与实操要点2.1 论文编号和时间线的对应关系用过 ArXiv 的人应该都见过那种长得很特别的编号比如 2406.09246。这个编号不是随机的前两位表示年份中间两位表示月份后面是当月提交的论文序号。也就是说 2406.09246 就是 2024 年 6 月提交的第 9246 篇论文。理解这个编号规律之后你再看到网上有人讨论“arxiv:2406.09246”这篇论文时不需要点开就能知道它大概是什么时候的工作。这个规律在每日分享里用处很大。因为它意味着你可以在不看具体内容的情况下快速判断一篇论文的新鲜程度。比如我日常整理当天论文时如果看到标号是 2508 开头的说明这是最近提交的时效性没问题如果某个话题下频繁出现 2403 或者更早的论文那大概率是讨论串被旧论文带偏了或者那篇论文是经过反复修改后重新提交的版本。另外ArXiv 论文大多数会有 v1、v2 这样的版本号v2 往往说明作者根据审稿意见或者社区反馈做了修改新版的内容和实验数据通常更可靠。2.2 每日更新背后的“三遍筛选法”很多人会好奇我每天是怎么在有限的时间里看完那么多论文摘要的。这里分享我实际使用的方法我叫它“三遍筛选法”。第一遍只看标题。下载当天的论文列表之后快速扫一遍标题把明显不相关的比如纯理论数学推导、跟 CV 完全无关的交叉领域先去掉一般能过滤掉一半以上。第二遍看摘要的关键词和图表。对剩下的论文重点看摘要里出现的高频动词和名词比如 Transformer、diffusion、self-supervised、detection、segmentation 这些再扫一眼论文里的图表基本就能判断出这篇工作的技术路线和实验主要结果。第三遍才是针对真正感兴趣的十几篇论文展开全文看方法和实验设置。这个方法看起来很简单但实际操作中容易犯一个错误第一遍过滤时过于依赖标题的“相关性”而忽略了“迁移性”。很多有价值的交叉工作标题里根本不会出现“computer vision”这个词但内容里用了视觉方法解决了一个完全不同的任务。所以我现在的习惯是第一遍只看“明显不相关”把标准放宽宁可第二遍多看几篇摘要也不要因为标题错过一篇好论文。2.3 关键词过滤配置的踩坑记录如果你打算用自动化脚本或者邮件订阅来辅助筛选关键词配置这一步最容易出问题。我的建议是关键词不要设置得太生也不要太泛。举个例子我曾经为了找视频理解方向的论文把关键词设成了“video”结果每天推给我几百篇带“video”这个词的论文里面有一大半是视频压缩、视频传输、视频编码相关的跟视频理解根本不沾边。后来我把关键词改成了“video understanding”“action recognition”“temporal modeling”精度一下子上来了。另一个坑是“负向关键词”的使用。这个功能很多人会忽略但它特别好用。比如你做的是 2D 视觉任务不关心 3D 重建那就在过滤规则里把“3D reconstruction”“point cloud”“neural rendering”这些加进负向列表能省掉大量阅读时间。还有一点如果你关注的是某个特定团队或者某个具体方向ArXiv 的 API 是支持按作者名字过滤的但这个功能用起来有个副作用系统会漏掉那个团队其他成员作为一作或者通讯作者的文章所以建议作者过滤只作为辅助不要作为唯一依据。3. 实操过程与核心环节实现3.1 搭建一个个人版“论文每日追踪系统”自己动手搭一个简单的论文追踪系统其实没有想象中复杂。这里分享一套我目前用得比较顺手的组合完全免费整个过程不需要写太多代码。核心思路是用 ArXiv 官方提供的 API 接口来拉取当天指定分类下的论文元数据。你不需要自己写爬虫去抓网页ArXiv 的 API 返回的是标准的 Atom 格式数据用 Python 的 requests 加 feedparser 两个库就能解析。import requests import feedparser # 拉取 cs.CV 分类下当天的论文 url http://export.arxiv.org/api/query params { search_query: cat:cs.CV, sortBy: submittedDate, sortOrder: descending, max_results: 300, } response requests.get(url, paramsparams) feed feedparser.parse(response.content) papers [] for entry in feed.entries: papers.append({ id: entry.id.split(/abs/)[-1], title: entry.title.replace(\n, ), summary: entry.summary.replace(\n, ), authors: [a[name] for a in entry.authors], published: entry.published, }) print(f共获取到 {len(papers)} 篇论文)拿到数据之后再做一个简单的关键词过滤把上面说的正向和负向关键词套进去。positive_kw [object detection, semantic segmentation, instance segmentation] negative_kw [3d reconstruction, point cloud, neural rendering] filtered [] for p in papers: text (p[title] p[summary]).lower() if any(kw in text for kw in positive_kw) and not any(kw in text for kw in negative_kw): filtered.append(p) print(f经过关键词过滤后剩余 {len(filtered)} 篇)这套脚本跑一遍几秒钟就能把当天几百篇论文过滤到几十篇剩下的再手动做一次“三遍筛选法”效率比纯手工刷网页高很多。如果不想自己维护脚本也可以直接用别人做好的 ArXiv 论文订阅服务每天定时把论文列表推到邮箱再配合关键词标签功能使用。3.2 用 GitHub Actions 实现“全自动日报”每天手动跑一遍脚本还是有点麻烦更省事的做法是让它在服务器上定时运行自动生成一份日报文件。如果你手头有一个 GitHub 仓库可以利用 GitHub Actions 的定时任务功能schedule 事件实现每天凌晨自动拉取论文、自动过滤、自动生成 Markdown 文件推送到仓库里。核心配置是在仓库的.github/workflows/daily.yml里写一个工作流类似这样name: daily-arxiv-cv on: schedule: - cron: 30 20 * * * # 每天 UTC 时间 20:30北京时间凌晨 4:30 workflow_dispatch: # 允许手动触发 jobs: update: runs-on: ubuntu-latest steps: - uses: actions/checkoutv4 - uses: actions/setup-pythonv5 with: python-version: 3.12 - run: pip install requests feedparser - run: python generate_daily_report.py - uses: stefanzweifel/git-auto-commit-actionv5 with: commit_message: auto update daily report这样一旦跑通你就拥有了一个完全自动化的论文追踪系统。每天早上打开仓库就能看到自动生成好的论文日报直接复制粘贴到社交平台或者发给同组同学就行。对于公开的分享者来说这套自动化流程的优势尤其明显因为它彻底解决了“每天手动搬运”这个最大的时间成本问题让你可以把精力放在真正有价值的“筛选判断”上。不过要提醒一句GitHub Actions 的定时任务会有一定的延迟不一定每次都在精确的时刻触发。如果你的使用场景对时间敏感比如需要在早上 8 点前拿到当天的日报建议把触发时间稍微提前两三个小时不要卡在临界点。3.3 手工筛选之外的一句“同义替换”技巧除了自动化脚本手工筛选时也有一个实用小技巧——同义替换阅读法。ArXiv 论文的作者来自世界各地很多非英语母语的作者在写标题和摘要时用词习惯差异很大。比如“目标检测”这个概念不同论文里可能写成 object detection、general object detection、detection task、localization and classification 等等。如果你只盯着一个词看很容易漏掉一批其实相关的论文。我现在的手工筛选习惯是把核心概念在脑子里过一遍“同义词典”。看到“semantic segmentation”会顺手留意“pixel-level classification”“dense prediction”“per-pixel labeling”看到“self-supervised”会留意“contrastive learning”“pretext task”“unsupervised representation learning”。这个过程有点像搜索引擎里的词向量扩展不严谨但非常有效。自动化关键词可以照顾到常见的写法剩余的长尾变体就需要靠这个阅读习惯来补漏。3.4 关于镜像站点和数据拉取的补充说明如果人在国内直接访问 export.arxiv.org 偶尔会遇到连接超时或者下载速度慢的情况。一个相对稳定的办法是使用一些学术镜像站点它们的域名不同但数据内容是一致的。使用镜像站时要注意不要在非官方页面输入任何账号信息也不建议在公共网络环境下频繁大量请求数据礼貌抓取对大家都好。我在脚本里会做一个简单的超时重试机制增强拉取稳定性import time for attempt in range(3): try: response requests.get(url, paramsparams, timeout30) if response.status_code 200: break except Exception: time.sleep(5 * (attempt 1)) continue else: raise RuntimeError(连续三次请求失败请检查网络连接)这段代码的逻辑很简单但实际使用中帮我避免了大量因为网络抖动导致的任务中断。如果你准备把它部署到 GitHub Actions 上也建议加上这个逻辑因为公共服务器的出口网络也不总是稳定的。4. 常见问题与排查技巧实录4.1 为什么有时候推送的论文状态是 on hold我收到过不少读者提问说在某篇论文页面看到状态显示 “on hold”不知道是什么意思。简单解释一下ArXiv 对提交的论文会做一轮自动审核涉及一些基本的格式检查、作者信息完整度检查等。如果系统觉得某篇论文有一些细节需要作者补充或者修改论文会被暂时挂起也就是 “on hold” 状态等作者处理完之后再重新进入审核流程。对读者来说看到 on hold 的论文只是意味着这篇论文还没有正式上线不建议作为正式的引用来源。但如果你想追踪最新的研究动态on hold 状态本身并不意味着工作质量有问题里面确实会有一些作者改完格式后重新提交的论文。我一般会把 on hold 论文当作“预告”处理记录下编号等它正式上线之后再决定要不要精读。这里有个实际操作建议每日自动化脚本默认可以用submittedDate来排序但如果你想要拿到更全面的新论文列表可以考虑把submittedDate换成一个时间范围筛选这样能把你前一天漏掉的、隔了一段时间才被收录的论文也包含进来。4.2 下载 PDF 频繁失败的三个原因经常在社区看到有人问“为什么 ArXiv 论文的 PDF 下载一半就断了”。从我的经验看大多数情况是以下三个原因之一。第一PDF 文件太大。有些带大量高清图表的论文PDF 可能达到几十 MB普通网络环境下下载容易超时。解决方法是换个网络环境或者直接用代码下载配合流式写入的方式把文件保存到本地。第二服务器响应慢。ArXiv 的流量高峰期尤其是国内访问高峰期响应速度会明显变慢这时候可以逐篇下载不要同时并发请求。第三浏览器插件拦截。有些广告拦截插件或者下载管理插件会把 ArXiv 的 PDF 跳转误判为广告手动在浏览器里直接打开 PDF 链接通常能解决问题。4.3 用 OpenCV 实践连接论文和工程说一个和传统“刷论文”不太一样但我很推荐的做法把一些经典论文的核心算法用 OpenCV 亲手实现一遍。刚开始可能觉得这是浪费时间但实际上这是理解论文最有效的方式之一。举个例子论文里经常提到凸包convex hull的计算结果在 OpenCV 里有现成的函数cv::convexHull几行代码就能跑出来。但如果你只是调用这个函数你永远不知道论文里那些形状特征的来龙去脉。我的习惯是先用一段简单的代码画出凸包结果然后对比论文里的图确认特征是否一致。// 用 OpenCV 计算并绘制凸包 #include opencv2/opencv.hpp std::vectorcv::Point points; // 假设 points 是从某种检测结果中提取的关键点 std::vectorcv::Point hull; cv::convexHull(points, hull); cv::Mat canvas cv::Mat::zeros(480, 640, CV_8UC3); std::vectorstd::vectorcv::Point hulls {hull}; cv::drawContours(canvas, hulls, 0, cv::Scalar(0, 255, 0), 2); cv::imshow(convex hull, canvas); cv::waitKey(0);还有cv::fillPoly很多人只是把它当作一个绘图工具来用。但在实现语义分割可视化或者多边形标注的时候它就是核心工具。我见过不少新手项目在处理不规则区域的填充显示时花了大半天自己写逐像素遍历的逻辑其实用cv::fillPoly几行代码就搞定了。// 使用 cv::fillPoly 填充不规则多边形区域 cv::Mat mask cv::Mat::zeros(480, 640, CV_8UC1); cv::Point pts[1][5] { { cv::Point(100, 100), cv::Point(300, 80), cv::Point(400, 240), cv::Point(250, 350), cv::Point(80, 280) } }; const cv::Point* polygons[1] {pts[0]}; int npts[] {5}; cv::fillPoly(mask, polygons, npts, 1, cv::Scalar(255));我把这类工程实践称为“反向论文阅读法”先写代码、跑结果、看图再回头对着论文里的公式和描述验证自己的实现是否正确。做完几轮之后你再看新的论文时对方法里某些操作的效果会有一个更直观的预判能力。4.4 关于 CV 任务适合投期刊和会议的问题如果正在读这篇博文的你不只是想看论文还想自己发论文那么一个绕不开的问题是CV 方向的工作适合投哪些期刊和会议以及 ArXiv 上的论文和正式发表的关系是什么。先说结论计算机视觉领域没有绝对的“只认会议不认期刊”的说法。传统顶会如 CVPR、ICCV、ECCV以及学术期刊如 IEEE TPAMI、IJCV在业内都有很高的认可度。但实际操作中会议因为周期短、反馈快成为大多数 CV 工作首选的发表渠道期刊则更适合那些方法体系完整、实验工作量庞大、需要更多篇幅展开的工作。比较常见的路线是先在 ArXiv 上公开预印本提前建立学术影响力然后投稿到会议或期刊通过同行评审后正式发表。这也是当前 CV 社区的主流玩法。但要注意不同会议对“已经挂在 ArXiv 上的论文”有不同的政策绝大多数允许预印本先公开但也有一些不鼓励或者有限制投稿前一定去官网查清楚该年度最新的征稿说明不要踩了规则红线。我自己见过不少同学有一个误区就是“把 ArXiv 当正式发表来写简历”。严格来说ArXiv 不算是同行评审的正式发表简历里最好标注清楚“预印本”或者“Preprint”避免被评审专家误以为你在故意夸大成果。4.5 网上说的“CV 社区”其实不止一个很多人搜索“cv 社区为什么用不了”会得到一堆奇怪的答案这里系统性梳理一下。在中文互联网语境下“CV 社区”这个词可以指代好几种完全不同的东西。一种是“计算机视觉学习者论坛”这类站点偶尔因为备案、服务器迁移、访问量过载等原因打不开多数情况下过几天就恢复了不用太担心。第二种是“OpenCV 官方社区论坛”这类社区如果打不开大概率是网络访问问题可以尝试换一个网络环境。第三种是某些即时通讯群组或者知识星球这类平台的“用不了”往往是因为群组入口变更、需要重新邀请、或者平台方调整了访问策略。如果你是因为想要获取论文讨论而进了一个社区却发现链接失效了我的建议是不要死守某一个渠道。像我这种每日更新的论文分享本质上就是希望能提供一个相对稳定、持久的信息入口减少大家在不同社区之间反复迁移的折腾。真正固定的信息源加上你自己的筛选能力比任何“社区”都可靠。4.6 常见问题速查表问题常见原因解决办法ArXiv 论文状态显示 on hold论文尚未完成审核等待作者修改记录编号等正式上线后再阅读引用PDF 下载中断文件过大、服务器慢、被插件拦截换网络环境、用代码下载、关闭下载器拦截API 请求超时网络波动或服务器繁忙增加重试机制建议最多重试 3 次关键词过滤不精准正负向关键词设置不合理通过多次运行日志调整加入同义替换词推送的论文更新滞后定时任务延迟或时区配置错误提前触发时间确认 cron 表达式里的时区社区链接无法访问站点备案、网络访问或平台政策变更以固定信息源为主多个渠道备份5. 如何让每日论文分享持续做下去5.1 固定时间、固定格式、固定输出做每日分享这件事真正难的其实不是“选论文”而是“坚持”。长期做下来我最大的心得是一定要把流程标准化。固定每天在同一个时间点浏览论文列表使用同一个模板输出推荐格式发布到同一个平台。这些事情看起来毫不起眼但它们决定了你在这个事情上能坚持多久。我自己的节奏是每天早上用脚本过滤第一轮午休前完成第二轮人工筛选下午固定时间输出最终分享。中间即使有一两天因为其他事情耽搁也不会打乱整体的节奏。因为固定模板的好处是哪怕今天内容比较少你也知道该写哪些字段、按什么顺序组织不会对着屏幕发呆。5.2 如何把“每日阅读”变成“知识资产”这是我觉得最值得展开的一个点。单纯把论文列出来推送给别人价值是单次的、即时的。但如果你在筛选的同时给每篇论文打上自己的标签——比如“可复用的训练技巧”“跨领域迁移案例”“自监督方向新思路”——那么每天积累下来的标签久而久之就是一份非常宝贵的东西。举个我自己身上的例子有一次需要找“基于对比学习的域适应”方向的工作正常搜索可能要从几百篇论文里一个个找。但我翻出了过去半年每日分享时打的标签记录里面至少有二十几篇是早前顺手标记过相关方向的十几分钟就把跟踪线索找齐了。这就是把“每日阅读”变成“知识资产”的真实收益。所以我会建议每一位做论文分享的人无论是公开分享给自己的读者还是只做给自己的内部记录都加上至少三五个标签字段不要怕麻烦。5.3 让读者帮你一起“减负”的协作筛选模式持续做一段时间之后另一个明显的变化是读者会开始反向给你提供线索。经常有人在我发布每日分享后留言“这篇你昨天没提到但我觉得很值得读”或者“你这个方向和某篇论文的方法很像”。这些都是非常宝贵的补充信息。所以我后来调整了一下模式每周做一次总结的时候专门留出一块区域叫“读者推荐”。把这些外部信息加进去之后明显发现每周的覆盖面和准确度都提升了不少。一个人的精力终究是有限的但如果你能把读者变成你的“外部筛选器”这个项目就从一个单点工作变成了一个协作网络持续性和内容质量都会上一个台阶。6. 从每日筛选到“论文复现工坊”的自然延伸每日分享做久了自然会遇到一个场景某篇论文特别重要看了摘要又看了图表还是觉得不满足想要亲手复现一下。但论文复现的水很深尤其是 CV 方向的论文环境配置、数据下载、训练资源每一环都可能劝退人。分享几个我实际用过且效率比较高的复现思路。第一先跑推理再谈训练。不要一上来就复现完整的训练流程先找一个靠谱的库把作者开源的权重跑通让模型在自己手上出一次结果。这样你对这篇论文的输入输出、数据流会有一个非常直接的理解之后再进训练细节会轻松很多。第二优先复现消融实验里的“损坏版本”。很多论文的消融实验会对比去掉某个模块后的效果这种对比实验的训练成本相对较低却能让你很快理解每个模块对整体效果的贡献。第三不要自己造轮子去加载数据集直接用常用的数据接口比如 torchvision 自带的数据集类能节省大量调试时间。这些复现经验会反过来影响你的每日筛选。当你复现过一些论文之后再看到新的论文会对“这个方法的落地难度”有一个更准确的直觉能够提前判断一篇论文是停留在纸面 idea还是真的可以实现。这种判断力比单纯的多看论文要来得扎实得多。7. 一些我知道你可能还没用到的“进阶玩法”最后这部分送给已经跑通了基础流程、想要把论文追踪做得更深的朋友。这里说的不是那些人人都知道的“用关键字找论文”“看引用量排序”而是一些更细的、我自己试过之后觉得收益明显的细节操作。可以关注 GitHub 上的论文聚合项目。很多社区维护者会把手头“被低估的论文”或者“本周有趣的新论文”整理成仓库每周更新一次。这种聚合内容和每天自动化拉出来的全量列表配合使用效果最好自动化保证不遗漏人工整理的仓库负责帮你看到那些“被大多数人的注意力忽略但确实有意思”的工作。另外可以建立一个“论文与项目关联表”。我自己有一个长期维护的表格每一行是一条论文记录每一列表格是对应的项目字段比如“可以用在检测器 Backbone 替换”“分割头可借鉴”“数据增强思路可迁移”。每天花十几分钟维护长期下来它就是你的“个人版技术雷达”。等到需要解决某个具体问题时拉开这个表格你能立刻想起三到五篇真正能帮你出主意的论文而不是对着成百上千篇文档一筹莫展。还有一件事不要害怕“重复”。每天分享的内容不可避免地会出现方向上的重复——今天讲检测、明天还是检测、后天又出一个检测的新工作。很多人到这个阶段会觉得无聊甚至会怀疑自己是不是在浪费时间。但我自己的经验是真正看进去之后你会发现每一篇新的“重复方向”的论文都在以某种方式推进前人的工作而你能从中观察到的不仅是单个方法的演进更是整个领域的研究趋势迁移。这种“趋势感”是单纯看综述或者看书籍完全无法获得的。它会让你慢慢具备一种“预见力”在看到某篇论文的那一刻就大概知道它之后会带出一串什么样的后续工作。我把这个每日分享的栏目一路做下来最深的感受就是做内容的人本质上是一个“知识路由器”。你不需要自己发明每一篇论文里的方法但你有责任把对的论文在合适的时间推给需要它的人。这套方法从一开始的纯手工到后来用 API、用自动化脚本再到穿插复现、协作筛选整个过程就是不停地用工具去解放自己的注意力让注意力回归到真正需要人类判断的地方。如果你也想开始做自己的每日论文追踪别想太多先跑通一个最简单的版本哪怕只是每天花 15 分钟手动刷一遍列表也比什么都不做强得多。