ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

PaddleX 图像特征模块使用教程:从特征向量提取到检索识别实战

PaddleX 图像特征模块使用教程:从特征向量提取到检索识别实战 人工智能大模型低代码计算机视觉深度学习NLP模型推理服务RAG【免费下载链接】PaddleXAll-in-One Development Tool based on PaddlePaddle项目地址https://gitcode.com/paddlepaddle/PaddleX点击查看免费下载图像特征模块是飞桨 PaddleX 中面向图像检索任务的核心能力之一它通过深度学习方法从图像中自动提取高维特征向量为后续的向量检索与相似图像匹配提供输入。本教程以 关联文档 为骨架结合仓库中的模型配置文件与推理源码完整讲解 PaddleX 图像特征模块的模型选型、Python 快速集成、数据集校验、模型训练/评估/推理的端到端二次开发流程读完即可独立构建自己的图像特征提取与检索识别方案。一、模块概述图像特征模块是计算机视觉中的一项重要任务主要指的是通过深度学习方法自动从图像数据中提取有用的特征以便于后续的图像检索任务。该模块的性能直接影响到后续任务的准确性和效率。在实际应用中图像特征通常会输出一组特征向量这些向量能够有效地表示图像的内容、结构、纹理等信息并将作为输入传递给后续的检索模块进行处理。在 PaddleX 中图像特征模块以PP-ShiTuV2_rec系列模型为默认实现其推理输出是一组经 L2 归一化的浮点特征向量默认 512 维。从源码结构看该模块属于通用图像特征系统 PP-ShiTuV2 的特征提取子模块PP-ShiTuV2 由主体检测、特征提取、向量检索三个模块构成特征提取模型负责把图像编码为向量检索模块负责在向量库中完成相似度匹配与识别参见 PP-ShiTuV2 产线配置。二、支持模型列表PaddleX 图像特征模块当前提供 3 个官方预训练模型均由仓库中的 模型注册表 登记可在 configs/modules/image_feature 目录下找到对应的 YAML 配置文件模型模型下载链接recall1 (%)GPU推理耗时ms[常规模式 / 高性能模式]CPU推理耗时ms[常规模式 / 高性能模式]模型存储大小MB介绍PP-ShiTuV2_rec推理模型 / 训练模型84.23.91 / 1.066.82 / 2.8916.3通用图像特征系统 PP-ShiTuV2 的特征提取模块模型可根据系统情况选择不同的模型PP-ShiTuV2_rec_CLIP_vit_base推理模型 / 训练模型88.6912.57 / 11.6267.09 / 67.09306.6同上基于 CLIP ViT-Base 骨干PP-ShiTuV2_rec_CLIP_vit_large推理模型 / 训练模型91.0349.85 / 49.85229.14 / 229.141050同上基于 CLIP ViT-Large 骨干测试环境说明性能测试环境测试数据集PaddleX 自建数据集。硬件配置GPU 为 NVIDIA Tesla T4CPU 为 Intel Xeon Gold 6271C 2.60GHz其他环境为 Ubuntu 20.04 / CUDA 11.8 / cuDNN 8.9 / TensorRT 8.6.1.6。推理模式说明模式GPU配置CPU配置加速技术组合常规模式FP32精度 / 无TRT加速FP32精度 / 8线程PaddleInference高性能模式选择先验精度类型和加速策略的最优组合FP32精度 / 8线程选择先验最优后端Paddle/OpenVINO/TRT等从三份配置文件的差异可以看出选型规律PP-ShiTuV2_rec体积最小16.3 MB、推理最快适合对速度敏感的场景两个 CLIP 版本特征表达更强、召回率更高但模型体积与耗时成倍增加如 PP-ShiTuV2_rec_CLIP_vit_base.yaml 中默认batch_size为 32、学习率 0.001与PP-ShiTuV2_rec的 128/0.01 不同可根据精度与效率的平衡选择。三、快速集成❗ 在快速集成前请先安装 PaddleX 的 wheel 包详细请参考 PaddleX本地安装教程。完成 wheel 包的安装后几行代码即可完成图像特征模块的推理可以任意切换该模块下的模型也可以将图像特征模块的模型推理集成到您的项目中。运行以下代码前请先将示例图片下载到本地from paddlex import create_model model_name PP-ShiTuV2_rec model create_model(model_name) output model.predict(general_image_recognition_001.jpg, batch_size1) for res in output: res.print() res.save_to_json(./output/res.json)运行后得到的结果为{res: {input_path: general_image_recognition_001.jpg, page_index: None, feature: array([ 0.04910231, ..., -0.07126085], dtypefloat32)}}参数含义如下input_path输入的待预测图像的路径feature提取的图像特征向量维度为模型输出特征维度此处为 512 维3.1create_model参数说明create_model实例化图像特征模型此处以PP-ShiTuV2_rec为例具体说明如下参数参数说明参数类型可选项默认值model_name模型名称str无无model_dir模型存储路径str无无device模型推理设备str支持指定 GPU 具体卡号如gpu:0其他硬件具体卡号如npu:0CPU 如cpugpu:0use_hpip是否启用高性能推理插件bool无Falsehpi_config高性能推理配置dict|None无None其中model_name必须指定。指定model_name后默认使用 PaddleX 内置的模型参数在此基础上指定model_dir时使用用户自定义的模型。需要注意的是模型名必须命中 MODELS 注册表 中登记的PP-ShiTuV2_rec、PP-ShiTuV2_rec_CLIP_vit_base、PP-ShiTuV2_rec_CLIP_vit_large三者之一create_model会据此自动组装对应模型的预处理、推理与后处理流水线。3.2predict()方法参数说明调用图像特征模型的predict()方法进行推理预测predict()方法参数有input和batch_size具体说明如下参数参数说明参数类型可选项默认值input待预测数据支持多种输入类型Python Var/str/listPython变量如numpy.ndarray表示的图像数据文件路径如图像文件的本地路径/root/data/img.jpgURL链接如图像文件的网络 URL示例本地目录该目录下需包含待预测数据文件如本地路径/root/data/列表列表元素需为上述类型数据如[numpy.ndarray, numpy.ndarray]、[/root/data/img1.jpg, /root/data/img2.jpg]、[/root/data1, /root/data2]无batch_size批大小int任意整数1从推理实现 predictor.py 可以看到predict内部依次执行读取 RGB 图像 → 按短边 Resize → 按 ImageNet 均值/标准差 Normalize → 转 CHW 并组 batch → 静态图推理 → 后处理输出特征。其中后处理算子 NormalizeFeatures 会对网络输出做 L2 归一化先求向量平方和开方再逐元素相除使得输出特征可直接用于后续余弦相似度检索这也是本模块推理结果可被检索模块直接消费的关键一步。3.3 预测结果的处理方法对预测结果进行处理每个样本的预测结果均为对应的 Result 对象该模块使用 IdentityResult 封装且支持打印、保存为json文件的操作方法方法说明参数参数类型参数说明默认值print()打印结果到终端format_jsonbool是否对输出内容使用JSON缩进格式化Trueindentint指定缩进级别以美化输出的JSON数据使其更具可读性仅当format_json为True时有效4ensure_asciibool控制是否将非ASCII字符转义为Unicode。为True时全部转义False保留原始字符仅当format_json为True时有效Falsesave_to_json()将结果保存为 json 格式的文件save_pathstr保存的文件路径当为目录时保存文件命名与输入文件类型命名一致无indentint指定缩进级别以美化输出的JSON数据使其更具可读性仅当format_json为True时有效4ensure_asciibool控制是否将非ASCII字符转义为Unicode。为True时全部转义False保留原始字符仅当format_json为True时有效False此外也支持通过属性获取预测结果属性属性说明json获取预测的json格式的结果需要说明的是IdentityResult在序列化时会剔除input_img原始图像字段参见 result.py因此打印与保存的 JSON 中只保留input_path、page_index与feature等关键信息。四、二次开发如果你追求更高精度的现有模型可以使用 PaddleX 的二次开发能力开发更好的图像特征模型。在使用 PaddleX 开发图像特征模型之前请务必安装 PaddleX 的分类相关模型训练插件安装过程可以参考 PaddleX本地安装教程。4.1 数据准备在进行模型训练前需要准备相应任务模块的数据集。PaddleX 针对每一个模块提供了数据校验功能只有通过数据校验的数据才可以进行模型训练。此外PaddleX 为每一个模块都提供了 Demo 数据集您可以基于官方提供的 Demo 数据完成后续的开发。若您希望用私有数据集进行后续的模型训练可以参考 PaddleX图像特征任务模块数据标注教程。4.1.1 Demo 数据下载参考下面的命令将 Demo 数据集下载到指定文件夹wget https://paddle-model-ecology.bj.bcebos.com/paddlex/data/Inshop_examples.tar -P ./dataset tar -xf ./dataset/Inshop_examples.tar -C ./dataset/4.1.2 数据校验一行命令即可完成数据校验python main.py -c paddlex/configs/modules/image_feature/PP-ShiTuV2_rec.yaml \ -o Global.modecheck_dataset \ -o Global.dataset_dir./dataset/Inshop_examples执行上述命令后PaddleX 会对数据集进行校验并统计数据集的基本信息命令运行成功后会在 log 中打印出Check dataset passed !信息。校验结果文件保存在./output/check_dataset_result.json同时相关产出会保存在当前目录的./output/check_dataset目录下产出目录中包括可视化的示例样本图片和样本分布直方图。校验结果详情点击展开校验结果文件具体内容为done_flag: true, check_pass: true, attributes: { train_samples: 1000, train_sample_paths: [ check_dataset/demo_img/05_1_front.jpg, check_dataset/demo_img/02_1_front.jpg, check_dataset/demo_img/02_3_back.jpg, check_dataset/demo_img/04_3_back.jpg, check_dataset/demo_img/04_2_side.jpg, check_dataset/demo_img/12_1_front.jpg, check_dataset/demo_img/07_2_side.jpg, check_dataset/demo_img/04_7_additional.jpg, check_dataset/demo_img/04_4_full.jpg, check_dataset/demo_img/01_1_front.jpg ], gallery_samples: 110, gallery_sample_paths: [ check_dataset/demo_img/06_2_side.jpg, check_dataset/demo_img/01_4_full.jpg, check_dataset/demo_img/04_7_additional.jpg, check_dataset/demo_img/02_1_front.jpg, check_dataset/demo_img/02_3_back.jpg, check_dataset/demo_img/02_3_back.jpg, check_dataset/demo_img/02_4_full.jpg, check_dataset/demo_img/03_4_full.jpg, check_dataset/demo_img/02_2_side.jpg, check_dataset/demo_img/03_2_side.jpg ], query_samples: 125, query_sample_paths: [ check_dataset/demo_img/08_7_additional.jpg, check_dataset/demo_img/01_7_additional.jpg, check_dataset/demo_img/02_4_full.jpg, check_dataset/demo_img/04_4_full.jpg, check_dataset/demo_img/09_7_additional.jpg, check_dataset/demo_img/04_3_back.jpg, check_dataset/demo_img/02_1_front.jpg, check_dataset/demo_img/06_2_side.jpg, check_dataset/demo_img/02_7_additional.jpg, check_dataset/demo_img/02_2_side.jpg ] }, analysis: { histogram: check_dataset/histogram.png }, dataset_path: ./dataset/Inshop_examples, show_type: image, dataset_type: ShiTuRecDataset上述校验结果中check_pass为true表示数据集格式符合要求其他部分指标说明如下attributes.train_samples该数据集训练样本数量为 1000attributes.gallery_samples该数据集被查询gallery样本数量为 110attributes.query_samples该数据集查询query样本数量为 125attributes.train_sample_paths该数据集训练样本可视化图片相对路径列表attributes.gallery_sample_paths该数据集被查询样本可视化图片相对路径列表attributes.query_sample_paths该数据集查询样本可视化图片相对路径列表。另外数据集校验还对数据集中图像数量和图像类别情况进行了分析并绘制了分布直方图histogram.png。值得注意dataset_type字段标识该模块的数据集类型为ShiTuRecDataset——它天然划分为 train / gallery / query 三个集合这正是图像检索任务“训练、建库、查询”三段式流程的数据形态区别于普通分类数据集的 train/val 划分。4.1.3 数据集格式转换/数据集划分可选在完成数据校验之后可以通过修改配置文件或是追加超参数的方式对数据集的格式进行转换也可以对数据集的训练/验证比例进行重新划分。1数据集格式转换图像特征任务支持LabelMe格式的数据集转换为ShiTuRecDataset格式数据集格式转换的参数可以通过修改配置文件中CheckDataset下的字段进行设置CheckDataset.convert.enable是否进行数据集格式转换图像特征任务支持LabelMe格式的数据集转换为ShiTuRecDataset格式默认为FalseCheckDataset.convert.src_dataset_type如果进行数据集格式转换则需设置源数据集格式默认为null可选值为LabelMe。例如想将LabelMe格式的数据集转换为ShiTuRecDataset格式先下载示例数据cd /path/to/paddlex wget https://paddle-model-ecology.bj.bcebos.com/paddlex/data/image_classification_labelme_examples.tar -P ./dataset tar -xf ./dataset/image_classification_labelme_examples.tar -C ./dataset/再将配置文件修改为...... CheckDataset: ...... convert: enable: True src_dataset_type: LabelMe ......随后执行命令python main.py -c paddlex/configs/modules/image_feature/PP-ShiTuV2_rec.yaml \ -o Global.modecheck_dataset \ -o Global.dataset_dir./dataset/image_classification_labelme_examples数据转换执行之后原有标注文件会被在原路径下重命名为xxx.bak。以上参数同样支持通过追加命令行参数的方式进行设置python main.py -c paddlex/configs/modules/image_feature/PP-ShiTuV2_rec.yaml \ -o Global.modecheck_dataset \ -o Global.dataset_dir./dataset/image_classification_labelme_examples \ -o CheckDataset.convert.enableTrue \ -o CheckDataset.convert.src_dataset_typeLabelMe2数据集划分数据集划分的参数同样通过CheckDataset下的字段设置CheckDataset.split.enable是否进行重新划分数据集为True时进行数据集重划分默认为FalseCheckDataset.split.train_percent如果重新划分数据集则需要设置训练集的百分比类型为 0-100 之间的任意整数需要保证和gallery_percent、query_percent值加和为 100。例如想重新划分数据集为训练集占比 70%、被查询数据集占比 20%、查询数据集占比 10%则需将配置文件修改为...... CheckDataset: ...... split: enable: True train_percent: 70 gallery_percent: 20 query_percent: 10 ......随后执行命令python main.py -c paddlex/configs/modules/image_feature/PP-ShiTuV2_rec.yaml \ -o Global.modecheck_dataset \ -o Global.dataset_dir./dataset/Inshop_examples数据划分执行之后原有标注文件会被在原路径下重命名为xxx.bak。以上参数同样支持通过追加命令行参数的方式进行设置python main.py -c paddlex/configs/modules/image_feature/PP-ShiTuV2_rec.yaml \ -o Global.modecheck_dataset \ -o Global.dataset_dir./dataset/Inshop_examples \ -o CheckDataset.split.enableTrue \ -o CheckDataset.split.train_percent70 \ -o CheckDataset.split.gallery_percent20 \ -o CheckDataset.split.query_percent10❗注意由于图像特征模型评估的特殊性当且仅当 train、query、gallery 集合属于同一类别体系下数据切分才有意义。在图像特征模型的评估过程中必须满足 gallery 集合和 query 集合属于同一类别体系其允许和 train 集合不在同一类别体系如果 gallery 集合和 query 集合与 train 集合不在同一类别体系则数据划分后的评估没有意义建议谨慎操作。4.2 模型训练一条命令即可完成模型的训练以此处图像特征模型PP-ShiTuV2_rec的训练为例python main.py -c paddlex/configs/modules/image_feature/PP-ShiTuV2_rec.yaml \ -o Global.modetrain \ -o Global.dataset_dir./dataset/Inshop_examples需要如下几步指定模型的.yaml配置文件路径此处为PP-ShiTuV2_rec.yaml训练其他模型时需要指定相应的配置文件模型和配置文件的对应关系可以查阅 PaddleX模型列表CPU/GPU指定模式为模型训练-o Global.modetrain指定训练数据集路径-o Global.dataset_dir其他相关参数均可通过修改.yaml配置文件中的Global和Train下的字段来进行设置也可以通过在命令行中追加参数来进行调整。如指定前 2 卡 GPU 训练-o Global.devicegpu:0,1设置训练轮次数为 10-o Train.epochs_iters10。更多可修改的参数及其详细解释可以查阅模型对应任务模块的配置文件说明 PaddleX通用模型配置文件参数说明新特性Paddle 3.0 版本支持了 CINN 神经网络编译器在使用 GPU 设备训练时不同模型有不同程度的训练加速效果。在 PaddleX 中训练模型时可通过指定参数-o Train.dy2stTrue开启。以 PP-ShiTuV2_rec.yaml 为例Train段内置的默认超参数包括num_classes: 159类别数需与数据集类别一致、epochs_iters: 20、batch_size: 128、learning_rate: 0.01、warmup_steps: 5、pretrain_weight_path指向官方预训练权重 URL以及eval_interval、save_interval等控制参数Global.device默认值在该配置中为gpu:0,1,2,3训练时可按实际卡数改写。更多说明点击展开模型训练过程中PaddleX 会自动保存模型权重文件默认为output如需指定保存路径可通过配置文件中-o Global.output字段进行设置PaddleX 对您屏蔽了动态图权重和静态图权重的概念。在模型训练的过程中会同时产出动态图和静态图的权重在模型推理时默认选择静态图权重推理在完成模型训练后所有产出保存在指定的输出目录默认为./output/下通常有以下产出train_result.json训练结果记录文件记录了训练任务是否正常完成以及产出的权重指标、相关文件路径等train.log训练日志文件记录了训练过程中的模型指标变化、loss 变化等config.yaml训练配置文件记录了本次训练的超参数的配置.pdparams、.pdema、.pdopt.pdstate、.pdiparams、.json模型权重相关文件包括网络参数、优化器、EMA、静态图网络参数、静态图网络结构等【注意】Paddle 3.0.0 对于静态图网络结构信息的存储格式由 protobuf原.pdmodel后缀文件升级为 json现.json后缀文件以兼容 PIR 体系并获得更好的灵活性与扩展性。4.3 模型评估在完成模型训练后可以对指定的模型权重文件在验证集上进行评估验证模型精度。使用 PaddleX 进行模型评估一条命令即可完成python main.py -c paddlex/configs/modules/image_feature/PP-ShiTuV2_rec.yaml \ -o Global.modeevaluate \ -o Global.dataset_dir./dataset/Inshop_examples与模型训练类似需要如下几步指定模型的.yaml配置文件路径此处为PP-ShiTuV2_rec.yaml指定模式为模型评估-o Global.modeevaluate指定验证数据集路径-o Global.dataset_dir。其他相关参数均可通过修改.yaml配置文件中的Global和Evaluate下的字段来进行设置详细请参考 PaddleX通用模型配置文件参数说明。更多说明点击展开在模型评估时需要指定模型权重文件路径每个配置文件中都内置了默认的权重保存路径如PP-ShiTuV2_rec.yaml中Evaluate.weight_path默认为output/best_model/best_model.pdparams如需要改变只需要通过追加命令行参数的形式进行设置即可如-o Evaluate.weight_path./output/best_model/best_model.pdparams在完成模型评估后会产出evaluate_result.json其记录了评估的结果具体来说记录了评估任务是否正常完成以及模型的评估指标包含recall1、recall5、mAP。这正是图像检索任务的标准评估口径recallk 衡量在 top-k 命中正确结果的比例mAP 综合衡量排序质量。4.4 模型推理在完成模型的训练和评估后即可使用训练好的模型权重进行推理预测或者进行 Python 集成。4.4.1 模型推理通过命令行的方式进行推理预测只需如下一条命令。运行以下代码前请将示例图片下载到本地python main.py -c paddlex/configs/modules/image_feature/PP-ShiTuV2_rec.yaml \ -o Global.modepredict \ -o Predict.model_dir./output/best_model/inference \ -o Predict.inputgeneral_image_recognition_001.jpg与模型训练和评估类似需要如下几步指定模型的.yaml配置文件路径此处为PP-ShiTuV2_rec.yaml指定模式为模型推理预测-o Global.modepredict指定模型权重路径-o Predict.model_dir./output/best_model/inference指定输入数据路径-o Predict.input...。其他相关参数均可通过修改.yaml配置文件中的Global和Predict下的字段来进行设置详细请参考 PaddleX通用模型配置文件参数说明。❗注意图像特征模型的推理结果为一组向量需要配合检索模块完成图像的识别。这一警告点明了本模块的使用边界特征提取只是检索链路的前半程。完整的识别方案还需两步——先用待检索图库构建向量索引gallery 特征入库再对查询图提取特征并在索引中做相似度检索。仓库中的 test_shitu.py 演示了在 PP-ShiTuV2 产线中的完整用法通过pipeline.build_index(gallery_imgs..., gallery_label...)为图库构建索引再调用pipeline.predict(..., indexindex_data)完成识别。4.4.2 模型集成模型可以直接集成到 PaddleX 产线中也可以直接集成到您自己的项目中。1. 产线集成图像特征模块可以集成的 PaddleX 产线为通用图像特征产线coming soon只需要替换模型路径即可完成相关产线的图像特征模块的模型更新。在产线集成中你可以使用服务化部署来部署你得到的模型。产线的完整配置参考 PP-ShiTuV2.yaml其中SubModules.Recognition段通过model_name: PP-ShiTuV2_rec挂载特征提取模型model_dir置为null表示使用官方权重替换为本地路径即可更新为自训模型。2. 模块集成您产出的权重可以直接集成到图像特征模块中可以参考快速集成的 Python 示例代码只需要将模型替换为你训练得到的模型路径即可即在使用create_model时传入model_dir./output/best_model/inference。您也可以利用 PaddleX 高性能推理插件来优化您模型的推理过程进一步提升效率详细的流程请参考 PaddleX高性能推理指南。五、小结PaddleX 图像特征模块提供了一条“特征提取模型 二次开发 产线集成”的完整链路开箱即用时可选用官方PP-ShiTuV2_rec系列模型快速拿到 512 维 L2 归一化特征向量追求更高精度时可基于ShiTuRecDataset数据格式完成数据集校验、格式转换、划分、训练、评估与推理的完整闭环最终产物既能替换进 PP-ShiTuV2 产线也能以create_model方式直接集成进自有项目。理解“特征向量输出 检索模块消费”这一分工是正确使用本模块的关键。赞分享人工智能大模型低代码计算机视觉深度学习NLP模型推理服务RAG【免费下载链接】PaddleXAll-in-One Development Tool based on PaddlePaddle项目地址https://gitcode.com/paddlepaddle/PaddleX点击查看免费下载相关推荐PaddleX 人脸特征提取模块使用教程PaddleX 人脸特征提取模块使用教程 概述 人脸特征提取是计算机视觉领域的重要任务之一广泛应用于人脸识别、身份验证等场景。PaddleX 提供了高效易用的人工智能大模型低代码计算机视觉深度学习模型推理服务DINOv2特征提取管道从图像预处理到特征向量的完整流程DINOv2特征提取管道从图像预处理到特征向量的完整流程 你是否曾经遇到过这样的困境想要使用强大的视觉特征提取模型却不知道从何开始面对复杂的深度学习框架人工智能计算机视觉深度学习预训练基础模型PaddleX 图像特征任务数据标注教程用 Labelme 构建 ShiTuRecDataset 特征检索数据集PaddleX 图像特征任务数据标注教程用 Labelme 构建 ShiTuRecDataset 特征检索数据集 本文是基于飞桨 PaddleX 全流程开发工人工智能大模型低代码计算机视觉深度学习NLP模型推理服务RAG微调语音上一篇react-native-ui-kitten中的加载状态Spinner组件动画定制下一篇告别APP切换烦恼一个应用聚合四大直播平台让你简简单单看直播创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表