当前位置: 首页 > article >正文

食品计算—Nutrition5k: Towards Automatic Nutritional Understanding of Generic Food

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中一起航行,共同成长,探索技术的无限可能。

🚀 探索专栏:学步_技术的首页 —— 持续学习,不断进步,让学习成为我们共同的习惯,让总结成为我们前进的动力。

🔍 技术导航:

  • 人工智能:深入探讨人工智能领域核心技术。
  • 自动驾驶:分享自动驾驶领域核心技术和实战经验。
  • 环境配置:分享Linux环境下相关技术领域环境配置所遇到的问题解决经验。
  • 图像生成:分享图像生成领域核心技术和实战经验。
  • 虚拟现实技术:分享虚拟现实技术领域核心技术和实战经验。

🌈 非常期待在这个数字世界里与您相遇,一起学习、探讨、成长。不要忘了订阅本专栏,让我们的技术之旅不再孤单!

💖💖💖 ✨✨ 欢迎关注和订阅,一起开启技术探索之旅! ✨✨

文章目录

  • 1. 背景介绍
  • 2. 相关工作
  • 3. 数据集
    • 3.1 目标
    • 3.2 数据规模与划分
    • 3.3 数据分布
    • 3.4 监督标签
    • 3.5 数据采集流程
    • 3.6 挑战
  • 4. 实验
    • 4.1 指标
    • 4.2 实验设置
    • 4.3 基于二维图像的营养估计
    • 4.4 利用深度图和体积提升分量估计
    • 4.5 分析
    • 4.6 人类性能对比
  • 5. 结论

1. 背景介绍

Thames Q, Karpur A, Norris W, et al. Nutrition5k: Towards automatic nutritional understanding of generic food[C]//Proceedings of the IEEE/CVF conference on computer vision and pattern recognition. 2021: 8903-8911.

🚀以上学术论文翻译由ChatGPT辅助。

从视觉数据中理解食物的营养成分是一个具有挑战性的计算机视觉问题,但它有望对公共健康产生积极而广泛的影响。该领域的研究受限于当前可用的数据集,这些数据集在多样性或营养理解能力训练所需的标注方面存在不足。

我们提出了 Nutrition5k,这是一个包含 5000 个多样化真实世界食物菜品的新数据集,配套有对应的视频流、深度图像、食材重量和高精度的营养成分标注。

我们通过训练一个计算机视觉算法,展示了该数据集的潜力,该算法能够预测复杂真实世界菜品的热量和三大营养素值,其准确率超过了专业营养师的水平。

此外,我们还提供了一个基准方法,展示了如何融合深度传感器数据来提升营养预测的效果。

我们发布 Nutrition5k,是希望它能加速营养理解领域的技术创新。数据集可访问地址为:https://github.com/google-researchdatasets/Nutrition5k。

一个人饮食的营养组成与健康、幸福和寿命息息相关。让人们更容易理解和追踪我们所吃食物的营养构成,能帮助我们做出更好的饮食选择,并有可能让我们活得更久、更健康。

尽管我们吃什么对我们影响巨大,但当前用于理解食物的工具却极为繁琐和有限。

目前,想要记录自己食物摄入营养内容的个人,主要的方式是使用像 MyFitnessPal 这样的追踪应用。这类应用允许用户设定总热量以及特定宏量营养素(碳水化合物、蛋白质和脂肪)的摄入目标,并提供一个界面来记录和汇总每顿饭,以查看是否达成目标。

进行这类追踪时,每一种食材或菜品都必须逐一记录,并标注出精确的摄入量。这些记录随后可通过数据库中保存的平均每份营养值自动转换为营养信息。

许多应用要求用户用称重器逐一称重和记录每种食材,但这往往是一个既繁琐又耗时的过程。如果没有使用称重器,用户也可以尝试通过视觉自行估算食物分量,但这一步骤极易出错 [10, 18]。

尽管数据录入存在困难,MyFitnessPal 在 2018 年初仍拥有超过 1900 万月活跃用户 [20]。如果能够用相机简化食物记录的过程,不仅能为现有用户提供便利,还可能吸引大量潜在用户群体。

随着营养对健康影响的日益凸显,人们在提高营养数据可获取性方面取得了进展。许多连锁餐厅现在在线上和店内都公布了菜单项的营养内容。许多有前景的方法利用这些公开可获取的数据源,展示了使用分类模型辅助食物记录的潜力。

这类方法通过让用户拍照而不是手动输入营养内容,极大地减少了记录一顿饭所需的操作量。然而,它要求菜品属于一组已知菜单项,且默认其分量和营养成分是固定的。

但现实中,我们的餐食往往并不在已知菜品列表上,目前系统在这方面的能力仍非常有限。我们使用“通用食物”(generic food)这个术语来描述那些不属于已知营养列表中的菜品。

理解通用食物的内容,不仅需要识别食材,还需要估算摄入量,这使得这个问题远比单纯分类要困难得多。

在推动这一领域发展过程中,最大挑战之一是数据采集。对于许多计算机视觉任务,研究人员可以轻松利用网上丰富的数据资源来训练模型。

然而在营养理解领域,互联网上的数据稀少且往往不准确。来自许多来源的图像常常是经过摆盘、带有艺术目的拍摄的,旨在提高吸引力而非反映现实。

少数的大规模多样化数据集,如 Recipe1M [12],是从菜谱网站中挖掘出来的。尽管这些数据集包含了菜品级别、食材级别和制作属性等有价值的标注,但几乎都缺乏关于图片中实际食物分量的标注。

缺乏准确的分量标注,使得从图像中学习预测营养含量变得困难且容易出错。一种可能的构建营养数据集的解决方案是:将网上采集的图像交由人工标注员估算分量。然而,我们的研究发现,这项标注任务即使是营养专家也很难做到准确,结果误差极大。

本文提出了一种替代的数据集构建方式:在真实食堂中,在食物被食用前,对每项食材逐一称重、扫描并记录。

在扫描过程中,我们使用了多种重量和图像传感器,并根据菜谱记录了食材的组成,从而可以计算出几乎精确的营养信息。

最终我们构建了 Nutrition5k——一个包含五千种独特、真实世界的通用食物菜品的数据集,配有其视频拍摄、深度图像、组成成分的重量和高精度营养信息。

我们展示了该数据集的实用性:利用它训练的深度卷积神经网络(CNN)可以从单张 RGB 图像预测营养含量,其准确度甚至超过了专业营养师的目测水平。

此外,我们还利用深度传感器数据作为额外信号,显著提升了分量预测与营养回归的准确度。

2. 相关工作

许多早期的工作 [3, 13, 15, 19] 采用的策略是将一道菜分类到一个已知菜单项的集合中,其中每个菜品实例都被假设具有大致相同的营养成分构成。这种方法在一定程度上具有可扩展性(如 [15] 中分类了多达 2,500 种独特菜品),但其局限在于将整张菜品图像作为一个单一的食物项目进行分类。

Bolanos 等人 [3] 扩展了该方法,支持一张图片中存在多个菜品。他们采用了两阶段系统:首先检测出每个单独的菜品区域,然后对这些区域进行分类。

另一类方法利用网络上丰富的菜谱数据,来帮助理解菜品图像 [4, 14, 17, 16]。这些方法利用网页标签训练嵌入模型,以检索相似的菜谱,或利用属性标签进行分类。但这些方法并不尝试估算食物分量,因此只能预测相对的营养信息,无法从图像中计算出绝对营养值。

如 [6, 7] 所提出的方法则是专门处理食物分量估算问题:通过对检测到的食物拟合几何形状,从而预测其体积。这些方法能提供较准确的结果,但仅适用于变异性有限的数据集。

也有一些工作利用密集标注技术的进展,通过分割来实现分量注释。Myers 等人 [15] 将一个分割网络与一个深度预测网络结合,并将体素转换为食物体积估算,但其方法的评估仅限于营养师训练中使用的塑料食物模型。

Ciocca 等人 [5] 发布了一个包含 1,027 张托盘图像和 73 类食物分割掩码的数据集,但没有提供食物分量的标注。

[15] 的作者指出,一旦获得了食物体积,就可以利用营养密度数据集计算出质量、热量和宏量营养素。Ando 等人 [1] 在 [15] 的基础上,使用智能手机内置的深度传感器从俯视图中估算体积,并学习食物密度以预测质量,但由于其食物密度数据有限,仅对三种食物展示了成功实验。

类似地,Gao 等人 [8] 也使用了设备上的传感器来估算食物体积,但并未尝试估算食物的密度或质量。

Liang 等人 [11] 提出一个包含 2,978 张图像、160 个独立食物实例的数据集,并使用 Faster R-CNN 网络预测质量。这些图像多为整颗食物(例如整只苹果或番茄),每个盘子只放一个食物。

许多此类方法还使用比例参照物(fiducial marker)来辅助尺度估算;例如 [11] 使用了一枚人民币硬币,[6] 使用了棋盘格图案的方块。

3. 数据集

3.1 目标

Nutrition5k 的目标是构建一个具有多样性、深入且高精度标注的食物菜品数据集,并具备足够规模以训练大容量神经网络。希望该数据集能激发营养理解这一通用食物领域中自动化研究的新方法,并为后续评估提供基准。以下是我们在收集数据集时的重要动机:

  • 多样性:为了实现方法在真实世界中烹饪多样性的泛化,训练数据集必须涵盖广泛的食材、分量大小和菜肴复杂性。
  • 现实性:通过在真实校园自助餐厅拍摄真实食物照片,数据模拟了实际记录餐食的场景。
  • 具有挑战性:如同现实世界中的菜肴,Nutrition5k 中的图像也存在模糊性和挑战,例如某些食材可能部分或完全被其他食材遮挡。
  • 高精度:为了超越人类在视觉营养估计方面的能力,必须采集比纯视觉估计更准确的数据(例如深度图像和成分称重)。

非目标:本数据集的目标是专注于更具挑战性的通用食物场景,而不是取代那些可以将菜品分类为一组已知菜单项、且有固定分量和营养成分的方法(如 [3, 13, 15, 19] 中所示)。当可以使用检索和分类式方法时,其结果的准确性本质上高于用于通用食物的估计方法,因此我们认为这些挑战是彼此独立的。

3.2 数据规模与划分

Nutrition5k 包含了由超过 250 种不同原料构成的大约 5,000 个独特菜品,生成了 20,000 段短视频。每道菜都包含完整的食材标签、对应的数量及通过 USDA 食物与营养数据库计算的宏量营养成分信息。

此外,这些菜品中有 3,500 个包含了由 Intel RealSense 相机采集的俯视 RGB-D 图像。据我们所知,Nutrition5k 是目前为止最大的带有食物分量注释的营养数据集。

我们将数据划分为训练集和测试集:10% 的菜品进入测试集,其余为训练集,分别命名为 Nutri-TrainNutri-Test

3.3 数据分布

Nutrition5k 中的菜品在分量大小和菜肴复杂性上差异极大,热量从几卡到超过 1000 卡不等,成分数量从 1 种到 35 种不等,平均每盘菜为 5.7 种成分。

表 2 展示了菜品的营养成分分布。图 4 显示了 Nutrition5k 中按质量排序的 30 种最常见食材。按质量排序而不是频率排序能更直观地展示常用食材,因为频率最高的通常是如盐、胡椒、橄榄油和醋等基础调味品。

3.4 监督标签

Nutrition5k 数据集可表示为 D = { I i , Y i } i = 1 N D = \{I_i, Y_i\}_{i=1}^N D={Ii,Yi}i=1N,其中 I i I_i Ii 是图像, Y i Y_i Yi 是监督标签, N N N 是样本总数。

每个监督标签 Y i = ( y i w , Y i m , y i c a l ) Y_i = (y_i^w, Y_i^m, y_i^{cal}) Yi=(yiw,Yim,yical) 包含三种信息:

  • y i w y_i^w yiw:整道菜的总质量(单位克)
  • Y i m Y_i^m Yim:每种宏量营养素的质量向量,即 M = { 碳水 , 脂肪 , 蛋白质 } M = \{\text{碳水}, \text{脂肪}, \text{蛋白质}\} M={碳水,脂肪,蛋白质},对于 j ∈ M j \in M jM,有 y i j m = F macro ( K l , j ) y_{ij}^m = F_{\text{macro}}(K_l, j) yijm=Fmacro(Kl,j),其中 F macro F_{\text{macro}} Fmacro 是计算宏量营养素质量的函数
  • y i c a l = F calorie ( K l ) y_i^{cal} = F_{\text{calorie}}(K_l) yical=Fcalorie(Kl):根据各成分质量 K l K_l Kl 计算出的总热量

3.5 数据采集流程

为采集数据,我们使用自定义传感器阵列对 Nutrition5k 中的每道菜进行称重和扫描(见图 5)。通过机器人自动化操作,同时触发所有传感器,以减少每次扫描所需的时间。

在采集营养精确的复杂菜肴时,我们采用逐步添加法:自助餐中的菜品被一个个放到盘子或碗中,并在每添加一个后进行扫描。每个条目可以是一个原始食材,也可以是带有已知食谱的预制食物,因此可以知道每克所含成分的比例。

每克营养信息通过 USDA 食物与营养数据库计算,乘以每次添加的重量增量,以获得该菜品的真实营养注释。

随着成分的添加,一道菜从简单单品逐步变为复杂的混合菜肴。而即使是单品,也可能是复杂食谱的产物。

我们确保数据划分尊重增量扫描的流程,即属于同一增量扫描的所有图像都只出现在训练集或测试集之一中,从而避免测试集和训练集中出现同一盘菜的图像重叠。

每次扫描记录的数据包括:添加成分的菜谱或名称、4 个方向的 RGB 视频、1 张俯视 RGB-D 图像、增量重量值。5 个摄像头中,1 个从正上方俯视,其余 4 个从不同侧角拍摄(分别为水平下 30° 和 60° 的对角度)。

每个摄像头以 1920×1080 分辨率拍摄约 8 秒,深度图为这段时间的平均值,用于去噪。深度图使用 Intel RealSense D435 拍摄,单位为 1 e − 4 1e^{-4} 1e4。盘下的数字秤以 ±1 克精度记录增量重量。

3.6 挑战

尽管该数据集努力通过精确的质量与体积测量实现对营养成分的高保真理解,但仍可能存在一些误差来源。例如,从已知配方中挑出并移除某些成分可能导致营养注释偏差,因此我们尽量避免此类行为。

由于需要特殊硬件采集深入注释,该数据集目前仅在一个现实世界的自助餐厅中采集。尽管该餐厅每日更新菜单并涵盖多元文化菜肴,但地理上的局限性使得数据偏向于西式菜品。未来工作中我们计划增加更多地理和文化多样性的采样。

此外,使用机器人自动化进行高效采集也可能引入偏差,例如固定的拍摄距离与背景中的支架,可能会被模型用于估计分量。尽管如此,我们的实验表明,提供显式的深度信息对提高分量估算性能仍有显著帮助。

4. 实验

本节详细介绍了我们基于 Nutrition5k 数据集开发计算机视觉模型的实验过程。我们从数据集中采样 RGB 帧和深度图像,训练模型预测菜品的营养内容。我们提出用于评估模型性能的指标,并分析不同预测方法、模型架构及其对营养理解的影响。随后,我们将模型的分量估计性能与专家(营养师)和非专业标注者在部分数据上的估算进行对比。

4.1 指标

鉴于 Nutrition5k 提供了独特的分量注释和深度数据,我们设计了三项新的实验:

  • 训练一个与分量无关的回归模型,从单张 RGB 图像预测单位克的热量和宏量营养素。
  • 从单张 RGB 图像直接预测包含分量的菜品营养成分。
  • 在直接预测基础上引入深度图像作为输入,提升二维基线性能。

我们使用 平均绝对误差(MAE) 来衡量热量、总质量和各类宏量营养素的回归准确率,定义如下:

MAE = 1 N ∑ i = 1 N ∣ y ^ i − y i ∣ \text{MAE} = \frac{1}{N} \sum_{i=1}^{N} |\hat{y}_i - y_i| MAE=N1i=1Ny^iyi

其中 y ^ i \hat{y}_i y^i 是对测试图像 I i I_i Ii 的预测值,热量单位为千卡(kcal),营养素和质量以克为单位。我们同时报告 MAE 的实际值和相对地面真值的百分比。

4.2 实验设置

基础架构:模型使用 InceptionV2 [22] 作为编码器主干网络,输入图像为 256×256,图像先缩放并居中裁剪以保留菜品最显著区域。优化算法采用 RMSProp,初始学习率为 1 e − 4 1e^{-4} 1e4,动量为 0.9,衰减为 0.9, ϵ = 1.0 \epsilon = 1.0 ϵ=1.0。所有模型都以 JFT-300M [21] 进行预训练。

多任务学习:每个回归任务(热量、营养素、质量)都有独立的多任务输出头。使用 InceptionV2 的 mixed5c 输出后,进行一次 [ 3 , 3 ] [3, 3] [3,3] 平均池化(步长 2,valid padding),然后通过两个 4096 维的全连接层。三个回归任务共享此特征后接两个独立的全连接层(4096 → 1)并分别使用 MAE 作为损失函数。损失函数如下:

l multi ( D ∣ W ) = 1 N ∑ i = 1 N [ l m ( I i , Y i m ∣ W ) + l c ( I i , y i c a l ∣ W ) + l w ( I i , y i w ∣ W ) ] l m ( I , Y m ∣ W ) = 1 ∣ M ∣ ∑ j ∈ M ∣ y ^ j m − y j m ∣ l c ( I , y c a l ∣ W ) = ∣ y ^ c a l − y c a l ∣ l w ( I , y w ∣ W ) = ∣ y ^ w − y w ∣ \begin{aligned} l_{\text{multi}}(D|W) &= \frac{1}{N} \sum_{i=1}^{N} [l_m(I_i, Y_i^m | W) + l_c(I_i, y_i^{cal} | W) + l_w(I_i, y_i^w | W)] \\ l_m(I, Y^m|W) &= \frac{1}{|M|} \sum_{j \in M} |\hat{y}_j^m - y_j^m| \\ l_c(I, y^{cal}|W) &= |\hat{y}^{cal} - y^{cal}| \\ l_w(I, y^w|W) &= |\hat{y}^w - y^w| \end{aligned} lmulti(DW)lm(I,YmW)lc(I,ycalW)lw(I,ywW)=N1i=1N[lm(Ii,YimW)+lc(Ii,yicalW)+lw(Ii,yiwW)]=M1jMy^jmyjm=y^calycal=y^wyw

实验数据:Nutri-Train 和 Nutri-Test 的划分在所有实验中保持不变。2D 模型从旋转视频中每隔 5 帧采样,深度模型仅使用具备 RealSense RGB-D 图像的样本。

4.3 基于二维图像的营养估计

分量无关模型:使用多任务框架预测单位质量的热量和营养素含量,将标签归一化为每克热量、碳水、脂肪和蛋白质。为了与其他模型对比,最终乘以地面真值的质量,恢复为总热量和总营养素单位。

该模型预测每克热量的 MAE 为 9.5%,营养素的平均 MAE 为 14.7%。

直接预测模型:更实用的目标是直接预测菜品的总热量和营养成分。采用相同架构和方法,预测热量、营养素和质量。该模型热量 MAE 为 26.1%,营养素 MAE 为 31.9%。

4.4 利用深度图和体积提升分量估计

RGB-D 输入:将深度图像作为第 4 个通道拼接到 RGB 图像输入中,送入模型训练。该方法将热量 MAE 降至 18.8%,营养素 MAE 降至 20.9%。

RGB + 体积估计输入:将营养理解问题拆分为两步:单位质量营养预测 + 质量预测。质量预测模型利用深度图计算食物体积作为先验。

体积计算方法参考 [1],给定相机与平面的距离为 35.9 cm,每像素面积为 5.957 × 1 0 − 3 c m 2 5.957 \times 10^{-3} cm^2 5.957×103cm2,总体积为所有前景像素面积乘以深度。所有菜品都基于俯视 RealSense RGB-D 图像进行估算。

接着训练 InceptionV3 网络(两个 FC 层为 64 和 1)预测质量,输入为 RGB 图像和估计体积。将估计体积拼接到主干输出后进入 FC 层。表 4 显示,体积作为先验可显著提升质量预测性能。

将预测的质量值与单位质量的营养预测结果组合后,我们获得一个端到端营养估计模型,热量 MAE 为 16.5%,营养素 MAE 为 26.2%。

4.5 分析

表 3 显示了“单位质量预测”与“直接预测”之间的性能差异,直接预测热量的 MAE 高达 26.1%,几乎是每克预测的三倍(9.5%)。说明分量估计极大增加了问题复杂性。

虽然单位质量模型精度高,但仍需用户称重才能准确记录,效果与 MyFitnessPal 等应用类似。我们通过深度图与体积数据的实验,展示了 Nutrition5k 的独特价值。体积估算将质量预测 MAE 从 18.7% 降低到 13.7%,结合单位质量模型可实现热量 MAE 16.5%。据我们所知,这是目前图像+深度在通用食物营养估计中最准确的结果。

我们推测此前难以取得此类成果,是因为缺乏一个多样、准确标注的数据集,而 Nutrition5k 弥补了这一空白。

4.6 人类性能对比

在许多计算机视觉数据集中,图像先收集,再由人类标注。但对营养数据集来说,这一流程并不适用。我们设计了人类视觉估分实验,验证 Nutrition5k 中“称重+扫描”的必要性。

我们从 Nutri-Test 中采样 10 张图像,包括 6 张单成分菜品(如鸡肉、黄瓜、凤梨)和 4 张三成分菜品(如燕麦/柠檬/莓果)。为降低估分难度,这些菜品比 Nutrition5k 平均复杂度低。

图像分别展示给两个组别:16 名非营养师、4 名营养师。受试者被要求估计每种成分的质量,并转化为营养含量。我们提供参考物体(如硬币重 5.6g,手机重 113g)辅助估算。

我们计算每人估计的菜品总质量误差,并对比模型预测结果。图 7 显示,非营养师的平均误差为 53%,营养师为 41%,这与文献 [10, 18] 所示人类估分误差一致。结果证明视觉估分难以作为营养标注手段。

5. 结论

本文提出了 Nutrition5k,这是首个在规模、多样性和标注深度上兼具的营养理解数据集。我们在人类估分实验中揭示了传统图像标注方法的局限,验证了“扫描+称重”的采集策略,并训练神经网络在通用食物场景下超过了专业营养师的热量与营养素预测性能。

此外,我们引入多个基线方法,利用深度图信息显著提升了从二维图像预测营养的能力。我们希望 Nutrition5k 的发布能推动营养自动理解领域的创新,并为未来技术提供评估基准。

🌟 在这篇博文的旅程中,感谢您的陪伴与阅读。如果内容对您有所启发或帮助,请不要吝啬您的点赞 👍🏻,这是对我最大的鼓励和支持。

📚 本人虽致力于提供准确且深入的技术分享,但学识有限,难免会有疏漏之处。如有不足或错误,恳请各位业界同仁在评论区留下宝贵意见,您的批评指正是我不断进步的动力!😄😄😄

💖💖💖 如果您发现这篇博文对您的研究或工作有所裨益,请不吝点赞、收藏,或分享给更多需要的朋友,让知识的力量传播得更远。

🔥🔥🔥 “Stay Hungry, Stay Foolish” —— 求知的道路永无止境,让我们保持渴望与初心,面对挑战,勇往直前。无论前路多么漫长,只要我们坚持不懈,终将抵达目的地。🌙🌙🌙

👋🏻 在此,我也邀请您加入我的技术交流社区,共同探讨、学习和成长。让我们携手并进,共创辉煌!
在这里插入图片描述


http://www.kler.cn/a/613113.html

相关文章:

  • 【Uni-App】嵌入悬浮球全局组件的详细教程和防踩坑点
  • Centos7 安装 TDengine
  • php调用deepseek接口api并流式输出
  • 阿里OSS使用指南!
  • python算法:leetcode二叉树相关算法题
  • bluecode-螺旋阵列的神秘艺术
  • 【Python】工作笔记:返回当月第一天、昨天;上月第一天、当天;全年节假日
  • 如何在 Postman 中正确设置 Session 以维持用户状态?
  • 详解Http:在QT中使用Http协议
  • Android 屏蔽某应用的ANR弹窗
  • 淘宝flexible.js+rem适配移动端
  • Pydantic字段元数据指南:从基础到企业级文档增强
  • Github 热点项目 awesome-mcp-servers MCP 服务器合集,3分钟实现AI模型自由操控万物!
  • SEO(搜索引擎优化)详解
  • Flask(六)数据库与模型操作
  • Linux内核2-TFTP与NFS环境搭建
  • VSCode:Linux下安装使用
  • NX二次开发刻字功能——预览功能
  • 微信小程序——解构赋值与普通赋值
  • 【PostgreSQL内核学习 —— (sort算子)】