Zhuang's Diary

言之有物,持之以恒

YOLO(You Only Look Once)是一种用于对象检测的深度学习算法。其基本思想是将对象检测问题转换为回归问题,从而能够在单次前向传播中同时预测多个对象的类别和位置。YOLO通过卷积神经网络(CNN)处理图像,实现高效的实时对象检测。

1. 数学原理

1.1 网格划分
将输入图像划分为 ( S ✖️ S ) 的网格。每个网格单元负责检测图像中其中心落在该单元中的对象。

1.2 预测边界框
每个网格单元预测固定数量的边界框(通常为B个)。每个边界框由以下几个参数表示:
• ( (x, y) ):边界框中心相对于网格单元的位置。
• ( w, h ):边界框的宽度和高度,相对于整张图像的归一化值。
• ( C ):边界框中包含对象的置信度,表示为边界框实际包含对象的概率和预测的边界框与实际边界框的重叠度(IoU)的乘积。
每个边界框预测值可以表示为一个5维向量:( (x, y, w, h, C) )。

1.3 预测类概率
每个网格单元还预测C个类别的条件概率:( P(Class_i | Object) )。这些概率表示在当前网格单元中存在对象的情况下,各个类别的概率。

1.4 综合预测
最终的预测结果结合了类别概率和边界框置信度,计算每个类别的最终置信度分数:
P(Class_i) ✖️ C
这给出了在每个边界框中存在特定类别对象的置信度分数。

2. 计算机算法

YOLO的计算机算法实现包括以下几个主要部分:

2.1 定义输入
输入图像被调整为固定大小(如 ( 448 ✖️ 448 )),并归一化到 [0, 1] 范围。

2.2 归一化输入
将输入图像像素值归一化,使得每个像素值在 [0, 1] 之间。
具体数学步骤:
a) 首先计算矩阵中的平均值(μ); b) 计算所有元素与平均值的绝对差;c) 通过将上一步结果中的所有值平方,累加,除以值的数量,然后计算平方根,来计算标准差;d)通过减去平均值并除以标准差,将输入进行层归一化。

2.3 应用卷积
使用多个卷积层提取图像特征。每个卷积层应用卷积核,计算特征图。

2.4 应用最大池化
在卷积层之间应用最大池化层(Max Pooling),以减少特征图的尺寸并保留重要特征。
在特征图的每个通道上滑动定义的窗口,并在每个位置计算窗口内的最大值。这将生成一个新的下采样特征图,其形状取决于窗口大小和步长。具体步骤如下:
%%
2.4.1 定义窗口和步长
假设我们使用一个 2 ✖️ 2 的窗口,步长为 2。
2.4.2 滑动窗口
在每个通道上,从左上角开始,按照步长滑动窗口。每次滑动窗口时,计算窗口内的最大值。
2.4.3 计算最大值
在每个窗口位置,找到该窗口内的最大值。这些最大值组成了下采样后的特征图。 %%

2.5 非线性激活
在每个卷积层之后应用非线性激活函数(如ReLU)以引入非线性,使模型能够表示更复杂的函数。

2.6 展平
将最终的特征图展平成一个一维向量,为全连接层输入做好准备。
%%
2.6.1 输入特征图
假设输入特征图是一个三维张量,形状为 ( (H, W, D) ),其中 ( H ) 是高度,( W ) 是宽度,( D ) 是深度(通道数)。
2.6.2 计算展平后向量的长度
展平后的向量长度等于输入特征图所有元素的总数,可以通过以下公式计算:
\text{Flattened Length} = H \times W \times D
2.6.3 按顺序排列所有元素
将特征图中的所有元素按行优先(Row-major order)或列优先(Column-major order)的顺序排列成一维向量。通常使用行优先顺序,这意味着先遍历特征图的每一行,再遍历每一列,最后遍历每个通道。

示例:

1
2
3
4
5
6
7
8
[
[
[1, 2, 3], [4, 5, 6]
],
[
[7, 8, 9], [10, 11, 12]
]
]

按行优先顺序排列后,展平的结果为:
[1, 4, 7, 10, 2, 5, 8, 11, 3, 6, 9, 12]

%%

2.7 投影到输出形状
通过全连接层将展平的特征向量投影到输出形状。输出为一个 ( S ✖️ S ✖️ (B ✖️ 5 + C) ) 的张量,其中B是每个网格单元预测的边界框数量,5表示每个边界框的5个参数( x, y, w, h, C ),C是类别数。

2.8 组成最终推理
通过将边界框参数和类别概率结合起来,组成最终的检测结果。应用非极大值抑制(Non-Maximum Suppression, NMS)来消除冗余边界框,仅保留置信度最高的边界框。

YOLO工作流程总结
1. 输入图像:将图像调整为固定大小并归一化。
2. 特征提取:通过多个卷积层和最大池化层提取图像特征。
3. 非线性激活:应用非线性激活函数。
4. 展平和全连接:将特征图展平并通过全连接层进行预测。
5. 输出预测:生成边界框和类别概率的预测值。
6. 后处理:应用非极大值抑制,得到最终检测结果。
通过这些步骤,YOLO实现了快速且高效的对象检测,在多个应用领域中得到了广泛应用。

图片处理中的人工智能的分类有哪些:

  1. 图像识别与分类
    CLIP:https://github.com/openai/CLIP 根据图像预测最相关的文本片段,提取图像的特征信息。
    ViLT (Vision-and-Language Transformer):ViLT 模型主要用于多模态任务,包括视觉问答(Visual Question Answering)、图像文本匹配(Image-Text Matching)、图像字幕生成(Image Captioning)等任务。
    LAVIS:https://github.com/salesforce/LAVIS 是ALBEF,BLIP,CLIP,ALPRO,VGD-GPT等算法模型的集于一身的框架。
    • 目标检测:识别并定位图像中的多个目标物体,如行人检测、车辆识别等。
    • 图像分类:将整幅图像归类到预定义的类别中,如识别猫狗、区分不同种类的花卉等。
    • 面部识别:识别和验证图像中的人脸,用于安全监控和身份验证。

  2. 图像生成与编辑:
    • 生成对抗网络(GANs):用于生成逼真的图像,如DeepFake、图像增强、无中生有的图像生成。
    • 图像修复与上色:修复破损图像,给黑白图像上色,使其恢复到彩色图像。
    • 风格迁移:将一种艺术风格应用到另一张图像上,如把照片变成梵高风格的画作。

  3. 图像分割
    🚀 detectron2:https://github.com/facebookresearch/detectron2 用于物体检测、图像分割和其他视觉识别任务的平台。
    可以配置的算法:

    1. Mask R-CNN:Mask R-CNN 是由 Facebook AI Research (FAIR) 团队提出的,用于目标检测和实例分割的模型。它在 Faster R-CNN 的基础上添加了一个分支,用于预测每个 ROI 的分割掩码。
    2. EfficientDet:EfficientDet 是由 Google 的 AutoML 团队提出的,基于 EfficientNet 的轻量级且高效的目标检测模型。它在多个目标检测基准测试中表现优异。
    3. Faster R-CNN:Faster R-CNN 是基于区域提议网络(RPN)的目标检测模型,能够快速地在图像中检测出目标物体。
    4. RetinaNet:RetinaNet 单阶段目标检测模型,采用 Focal Loss 解决正负样本不平衡问题,能够在精度和速度上取得良好的平衡。
      🚀 YOLOv11 (history v8):https://github.com/ultralytics/ultralytics 一个物体检测和图像分割的算法。Ultralytics 提供了完整的框架,用于训练、评估和部署 YOLOv8 模型。这个框架包括丰富的工具和接口,使用户可以方便地进行数据处理、模型训练和推理。
      DINO:https://github.com/IDEA-Research/DINO This is the official implementation of the paper “DINO: DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection“. 一种物体检测和图像分割模型的算法及其实现。
      • 语义分割:将图像划分为多个语义区域,每个区域代表一个类别,如天空、道路、建筑物等。
      实例分割:不仅区分出不同的物体类别,还区分出同一类别的不同实例。
  4. 图像增强:
    • 图像放大:通过增加图像的分辨率,使图像更加清晰,如将低分辨率的监控图像转换为高清图像。
    • 去噪:减少图像中的噪声,使图像更加清晰。
    • 去模糊:减少图像中的模糊效果,提高图像清晰度。
    • 增强对比度:提升图像的对比度,使图像更加鲜明。

  5. 医学影像处理:
    • 医学影像分析:用于分析医学影像,如CT、MRI,帮助医生诊断疾病。
    • 自动分割和标注:自动识别并标注医学影像中的重要器官或病灶区域。

  6. 计算机视觉任务:
    • 自动驾驶:通过图像处理技术识别道路标志、行人、车辆等,辅助或实现自动驾驶。
    • 视觉导航:用于机器人导航,通过处理图像数据识别路径和障碍物。

  7. 增强现实与虚拟现实(AR/VR):
    • 环境识别与跟踪:识别和跟踪用户周围的物体和环境,用于增强现实应用。
    • 虚拟物体嵌入:将虚拟物体嵌入真实场景中,实现虚实结合的效果。

最后请出 the world’s biggest computer vision library — OpenCV https://opencv.org/, https://github.com/opencv/opencv

2023/07/05,汇丰发布:
https://www.hsbc.com/-/files/hsbc/media/media-release/2023/230705-hsbc-qkd-press-release.pdf

汇丰银行与量子密钥分发QKD的实验技术情况

技术细节和实施情况:

汇丰银行(HSBC)积极参与量子密钥分发(QKD)技术的试验,以增强其金融交易的安全性,并保护其免受未来量子计算机带来的网络威胁。以下是其QKD实施的关键方面:

  1. 合作伙伴和协作:
    • 汇丰银行与BT(英国电信)、东芝(Toshiba)和亚马逊网络服务(AWS)等技术提供商合作实施QKD。这些合作旨在为各种金融应用建立安全的量子网络基础设施。
  2. 地铁网络试验:
    • 汇丰银行成为首家加入BT和东芝安全量子“地铁”网络的银行。该网络旨在为机构间提供无条件安全的交易。试验涉及将汇丰银行位于伦敦金丝雀码头的全球总部与位于伯克郡的数据中心通过63公里的光纤链路连接。
  3. 使用案例和应用:
    • 汇丰银行的QKD试验的主要使用案例是确保外汇(FX)交易的安全。一个显著的试验涉及使用QKD保护从欧元到美元的3000万欧元交易场景中的高度敏感的交易数据。
    • 汇丰银行还探索了其他应用,如安全视频通信和边缘计算,利用QKD确保这些场景中的数据完整性和安全性。
  4. 技术优势:
    • QKD利用量子物理的基本特性生成不受窃听或网络攻击的加密密钥。这意味着任何试图截取或篡改数据的行为都可以立即被检测到,为金融交易提供了显著的网络安全飞跃​。
  5. 未来影响:
    • 汇丰银行的试验旨在将QKD整合到其最关键的交易工具和金融系统中,确保它们在量子计算技术进步时仍然安全。这种前瞻性的方法展示了汇丰银行在应对潜在网络威胁和制定未来网络安全措施方面的承诺​。

总结

汇丰银行在QKD方面的参与代表了金融网络安全的重大进展,特别是在应对未来量子计算机带来的威胁方面。通过与领先的技术提供商合作并在现实场景中成功进行试验,汇丰银行正在为银行业量子密码学的实施设立标准。
(注:以上内容来自于ChatGPT)

根据Google Gemini团队的论文 - https://arxiv.org/pdf/2312.11805 (page 8)来看,测评涵盖了:

  1. MMLU (Massive Multitask Language Understanding): 这是一个综合性的基准测试,用于衡量模型在多任务语言理解方面的能力。它包含了多个子任务,涉及不同的领域和语言,旨在全面评估模型的语言处理能力。
  2. GSM8K (Grade-school Math 8K): 这是一个数学问题解答的数据集,包含了小学级别的数学问题。它用于测试模型解决基础数学问题的能力。
  3. MATH: 这个术语可能指的是一个更广泛的数学问题解答数据集,它可能包含了不同难度级别的数学问题,用于评估模型的数学推理和解答能力。
  4. BIG-Bench-Hard: 这是BIG-Bench(Broad Institute General Language Benchmark)的一个子集,包含了更难的任务。BIG-Bench是一个用于评估语言模型在广泛任务上性能的基准测试。
  5. HumanEval: 这是一个用于评估模型在特定任务上性能的基准测试,通常与人类的表现进行比较。它可能包含了多种类型的任务,如编程任务或自然语言生成任务。
  6. Natural2Code: 这是一个评估模型将自然语言转换为代码能力的数据集。它用于测试模型在编程语言理解和代码生成方面的能力。
  7. DROP (Discrete Reasoning Over Paragraphs): 这是一个阅读理解和推理的数据集,要求模型对段落进行推理并解决基于段落内容的问题。
  8. HellaSwag: 这是一个用于评估模型在多步推理和情境理解方面能力的基准测试。它包含了多个情境,模型需要根据给定的故事线索选择合适的结局。
  9. WMT23: 这是Workshop on Machine Translation(机器翻译研讨会)2023年的缩写,它是一个专注于机器翻译领域的国际会议,通常包含最新的研究成果和技术进展。WMT也组织机器翻译系统的评估和竞争,WMT23可能指的是该年会议中使用的机器翻译基准测试。
    改论文中,还有更多的测试数据集。

根据 https://gpt4all.io/index.html 来看,测评涵盖了:

  1. BoolQ: BoolQ(Boolean Questions)是一个数据集,专门用于评估模型理解自然语言中是/否问题的能力。它要求模型不仅要回答问题,还要判断问题是否是布尔类型(即答案为真或假)。
  2. PIQA: PIQA(Paraphrased Image Question Answering)是一个图像问答数据集,它要求模型对图像内容进行理解,并回答有关图像的问题,这些问题是以释义或改写的形式提出的。
  3. HellaSwag: HellaSwag是一个多步推理和常识问答的数据集,它包含了一系列的情境,模型需要根据给定的故事线索选择合适的结局。这个数据集旨在测试模型的推理能力和对常识的掌握。
  4. WinoGrande: WinoGrande是一个大规模的、多样化的、高质量的问答数据集,它包含了大量的问题和答案对,用于评估模型在开放域问答任务上的性能。
  5. ARC-e: ARC-e(AI2 Reasoning Challenge - Elementary)是一个评估模型在一系列考试类型问题上的表现的基准测试。它旨在测试模型的知识和推理能力。
  6. ARC-c: ARC-c(AI2 Reasoning Challenge - Complex)是ARC-e的进阶版本,包含了更复杂的推理挑战,需要模型具备更高级的推理技巧。
  7. OBQA: OBQA(Open-Book Question Answering)是一个问答任务,其中模型在回答问题时可以访问给定的文本或书籍。这个任务测试模型的理解和推理能力,同时考虑到它可以访问额外的信息源。

由此看来,https://www.baichuan-ai.com/home,目前给出的测评结果来看,还需要继续努力。

不仅是分数上,而且在测试的范围上,都有相当大的差距存在。

SD-JWT:

https://datatracker.ietf.org/doc/draft-ietf-oauth-selective-disclosure-jwt/
https://github.com/eu-digital-identity-wallet/eudi-lib-jvm-sdjwt-kt

算法实现:

  1. 数据封装:
    • 数据被封装在JWT中,包含需要选择性披露的声明(claims)。
    • 每个声明都可以独立加密或哈希处理。
  2. Merkle树结构:
    • 为所有声明构建一个Merkle树,每个叶子节点代表一个哈希后的声明。
    • 通过哈希值的组合,形成父节点,直到生成一个根哈希值(root hash)。
  3. 签名:
    • 使用私钥对整个JWT(包括Merkle树的根哈希值)进行签名。
    • 签名确保数据的完整性和真实性。
  4. 选择性披露:
    • 用户可以选择性地披露特定的声明,并提供相应的Merkle证明(包含所需的兄弟节点哈希)。
    • 验证者使用Merkle证明验证特定声明是否属于原始数据。
      关键技术:
  • JWT
  • Merkle树
  • 数字签名

BBS Signature:

算法实现:

  1. 签名生成:
    • 生成密钥对(私钥和公钥)。
    • 使用私钥对消息进行签名,生成一个签名值。
  2. 选择性披露:
    • 允许用户选择性披露部分数据,并生成零知识证明(ZKP),证明所披露的数据是原始数据的一部分。
  3. 验证:
    • 验证者使用公钥和零知识证明,验证所披露的数据的真实性和完整性。
    • 确保签名和数据未被篡改。
      关键技术:
  • 零知识证明
  • 数字签名
  • 椭圆曲线密码学

BBS+ Signature:

https://github.com/mattrglobal/bbs-signatures
Org BBS+ Signature algorithm PPT: https://datatracker.ietf.org/meeting/114/materials/slides-114-cfrg-bbs-signature-scheme-pdf-00
https://github.com/decentralized-identity/bbs-signature
https://github.com/microsoft/bbs-node-reference

算法实现:

  1. 优化签名生成:
    • 基于BBS签名算法,增加了对复杂电路和多项声明的支持。
    • 使用私钥对多个声明进行签名,生成一个增强的签名值。
  2. 增强的选择性披露:
    • 允许用户更高效地选择性披露部分数据,并生成更高效的零知识证明。
    • 增强了对复杂数据结构和大规模应用的支持。
  3. 高效验证:
    • 验证者使用公钥和优化后的零知识证明,验证所披露的数据的真实性和完整性。
    • 验证过程经过优化,提高了性能和效率。
      关键技术:
  • 优化的零知识证明
  • 数字签名
  • 高效验证算法

PolygonID:

https://github.com/0xPolygonID/issuer-node

zkSNARK

https://github.com/iden3/snarkjs (Groth16, PLONK, FFLONK三种算法可选)

主要步骤:

  1. 设置(Setup):
    • 生成一组公共参数(公共参考字符串CRS),包括两个部分:证明密钥(proving key)和验证密钥(verifying key)。公共参数由一个复杂的数学过程生成,通常基于椭圆曲线和配对。
    • 这个过程涉及一个可信的第三方,确保公共参数的安全生成。
  2. 证明生成(Proving):
    • 证明者使用具体的输入(满足某个电路或逻辑条件)和证明密钥生成一个简洁的证明(Proof)。
    • 该证明由少量的群元素组成,可以非常高效地传输和存储。
  3. 验证(Verification):
    • 验证者使用验证密钥验证证明的有效性,确保输入满足声明的逻辑条件。
    • 通过检查一个简单的数学等式,只需检查少量计算,验证过程快速且高效。

SD-JWT(Self-issued, Decentralized JWT)、BBS+ Signature(BlsBBSIG-based Signature)和 PolygonID 是与去中心化身份(DID)相关的不同技术或概念。为了比较它们在DID应用中的适用性,我们可以考虑几个关键维度,如安全性、隐私性、易用性、互操作性和可扩展性。以下是对这些技术的比较,以及它们在DID应用中的评级:

特点 SD-JWT BBS BBS+ PolygonID
发明时间 2022 2004 2008 2012,
2016
标准链接 oauth-selective-disclosure-jwt Short Group Signatures Constant-Size Dynamic k-TAA Short Non-Interactive Zero-Knowledge Proofs
On the Size of Pairing-based Non-interactive Arguments
基本概念 基于JWT的选择性披露和加密技术,用于去中心化身份管理 基于BLS签名的短群签名方案 BBS的改进版,提供更强的隐私性和安全性 基于Polygon网络的去中心化身份解决方案。零知识简洁非交互性知识论证,基于数学证明
选择性披露 支持,使用Merkle树和加密技术 支持,通过零知识证明实现 更高效和灵活的选择性披露 支持,使用zk-SNARKs技术实现
零知识证明 基本支持,通过Merkle树结构和证明 支持,通过零知识证明协议 增强支持,优化了零知识证明性能 强大支持,通过zk-SNARKs实现
隐私保护 高,允许选择性披露特定声明而不泄露完整数据 高,通过选择性披露和零知识证明保护隐私 更高,优化选择性披露和零知识证明实现,性能高效,应用灵活 极高,通过zk-SNARKs和去中心化验证实现
性能 中等,受Merkle树结构影响 高效,适用于大规模验证 优异,优化了签名和验证过程 优秀,但证明生成计算量大,验证效率高
互操作性 高,与现有的JWT标准兼容 需要更多集成工作,适用于专用系统 类似BBS,但更优化 高,与以太坊和其他EVM兼容区块链互操作
应用场景 可验证凭证、教育认证等 DID系统中的隐私保护凭证、去中心化身份验证 高级DID系统、隐私保护凭证、复杂零知识证明环境 高度隐私保护应用,如身份验证、金融交易,如DeFi、NFT、DID管理等
落地项目 Trinsic, European Digital Identity Hyperledger Indy, Hyperledger Aries PolygonID, snarkjs, rapidsnark
安全性 高,基于哈希函数和加密技术 高,基于BLS签名,提供了良好的安全性 更高,基于优化的配对密码学和零知识证明,提供了抗密钥泄露的安全性 极高,基于复杂数学证明,难以破解
抗量子性 低,当前加密技术未明确抗量子 低,对量子计算较为脆弱 低,与BBS相似,对量子计算较为脆弱 低,大多数现有的zk-SNARKs对量子计算不具备抗性
易用性 高,易于实现和集成 中等,需要深入的密码学知识 中等,需要理解优化的密码学原理 中等,需掌握复杂数学和密码学知识,开发和验证较为复杂,PolygonID 简化了使用的复杂性
可扩展性 中等,受限于Merkle树的复杂度和数据大小 高,可扩展到大规模验证环境。签名的大小相对较大,随着消息块的增加,签名大小也增加。 高,优化后适用于大规模应用和验证。签名大小显著减小,且长度固定 高,验证效率高,但证明生成需大量计算资源,Polygon 网络设计可用于处理高交易量

Groth16, PLONK 和 FFLONK 在PolygonID中的应用

特点 Groth16 PLONK Implementation
PLONK paper
FFLONK
发明年 2016 2019 2021
基本概念 基于零知识简洁非交互性知识论证,主要用于隐私保护 高效零知识证明系统,适用于去中心化应用 进一步优化的PLONK,专注于提高性能和验证效率
证明生成时间 较长,适合复杂证明 快速,适用于高频次证明生成 更快速,优化后的证明生成时间
验证时间 快速,但略慢于PLONK 快速,验证时间较短 更快速,优化后的验证时间
计算资源需求 较高,可能需要更多计算资源 中等,适合大多数硬件环境 低,优化后的算法减少计算资源需求
证明大小 较大,增加存储成本 较小,适合链上存储,减少存储成本 最小,极大减少存储需求
可信设置 每个电路需要单独的可信设置 一次可信设置,可重复使用 一次可信设置,可重复使用
灵活性 较低,需要为特定电路优化 高,支持复杂电路和应用 高,适用于多种应用场景
安全性 高,基于配对和复杂数学难题 高,基于多项式数学难题 更高,基于优化的数学基础
用户体验 设置复杂且生成时间较长,用户体验较差 简化设置过程和快速验证,提供良好用户体验 优化的性能和简化的设置过程,用户体验最佳
适用场景 适用于特定需求明确且不需频繁更新的场景 适用于高频交互和高性能需求的应用 适用于各种高效、高频次的零知识证明应用场景
在PolygonID中的应用 适用于复杂隐私保护和金融交易场景 适用于实时身份验证和高频交易 适用于高效、高频次的身份验证和隐私保护场景