基于深度学习的卷积神经网络十二生肖图像识别系统(PyQt5界面+数据集+训练代码)

本研究提出了一种基于深度学习的十二生肖图像识别系统,旨在利用卷积神经网络(CNN)进行图像分类,特别是十二生肖图像的自动识别。系统的核心采用了两种经典的深度学习模型:ResNet50和VGG16,进行图像的特征提取和分类。为了提高系统的用户体验,本研究还设计了一个图形用户界面(GUI),使得用户能够通过简单的操作进行图像上传、模型选择、分类检测及结果展示。

系统的实现主要基于PyTorch深度学习框架,并使用了ResNet50和VGG16这两种预训练的模型。首先,对于输入图像进行预处理,包括尺寸调整和归一化,使其符合网络的输入要求。接着,利用这两种模型进行特征提取和图像分类,并将预测结果展示在界面上。系统还提供了一个下拉框,允许用户选择不同的模型(ResNet50或VGG16),并基于选择的模型加载相应的权重文件进行预测。

在模型性能的比较方面,实验表明,ResNet50在准确率和推理速度上优于VGG16。通过对多个图像数据集的测试,ResNet50展示出了更强的鲁棒性,尤其在复杂图像背景下,能够保持较高的分类精度。而VGG16在某些特定场景下,虽然分类精度稍逊一筹,但仍具有较好的表现,且模型结构较为简单,适合在计算资源有限的环境下使用。

此外,系统还实现了用户友好的交互功能,支持实时的图像上传和分类结果展示。用户只需选择图像文件,系统即可自动进行分类并显示相应的结果和分类置信度,极大地方便了非技术用户的使用。为了确保系统的高效性和可扩展性,模型的推理部分进行了优化,以适应不同设备和平台上的实时应用需求。

通过对比ResNet50和VGG16的性能,本研究还探讨了在实际应用中如何根据需求选择适合的模型。在实时分类和处理要求较高的场景中,ResNet50凭借其更深的网络结构和更快的推理速度,显然是一个更合适的选择。与此同时,VGG16作为一个经典模型,仍在许多低延迟应用中发挥着重要作用。

本研究的系统不仅为十二生肖图像识别提供了一个可操作的解决方案,还为未来多类别图像分类任务提供了借鉴。通过优化深度学习模型的推理过程和结合图形用户界面的设计,能够为相关领域的图像识别系统开发提供有价值的参考。此外,未来的工作还可以在系统中集成更多的模型和功能,进一步提高分类精度,拓展系统的应用范围,满足更广泛的商业和科研需求。

算法流程

项目数据

传统的机器学习算法对图像进行识别等研究工作时,只需要很少的图像数据就可以开展工作。而在使用卷积神经网络解决研究的十二生肖识别问题的关键其一在于搭建合适的神经网络,其二更需要具备大量优质的训练数据集,在大量的有标签数据不断反复对模型进行训练下,神经网络才具备我们所需要的分类能力,达到理想的分类效果。因此有一个质量较好的图像数据集至关重要。

数据集介绍:
本研究使用的十二生肖数据集包含8508张图像,涉及中国传统文化中的十二生肖类别:鼠、牛、虎、兔、龙、蛇、马、羊、猴、鸡、狗、猪。每个类别的图像代表了不同的生肖形象,可能是艺术作品、卡通图像或动物照片。该数据集为图像分类任务提供了丰富的多样性,既包括不同风格的生肖图像,又覆盖了不同的拍摄角度和光照条件。

数据集已被预先标注,每个类别的图像数量基本均衡,为训练和验证提供了稳定的基准。数据集被划分为训练集和测试集,其中每类生肖图像的数量分别如下:
(1)训练集:每类600张图像,共7200张图像。

(2)测试集:每类55张图像,共660张图像。

这种划分方式保证了数据的多样性和代表性,同时通过验证集和测试集的独立性,能够有效评估模型的泛化能力。

数据预处理
为了提高模型的泛化能力并防止过拟合,我们对数据集进行了数据预处理。具体步骤如下:
(1)尺寸标准化:所有图像被调整为统一的224×224像素,以适配VGG16和ResNet50等模型的输入要求。
(2)归一化:对图像进行归一化处理,标准化RGB通道的像素值,使其均值为[0.485, 0.456, 0.406],标准差为[0.229, 0.224, 0.225]。这些参数是基于ImageNet数据集计算得出的,适用于VGG16和ResNet50的预训练模型。

数据增强
1.训练集增强:
(1)随机裁剪:随机裁剪图像并调整为224×224的尺寸,增加数据的多样性,帮助模型更好地学习到不同的尺度和视角。
(2)随机水平翻转:随机对训练图像进行水平翻转,进一步增加数据集的变异性,提高模型的鲁棒性。

2.验证集增强:
(1)Resize和CenterCrop:将验证图像的长边调整为256像素,然后从中心裁剪224×224区域,确保数据统一性。

通过数据增强和标准化处理,能有效提高模型对各种变换的适应能力,从而提升其在不同场景下的分类效果。

数据集划分
数据集已预先划分为两个部分:训练集和测试集,具体如下:
(1)训练集:每类600张图像,共7200张图像,用于模型训练,通过最小化损失函数优化参数。
(2)测试集:每类55张图像,共660张图像,用于评估模型在未见数据上的表现

这种数据集划分方式有助于保证模型训练和评估的可靠性,确保各数据集独立,避免数据泄露和过拟合。

实验硬件
本实验的硬件环境设置如下:
(1)计算平台:NNVIDIA GeForce RTX 3070 Ti。(8GB显存),支持CUDA加速
(2)CPU:12th Gen Intel(R) Core(TM) i9-12900H 2.50 GHz 14核处理器
(3)内存:32GB RAM
(4)存储:1TB SSD,用于存储数据集和模型权重

该硬件环境提供了足够的计算资源,能够支持大规模图像数据的训练和高效计算,尤其在使用GPU进行加速时,训练时间得到了显著缩短。

实验超参数设置
本实验中的主要超参数设置如下:
(1)学习率:0.0001,使用Adam优化器,能够自适应调整学习率,表现较好。
(2)批次大小:训练时为32,验证时为64,较小的批次大小有助于稳定训练并提高计算效率。
(3)优化器:使用Adam优化器,适用于稀疏数据和非凸问题。
(4)损失函数:采用交叉熵损失函数(CrossEntropyLoss),适用于多分类任务。
(5)训练轮数:设定为15轮,帮助模型逐渐收敛。
(6)权重初始化:使用预训练的VGG16和ResNet50权重进行迁移学习,加速收敛并提高分类性能。

这些超参数设置经过反复调试,以确保模型在验证集上表现良好。

实验过程与结果分析

分析VGG16和ResNet50两种模型在十二生肖图像分类任务中的实验结果。包括训练过程中的损失与准确率变化、模型性能对比、混淆矩阵(热力图)分析、过拟合与欠拟合的讨论,以及计算效率的分析。

训练过程中的损失与准确率变化
为了评估模型在训练过程中的表现,我们记录了每个epoch的训练损失、训练准确率以及验证损失、验证准确率。通过这些指标,我们可以观察到模型是否能够有效收敛,以及是否存在过拟合或欠拟合的情况。

1.1 VGG16模型训练过程
VGG16模型在训练过程中的损失和准确率曲线如下所示:
 


(1)训练损失:VGG16的训练损失随着epoch的增加逐渐降低。在前几个epoch中,训练损失下降较快,表明模型能够迅速适应训练数据。随着训练的进行,损失的下降幅度逐渐减小,表明模型逐渐接近其在训练数据上的最优表现。
(2)训练准确率:训练准确率从0.845开始逐渐上升,接近1的准确率表明模型在训练集上逐步取得了较好的分类效果。在最终的训练过程中,VGG16模型达到了较高的训练准确率,约为0.92。
(3)验证损失与验证准确率:验证集的损失和准确率表现出一定的波动,但总体呈现稳定向好的趋势。验证准确率略低于训练准确率,约为0.89,说明模型在训练集上的表现较好,但在验证集上仍有一定的提升空间。

1.2 ResNet50模型训练过程
ResNet50模型在训练过程中的损失和准确率曲线如下所示:
 


(1)训练损失:ResNet50的训练损失在前期下降迅速,随后趋于平稳,表明该模型在训练数据上逐渐达到最优。与VGG16相比,ResNet50的损失下降速度较快,且在整个训练过程中较为稳定,最终的训练损失较低,接近0.24。
(2)训练准确率:ResNet50的训练准确率从0.92开始逐渐上升,最终达到了0.94左右,说明模型在训练集上取得了较高的分类效果,且稳定性较好。
(3)验证损失与验证准确率:与训练准确率和损失一致,ResNet50在验证集上的准确率也保持较高,最终验证准确率接近0.91,验证损失相对较低,表现出模型具有较强的泛化能力。

从损失和准确率的曲线来看,ResNet50在训练过程中的收敛速度和稳定性都优于VGG16,表明其更适合处理复杂的分类任务。

模型性能对比
1.VGG16与ResNet50的准确率比较
在训练和验证过程中,ResNet50模型表现出了更高的准确率,尤其是在验证集上的表现更为突出。VGG16的最终训练准确率为0.92,验证准确率为0.89,而ResNet50的训练准确率为0.94,验证准确率为0.91。
(1)训练准确率:ResNet50模型的训练准确率始终高于VGG16模型,且在后期没有出现明显的过拟合现象。
(2)验证准确率:ResNet50的验证准确率也明显高于VGG16,表明ResNet50在未见过的数据上表现出更强的泛化能力。

2.损失函数与准确率曲线分析
(1)从损失函数和准确率的曲线图中可以观察到,ResNet50的损失下降速度较快,且整体上低于VGG16,验证准确率也优于VGG16。VGG16在训练过程中虽然表现不错,但其验证准确率波动较大,且未能如ResNet50一样稳定提升。
(2)在训练集上,VGG16和ResNet50的准确率差距并不大,但在验证集上,ResNet50的表现明显优于VGG16。这表明ResNet50能够更好地从训练数据中提取特征,并具备更强的泛化能力。

混淆矩阵分析(热力图)
为了更全面地分析模型的分类性能,我们生成了混淆矩阵并将其可视化为热力图,帮助我们直观地了解模型在哪些类别上表现较好,在哪些类别上存在误分类。

1.VGG16的热力图:VGG16模型在一些类别之间(如“牛”和“马”)存在较高的混淆,尤其是这两类生肖在视觉特征上较为相似,导致模型在这些类别的分类上出现错误。

2.ResNet50的热力图:相比之下,ResNet50的混淆矩阵显示出较少的误分类,尤其是在复杂类别的区分上,表现出更好的分类能力。ResNet50通过残差连接和更深的网络结构,能够有效提取更多的特征,从而减少了类别之间的混淆。

通过混淆矩阵的分析,ResNet50展示了在类别区分上的优势,尤其是在处理视觉特征相似的类别时。

过拟合与欠拟合分析
(1)过拟合:在VGG16的训练过程中,训练准确率远高于验证准确率,尤其在训练后期,模型开始出现过拟合的迹象。虽然训练准确率接近1,但验证准确率始终低于0.9,表明模型对训练数据的拟合过度,而在验证数据上表现不佳。
(2)欠拟合:ResNet50在训练过程中没有表现出明显的欠拟合情况。尽管验证准确率略低于训练准确率,但两者的差距较小,且验证集准确率稳定提升,表明ResNet50具有较强的泛化能力。

ResNet50能够有效避免过拟合问题,并在多次训练中保持较高的验证准确率,而VGG16则需要进一步优化,可能通过增加正则化(如Dropout)来缓解过拟合问题。

计算效率分析
(1)ResNet50 在计算效率上表现更优,尤其是在训练速度和每个epoch的训练时间上,适合处理大规模数据集和更快速的训练需求。
(2)VGG16 虽然在准确率和模型表现上有其优势,但其训练速度相对较慢,计算资源消耗较大,可能需要更长时间来完成相同规模的训练任务。

如果计算效率是项目的关键考虑因素,ResNet50 更适合用于大规模训练任务,尤其是在时间有限的情况下。

运行效果

– 运行 MainProgram.py
1.ResNet50模型运行:
(1)主界面

(2)生肖牛

(3)生肖鸡

(4)生肖龙

(5)生肖羊

(6)生肖马

(7)生肖猴

(8)生肖鼠

(9)生肖猪

(10)生肖兔

(11)生肖蛇

(12)生肖虎

(13)生肖狗

2.VGG16模型运行:
(1)主界面

(2)生肖牛

(3)生肖鸡

(4)生肖狗

(5)生肖龙

(6)生肖羊

(7)生肖马

(8)生肖猴

(9)生肖鼠

(10)生肖猪

(11)生肖兔

(12)生肖蛇

(13)生肖虎

– 运行 train_resnet50.py
这段代码的主要目的是在直接运行该脚本时,加载指定路径下的训练集和测试集,初始化一个 MainProcess 实例并训练模型(ResNet50),设置训练的轮数为 15 轮。

数据集路径设置:
(1)train_dir = r”D:\ZodiacDataset\train”:设置训练集数据的路径。
(2)test_dir = r”D:\ZodiacDataset\test”:设置测试集数据的路径。

模型路径设置:
(1)model_name0 = r”models/resnet50.pth”:指定训练模型的文件路径,这里是 resnet50.pth 模型的路径,用于加载预训练的 ResNet50 权重或保存训练后的模型。

实例化MainProcess类:
(1)cnn = MainProcess(train_dir, test_dir, model_name0):通过传入训练集路径、测试集路径和模型路径,创建 MainProcess 类的实例 cnn,这个类负责数据加载、模型训练、验证等操作。

调用主函数main进行训练:
(1)cnn.main(epochs=15):调用 cnn 对象的 main 方法,开始训练模型。epochs=15 表示模型训练将进行 15 轮(每轮遍历整个训练集一次)。该方法将包括模型的训练过程、损失计算、验证等步骤

训练日志结果
ResNet50日志结果

这张图展示了使用ResNet50进行模型训练的详细过程和结果。

配置信息:
(1)模型在训练了15轮后,总共耗时18分钟。
(2)本次训练使用了GPU设备,具体是CUDA设备0。

训练过程:
训练过程记录了15个 epoch,每个 epoch 的训练损失和验证准确率都有输出:
(1)训练损失(train_loss)在每个epoch结束时有所下降(从0.948下降到0.244)。
(2)验证准确率(val_accuracy)从0.921提升到0.926,说明模型的性能在不断提高。

训练速度:
训练的速度在3.93it/s到4.38it/s之间,表示每秒钟处理大约4个批次。
(1)每个epoch的训练时间约为51秒到57秒。
(2)每个验证批次的处理时间大约是17秒到23秒。

完成信息:
(1)Process finished with exit code 0:表示整个验证过程顺利完成,没有报错。

总结:
从日志中可以看出,RESNET50模型在本次图像分类任务中展现了良好的性能,验证准确率和训练损失均显示出积极的优化趋势。通过进一步优化数据预处理、超参数调整和模型正则化,未来有潜力进一步提升分类效果。

– 运行 train_vgg16.py
这段代码的主要目的是在直接运行该脚本时,加载指定路径下的训练集和测试集,初始化一个 MainProcess 实例并训练模型(VGG16),设置训练的轮数为 15 轮。

数据集路径设置:
(1)train_dir = r”D:\ZodiacDataset\train”:设置训练集数据的路径。
(2)test_dir = r”D:\ZodiacDataset\test”:设置测试集数据的路径。

模型路径设置:
(1)model_name0 = r”models/vgg16.pth”:指定训练模型的文件路径,这里是 vgg16.pth 模型的路径,用于加载预训练的 VGG16 权重或保存训练后的模型。

实例化 MainProcess 类:
(1)cnn = MainProcess(train_dir, test_dir, model_name0):通过传入训练集路径、测试集路径和模型路径,创建 MainProcess 类的实例 cnn,这个类负责数据加载、模型训练、验证等操作。

调用主函数main进行训练:
(1)cnn.main(epochs=15):调用 cnn 对象的 main 方法,开始训练模型。epochs=15 表示模型训练将进行 15 轮(每轮遍历整个训练集一次)。该方法将包括模型的训练过程、损失计算、验证等步骤

训练日志结果
VGG16日志结果

这张图展示了使用VGG16进行模型训练的详细过程和结果。

配置信息:
(1)模型在训练了15轮后,总共耗时27分钟。
(2)本次训练使用了GPU设备,具体是CUDA设备0。

训练过程:
训练过程记录了15个epoch,每个epoch的训练损失和验证准确率都有输出:
(1)训练损失(train_loss)在每个epoch结束时有所下降(从0.948下降到0.328)。
(2)验证准确率(val_accuracy)从0.845提升到0.894,说明模型的性能在不断提高。

训练速度:
训练的速度在2.5it/s到2.73it/s之间,表示每秒钟处理大约2.5到2.7个批次。
(1)每个epoch的训练时间约为1分20秒到1分30秒。
(2)每个验证批次的处理时间大约是19秒到23秒。

完成信息:
(1)Process finished with exit code 0:表示整个验证过程顺利完成,没有报错。

总结:
从训练日志来看,VGG16模型在十二生肖图像分类任务中取得了良好的训练效果,验证准确率为0.894,显示出该模型在实际应用中的潜力。未来可以通过调整数据处理和训练策略,进一步优化模型,提升其对不同类别的识别能力,并减少过拟合的风险。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索温度计的数字化设计:一个可视化温度数据的Web图表案例

随着科技的发展,数据可视化在各个领域中的应用越来越广泛。在温度监控和展示方面,传统的温度计已逐渐被数字化温度计所取代。本文将介绍一个使用Echarts库创建的温度计Web图表,该图表通过动态数据可视化展示了温度值,并通过渐变色…

Attention显存统计与分析

Attention显存估计 简单的Attention函数 import torch import torch.nn as nn import einops class Attention(nn.Module):def __init__(self, dim, num_heads8, qkv_biasFalse, qk_scaleNone, attn_drop0., proj_drop0.):super().__init__()self.num_heads num_headshead_d…

[MacOS] [kubernetes] MacOS玩转虚拟化最佳实践

❓ 为什么不在MacOS本机安装呢?因为M系列芯片是Arm架构,与生产环境或者在本地调试时候,安装虚拟镜像和X86不同,造成不必要的切换环境的额外成本,所以在虚拟化的x86调试 步骤 & 详情 一: 安装OrbStack & 并配置…

Unity世界坐标转屏幕坐标报错解决办法。

问题描述,如果你在脚本中尝试使用Camera.转换世界坐标的时候发现点不出来,可以点到你的Camera这个方法看能否跳转,如果能够跳转,并且这个脚本是你自己写的,那么恭喜你,下面就是解决办法,直接将C…

系统监控——分布式链路追踪系统

摘要 本文深入探讨了分布式链路追踪系统的必要性与实施细节。随着软件架构的复杂化,传统的日志分析方法已不足以应对问题定位的需求。文章首先解释了链路追踪的基本概念,如Trace和Span,并讨论了其基本原理。接着,文章介绍了SkyWa…

IAR中编译下载未下载问题

第一张图片是正常下载,第二张未正常下载。经过查看download选项发现 启用了 suppress download (禁用下载)

【UE5 C++】判断两点连线是否穿过球体

目录 前言 原理 代码 测试 结果 前言 通过数学原理判断空间中任意两点的连线是否穿过球体,再通过射线检测检验算法的正确性。 原理 (1)设球体球心的坐标为 ,半径为r; (2)设线段中A点的坐…

网络安全之IP伪造

眼下非常多站点的涉及存在一些安全漏洞,黑客easy使用ip伪造、session劫持、xss攻击、session注入等手段危害站点安全。在纪录片《互联网之子》(建议搞IT的都要看下)中。亚伦斯沃茨(真实人物,神一般的存在)涉…

《运放秘籍》第二部:仪表放大器专项知识点总结

一、差分放大器与仪表放大器的讨论 1.1. 仪放的前世今生——差分放大器原理? 1.2. 差分放大的原理 1.3. 差分放大器检测电流 1.4. 差分放大器端一:输入阻抗 1.5. 差分放大器端二:共模抑制比 1.6. 为什么关注输入阻抗?共模抑…

AJAX一、axios使用,url组成(协议,域名,资源路径)查询参数和化简,错误处理,请求/响应报文,状态码,接口文档,

一、AJAX是什么 概念 &#xff1a; AJAX是一种与服务器&#xff08;后端&#xff09;通信的技术 二、请求库axios的基本用法 1导包 2使用 // 1. 发请求 axios({ url: 请求地址 }).then(res > { // 2.接收并使用数据 }) <body><p class"province"…

关于ConstarintLayout有关的点

目录 一、概述 二、过程。 1、介绍 主要特点 关键概念 使用示例 总结 2、我遇到的问题 问题&#xff1a; 可能的原因&#xff1a; 结论 一、概述 在学习过程中&#xff0c;发现对ConstarintLayout理解不够到位&#xff0c;下面是发现并解决问题过程。 二、过程。 1…

【UE5 C++课程系列笔记】06——定时器的基本使用

目标 使用定时器每秒调用函数打印一句日志信息&#xff0c;并在调用一定次数后停止定时器。 步骤 1. 新建一个Actor类&#xff0c;这里命名为 2. 先在“TimerActor.cpp”中获取定时器管理器 使用定时器管理器来设置定时器&#xff0c;该定时器在2s后启动&#xff0c;然后每…

用c语言完成俄罗斯方块小游戏

用c语言完成俄罗斯方块小游戏 这估计是你在编程学习过程中的第一个小游戏开发&#xff0c;怎么说呢&#xff0c;在这里只针对刚学程序设计的学生&#xff0c;就是说刚接触C语言没多久&#xff0c;有一点功底的学生看看&#xff0c;简陋的代码&#xff0c;简陋的实现&#xff0…

iQOO Neo10系列携三大蓝科技亮相,性能与续航全面升级

11月29日&#xff0c;iQOO Neo10系列正式登场。作为iQOO Neo系列的最新力作&#xff0c;Neo10系列不仅延续了该系列一贯的“双芯”特色&#xff0c;更在性能、续航、屏幕、影像等多个方面实现了全面升级&#xff0c;为用户带来前所未有的使用体验。此次发布的Neo10系列共有两款…

springboot信息化在线教学平台的设计与实现(代码+数据库+LW)

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了信息化在线教学平台的开发全过程。通过分析信息化在线教学平台管理的不足&#xff0c;创建了一个计算机管理信息化在线教学平台的方案。文章介绍了信息化在线教…

DataX实战|使用Python 构建简易的DataX数据血缘工具(一)

导读&#xff1a; 在这篇文章中&#xff0c;我介绍了如何使用 Python 构建简易的 DataX 数据血缘工具&#xff0c;以便解决 DataXWeb 在查询表上下游关系时的不足。 选择 Flask 作为框架&#xff0c;利用 DataXWeb 的元数据 job_info 表和 job_json&#xff0c;通过 JSON 解析…

Android 14之HIDL转AIDL通信

Android 14之HIDL转AIDL通信 1、interface接口1.1 接口变更1.2 生成hidl2aidl工具1.3 执行hidl2aidl指令1.4 修改aidl的Android.bp文件1.5 创建路径1.6 拷贝生成的aidl到1和current1.7 更新与冻结版本1.8 编译模块接口 2、服务端代码适配hal代码修改2.1 修改Android.bp的hidl依…

51c视觉~YOLO~合集4

我自己的原文哦~ https://blog.51cto.com/whaosoft/12512597 1、Yolo8 1.1、检测PCB元件 技术世界正在以惊人的速度发展&#xff0c;而这种转变的核心是一个革命性的工具 — 计算机视觉。它最有趣的应用之一是电子印刷电路板 &#xff08;PCB&#xff09; 的检测和分析。本文…

基于树莓派的安保巡逻机器人--项目介绍

目录 一、项目简介 二、项目背景 三、作品研发技术方案 作品主要内容&#xff1a; 方案的科学性 设计的合理性 四、作品创新性及特点 五、作品自我评价 本篇为项目“基于树莓派的安保巡逻机器人”介绍博客 演示视频链接&#xff1a; 基于树莓派的安保巡逻机器人_音游…

多点DMALL启动招股:将在港交所上市,聚焦数字零售服务

近日&#xff0c;多点数智有限公司&#xff08;Dmall Inc.&#xff0c;下称“多点”或“多点DMALL”&#xff09;发布全球发售文件&#xff0c;于11月28日至12月3日招股&#xff0c;预计将于2024年12月6日在港交所主板挂牌上市。 招股书显示&#xff0c;多点DMALL本次全球发售的…