Kaynağa Gözat

add cls_pipelines docs (#2943)

zhangyubo0722 9 ay önce
ebeveyn
işleme
ff3c43d9b9

+ 184 - 89
docs/pipeline_usage/tutorials/cv_pipelines/image_classification.md

@@ -677,14 +677,14 @@ comments: true
 <p><b>注:以上精度指标为 <a href="https://www.image-net.org/index.php">ImageNet-1k</a> 验证集 Top1 Acc。所有模型 GPU 推理耗时基于 NVIDIA Tesla T4 机器,精度类型为 FP32, CPU 推理速度基于 Intel(R) Xeon(R) Gold 5117 CPU @ 2.00GHz,线程数为8,精度类型为 FP32。</b></p></details>
 
 ## 2. 快速开始
-PaddleX 所提供的预训练的模型产线均可以快速体验效果,你可以在线体验通用图像分类产线的效果,也可以在本地使用命令行或 Python 体验通用图像分类产线的效果。
+PaddleX 所提供的模型产线均可以快速体验效果,你可以在星河社区线体验通用图像分类产线的效果,也可以在本地使用命令行或 Python 体验通用图像分类产线的效果。
 
 ### 2.1 在线体验
 您可以[在线体验](https://aistudio.baidu.com/community/app/100061/webUI)通用图像分类产线的效果,用官方提供的 demo 图片进行识别,例如:
 
 <img src="https://raw.githubusercontent.com/cuicheng01/PaddleX_doc_images/main/images/pipelines/image_classification/02.png">
 
-如果您对产线运行的效果满意,可以直接对产线进行集成部署,如果不满意,您可以利用私有数据<b>对产线中的模型进行在线微调</b>。
+如果您对产线运行的效果满意,可以直接进行集成部署。您可以选择从云端下载部署包也可以参考[2.2节本地体验](#22-本地体验)中的方法进行本地部署。果对效果不满意,您可以利用私有数据<b>对产线中的模型进行微调训练</b>。如果您具备本地训练的硬件资源,可以直接在本地开展训练;如果没有,星河零代码平台提供了一键式训练服务,无需编写代码,只需上传数据后,即可一键启动训练任务。
 
 ### 2.2 本地体验
 在本地使用通用图像分类产线前,请确保您已经按照[PaddleX本地安装教程](../../../installation/installation.md)完成了PaddleX的wheel包安装。
@@ -695,41 +695,24 @@ PaddleX 所提供的预训练的模型产线均可以快速体验效果,你可
 ```bash
 paddlex --pipeline image_classification --input general_image_classification_001.jpg --device gpu:0
 ```
-参数说明:
+相关的参数说明可以参考[2.2.2 Python脚本方式集成](#222-python脚本方式集成)中的参数说明。
+
+运行后,会将结果打印到终端上,结果如下:
 
 ```
---pipeline:产线名称,此处为图像分类产线
---input:待处理的输入图片的本地路径或URL
---device 使用的GPU序号(例如gpu:0表示使用第0块GPU,gpu:1,2表示使用第1、2块GPU),也可选择使用CPU(--device cpu)
+{'res': {'input_path': 'general_image_classification_001.jpg', 'page_index': None, 'class_ids': array([296, 170, 356, 258, 248], dtype=int32), 'scores': array([0.62736, 0.03752, 0.03256, 0.0323 , 0.03194], dtype=float32), 'label_names': ['ice bear, polar bear, Ursus Maritimus, Thalarctos maritimus', 'Irish wolfhound', 'weasel', 'Samoyed, Samoyede', 'Eskimo dog, husky']}}
 ```
 
-在执行上述 Python 脚本时,加载的是默认的图像分类产线配置文件,若您需要自定义配置文件,可执行如下命令获取:
-
-<details><summary> 👉点击展开</summary>
-
-<pre><code>paddlex --get_pipeline_config image_classification
-</code></pre>
-<p>执行后,图像分类产线配置文件将被保存在当前路径。若您希望自定义保存位置,可执行如下命令(假设自定义保存位置为 <code>./my_path</code> ):</p>
-<pre><code>paddlex --get_pipeline_config image_classification --save_path ./my_path
-</code></pre>
-<p>获取产线配置文件后,可将 <code>--pipeline</code> 替换为配置文件保存路径,即可使配置文件生效。例如,若配置文件保存路径为 <code>./image_classification.yaml</code>,只需执行:</p>
-<pre><code class="language-bash">paddlex --pipeline ./image_classification.yaml --input general_image_classification_001.jpg --device gpu:0
-</code></pre>
-<p>其中,<code>--model</code>、<code>--device</code> 等参数无需指定,将使用配置文件中的参数。若依然指定了参数,将以指定的参数为准。</p></details>
+运行结果参数说明可以参考[2.2.2 Python脚本方式集成](#222-python脚本方式集成)中的结果解释。
 
-运行后,得到的结果为
+可视化结果保存在`save_path`下,其中图像分类的可视化结果如下:
 
-```
-{'input_path': 'general_image_classification_001.jpg', 'class_ids': [296, 170, 356, 258, 248], 'scores': [0.62736, 0.03752, 0.03256, 0.0323, 0.03194], 'label_names': ['ice bear, polar bear, Ursus Maritimus, Thalarctos maritimus', 'Irish wolfhound', 'weasel', 'Samoyed, Samoyede', 'Eskimo dog, husky']}
-```
 <img src="https://raw.githubusercontent.com/cuicheng01/PaddleX_doc_images/main/images/pipelines/image_classification/03.png">
 
-可视化图片默认不进行保存,您可以通过 `--save_path` 自定义保存路径,随后所有结果将被保存在指定路径下。
-
 #### 2.2.2 Python脚本方式集成
-几行代码即可完成产线的快速推理,以通用图像分类产线为例
+* 上述命令行是为了快速体验查看效果,一般来说,在项目中,往往需要通过代码集成,您可以通过几行代码即可完成产线的快速推理,推理代码如下:
 
-```
+```python
 from paddlex import create_pipeline
 
 pipeline = create_pipeline(pipeline="image_classification")
@@ -737,14 +720,13 @@ pipeline = create_pipeline(pipeline="image_classification")
 output = pipeline.predict("general_image_classification_001.jpg")
 for res in output:
     res.print() ## 打印预测的结构化输出
-    res.save_to_img("./output/") ## 保存结果可视化图像
-    res.save_to_json("./output/") ## 保存预测的结构化输出
+    res.save_to_img(save_path="./output/") ## 保存结果可视化图像
+    res.save_to_json(save_path="./output/") ## 保存预测的结构化输出
 ```
-得到的结果与命令行方式相同。
 
 在上述 Python 脚本中,执行了如下几个步骤:
 
-(1)实例化 `create_pipeline` 实例化产线对象:具体参数说明如下:
+(1)通过 `create_pipeline()` 实例化通用图像分类产线对象,具体参数说明如下:
 
 <table>
 <thead>
@@ -760,13 +742,13 @@ for res in output:
 <td><code>pipeline</code></td>
 <td>产线名称或是产线配置文件路径。如为产线名称,则必须为 PaddleX 所支持的产线。</td>
 <td><code>str</code></td>
-<td></td>
+<td>None</td>
 </tr>
 <tr>
 <td><code>device</code></td>
-<td>产线模型推理设备。支持:“gpu”,“cpu”。</td>
+<td>产线推理设备。支持指定GPU具体卡号,如“gpu:0”,其他硬件具体卡号,如“npu:0”,CPU如“cpu”。</td>
 <td><code>str</code></td>
-<td><code>gpu</code></td>
+<td><code>gpu:0</code></td>
 </tr>
 <tr>
 <td><code>use_hpip</code></td>
@@ -776,85 +758,181 @@ for res in output:
 </tr>
 </tbody>
 </table>
-(2)调用图像分类产线对象的 `predict` 方法进行推理预测:`predict` 方法参数为`x`,用于输入待预测数据,支持多种输入方式,具体示例如下:
+(2)调用图像分类产线对象的 `predict()` 方法进行推理预测。该方法将返回一个 `generator`。以下是 `predict()` 方法的参数及其说明:
+
+<table>
+<thead>
+<tr>
+<th>参数</th>
+<th>参数说明</th>
+<th>参数类型</th>
+<th>可选项</th>
+<th>默认值</th>
+</tr>
+</thead>
+<tr>
+<td><code>input</code></td>
+<td>待预测数据,支持多种输入类型,必填</td>
+<td><code>Python Var|str|list</code></td>
+<td>
+<ul>
+  <li><b>Python Var</b>:如 <code>numpy.ndarray</code> 表示的图像数据</li>
+  <li><b>str</b>:如图像文件的本地路径:<code>/root/data/img.jpg</code>;<b>如URL链接</b>,如图像文件的网络URL:<a href = "https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_image_classification_001.jpg">示例</a>;<b>如本地目录</b>,该目录下需包含待预测图像,如本地路径:<code>/root/data/</code></li>
+  <li><b>List</b>:列表元素需为上述类型数据,如<code>[numpy.ndarray, numpy.ndarray]</code>,<code>[\"/root/data/img1.jpg\", \"/root/data/img2.jpg\"]</code>,<code>[\"/root/data1\", \"/root/data2\"]</code></li>
+</ul>
+</td>
+<td><code>None</code></td>
+</tr>
+<tr>
+<td><code>device</code></td>
+<td>产线推理设备</td>
+<td><code>str|None</code></td>
+<td>
+<ul>
+  <li><b>CPU</b>:如 <code>cpu</code> 表示使用 CPU 进行推理;</li>
+  <li><b>GPU</b>:如 <code>gpu:0</code> 表示使用第 1 块 GPU 进行推理;</li>
+  <li><b>NPU</b>:如 <code>npu:0</code> 表示使用第 1 块 NPU 进行推理;</li>
+  <li><b>XPU</b>:如 <code>xpu:0</code> 表示使用第 1 块 XPU 进行推理;</li>
+  <li><b>MLU</b>:如 <code>mlu:0</code> 表示使用第 1 块 MLU 进行推理;</li>
+  <li><b>DCU</b>:如 <code>dcu:0</code> 表示使用第 1 块 DCU 进行推理;</li>
+  <li><b>None</b>:如果设置为 <code>None</code>, 将默认使用产线初始化的该参数值,初始化时,会优先使用本地的 GPU 0号设备,如果没有,则使用 CPU 设备;</li>
+</ul>
+</td>
+<td><code>None</code></td>
+</tr>
+<tr>
+<td><code>topk</code></td>
+<td>预测结果的前<code>topk</code>值,如果不指定,将默认使用PaddleX官方模型配置</td>
+<td><code>int</code></td>
+<td>
+<ul>
+  <li><b>int</b>,如 5 ,表示打印(返回)预测结果的前<code>5</code>个类别和对应的分类概率</li>
+</ul>
+</td>
+<td>5</td>
+</tr>
+</tbody>
+</table>
+(3)对预测结果进行处理,每个样本的预测结果均为`dict`类型,且支持打印、保存为图片、保存为`json`文件的操作:
 
 <table>
 <thead>
 <tr>
+<th>方法</th>
+<th>方法说明</th>
+<th>参数</th>
 <th>参数类型</th>
 <th>参数说明</th>
+<th>默认值</th>
 </tr>
 </thead>
-<tbody>
 <tr>
-<td>Python Var</td>
-<td>支持直接传入Python变量,如numpy.ndarray表示的图像数据。</td>
+<td rowspan = "3"><code>print()</code></td>
+<td rowspan = "3">打印结果到终端</td>
+<td><code>format_json</code></td>
+<td><code>bool</code></td>
+<td>是否对输出内容进行使用 <code>JSON</code> 缩进格式化</td>
+<td><code>True</code></td>
+</tr>
+<tr>
+<td><code>indent</code></td>
+<td><code>int</code></td>
+<td>指定缩进级别,以美化输出的 <code>JSON</code> 数据,使其更具可读性,仅当 <code>format_json</code> 为 <code>True</code> 时有效</td>
+<td>4</td>
 </tr>
 <tr>
-<td>str</td>
-<td>支持传入待预测数据文件路径,如图像文件的本地路径:<code>/root/data/img.jpg</code>。</td>
+<td><code>ensure_ascii</code></td>
+<td><code>bool</code></td>
+<td>控制是否将非 <code>ASCII</code> 字符转义为 <code>Unicode</code>。设置为 <code>True</code> 时,所有非 <code>ASCII</code> 字符将被转义;<code>False</code> 则保留原始字符,仅当<code>format_json</code>为<code>True</code>时有效</td>
+<td><code>False</code></td>
 </tr>
 <tr>
-<td>str</td>
-<td>支持传入待预测数据文件URL,如图像文件的网络URL:<a href="https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_image_classification_001.jpg">示例</a>。</td>
+<td rowspan = "3"><code>save_to_json()</code></td>
+<td rowspan = "3">将结果保存为json格式的文件</td>
+<td><code>save_path</code></td>
+<td><code>str</code></td>
+<td>保存的文件路径,当为目录时,保存文件命名与输入文件类型命名一致</td>
+<td>无</td>
 </tr>
 <tr>
-<td>str</td>
-<td>支持传入本地目录,该目录下需包含待预测数据文件,如本地路径:<code>/root/data/</code>。</td>
+<td><code>indent</code></td>
+<td><code>int</code></td>
+<td>指定缩进级别,以美化输出的 <code>JSON</code> 数据,使其更具可读性,仅当 <code>format_json</code> 为 <code>True</code> 时有效</td>
+<td>4</td>
 </tr>
 <tr>
-<td>dict</td>
-<td>支持传入字典类型,字典的key需与具体任务对应,如图像分类任务对应\"img\",字典的val支持上述类型数据,例如:<code>{\"img\": \"/root/data1\"}</code>。</td>
+<td><code>ensure_ascii</code></td>
+<td><code>bool</code></td>
+<td>控制是否将非 <code>ASCII</code> 字符转义为 <code>Unicode</code>。设置为 <code>True</code> 时,所有非 <code>ASCII</code> 字符将被转义;<code>False</code> 则保留原始字符,仅当<code>format_json</code>为<code>True</code>时有效</td>
+<td><code>False</code></td>
 </tr>
 <tr>
-<td>list</td>
-<td>支持传入列表,列表元素需为上述类型数据,如<code>[numpy.ndarray, numpy.ndarray],[\"/root/data/img1.jpg\", \"/root/data/img2.jpg\"]</code>,<code>[\"/root/data1\", \"/root/data2\"]</code>,<code>[{\"img\": \"/root/data1\"}, {\"img\": \"/root/data2/img.jpg\"}]</code>。</td>
+<td><code>save_to_img()</code></td>
+<td>将结果保存为图像格式的文件</td>
+<td><code>save_path</code></td>
+<td><code>str</code></td>
+<td>保存的文件路径,支持目录或文件路径</td>
+<td>无</td>
 </tr>
-</tbody>
 </table>
-(3)调用`predict`方法获取预测结果:`predict` 方法为`generator`,因此需要通过调用获得预测结果,`predict`方法以batch为单位对数据进行预测,因此预测结果为list形式表示的一组预测结果。
 
-(4)对预测结果进行处理:每个样本的预测结果均为`dict`类型,且支持打印,或保存为文件,支持保存的类型与具体产线相关,如:
+- 调用`print()` 方法会将结果打印到终端,打印到终端的内容解释如下:
+
+    - `input_path`: `(str)` 待预测图像的输入路径。
+    - `class_ids`: `(List[numpy.ndarray])` 表示预测结果的类别id。
+    - `scores`: `(List[numpy.ndarray])` 表示预测结果的置信度。
+    - `label_names`: `(List[str])` 表示预测结果的类别名称。
+
+- 调用`save_to_json()` 方法会将上述内容保存到指定的`save_path`中,如果指定为目录,则保存的路径为`save_path/{your_img_basename}.json`,如果指定为文件,则直接保存到该文件中。由于json文件不支持保存numpy数组,因此会将其中的`numpy.array`类型转换为列表形式。
+- 调用`save_to_img()` 方法会将可视化结果保存到指定的`save_path`中,如果指定为目录,则保存的路径为`save_path/{your_img_basename}_res.{your_img_extension}`,如果指定为文件,则直接保存到该文件中。(产线通常包含较多结果图片,不建议直接指定为具体的文件路径,否则多张图会被覆盖,仅保留最后一张图)
+
+* 此外,也支持通过属性获取带结果的可视化图像和预测结果,具体如下:
 
 <table>
 <thead>
 <tr>
-<th>方法</th>
-<th>说明</th>
-<th>方法参数</th>
+<th>属性</th>
+<th>属性说明</th>
 </tr>
 </thead>
-<tbody>
 <tr>
-<td>print</td>
-<td>打印结果到终端</td>
-<td><code>- format_json</code>:bool类型,是否对输出内容进行使用json缩进格式化,默认为True;<br/><code>- indent</code>:int类型,json格式化设置,仅当format_json为True时有效,默认为4;<br/><code>- ensure_ascii</code>:bool类型,json格式化设置,仅当format_json为True时有效,默认为False;</td>
+<td rowspan = "1"><code>json</code></td>
+<td rowspan = "1">获取预测的 <code>json</code> 格式的结果</td>
 </tr>
 <tr>
-<td>save_to_json</td>
-<td>将结果保存为json格式的文件</td>
-<td><code>- save_path</code>:str类型,保存的文件路径,当为目录时,保存文件命名与输入文件类型命名一致;<br/><code>- indent</code>:int类型,json格式化设置,默认为4;<br/><code>- ensure_ascii</code>:bool类型,json格式化设置,默认为False;</td>
+<td rowspan = "2"><code>img</code></td>
+<td rowspan = "2">获取格式为 <code>dict</code> 的可视化图像</td>
 </tr>
-<tr>
-<td>save_to_img</td>
-<td>将结果保存为图像格式的文件</td>
-<td><code>- save_path</code>:str类型,保存的文件路径,当为目录时,保存文件命名与输入文件类型命名一致;</td>
-</tr>
-</tbody>
 </table>
-若您获取了配置文件,即可对图像分类产线各项配置进行自定义,只需要修改 `create_pipeline` 方法中的 `pipeline` 参数值为产线配置文件路径即可。
 
-例如,若您的配置文件保存在 `./my_path/image_classification*.yaml` ,则只需执行:
+- `json` 属性获取的预测结果为dict类型的数据,相关内容与调用 `save_to_json()` 方法保存的内容一致。
+- `img` 属性返回的预测结果是一个字典类型的数据。其中,键为 `res` 对应的值是`Image.Image` 对象:一个用于显示分类结果的可视化图像。
+
+此外,您可以获取图像分类产线配置文件,并加载配置文件进行预测。可执行如下命令将结果保存在 `my_path` 中:
 
 ```
+paddlex --get_pipeline_config image_classification --save_path ./my_path
+```
+
+若您获取了配置文件,即可对OCR产线各项配置进行自定义,只需要修改 `create_pipeline` 方法中的 `pipeline` 参数值为产线配置文件路径即可。示例如下:
+
+```python
 from paddlex import create_pipeline
+
 pipeline = create_pipeline(pipeline="./my_path/image_classification.yaml")
-output = pipeline.predict("general_image_classification_001.jpg")
+
+output = pipeline.predict(
+    input="./general_image_classification_001.jpg",
+)
 for res in output:
-    res.print() ## 打印预测的结构化输出
-    res.save_to_img("./output/") ## 保存结果可视化图像
-    res.save_to_json("./output/") ## 保存预测的结构化输出
+    res.print()
+    res.save_to_img("./output/")
+    res.save_to_json("./output/")
+
 ```
+
+<b>注:</b> 配置文件中的参数为产线初始化参数,如果希望更改通用图像分类产线初始化参数,可以直接修改配置文件中的参数,并加载配置文件进行预测。同时,CLI 预测也支持传入配置文件,`--pipeline` 指定配置文件的路径即可。
+
 ## 3. 开发集成/部署
 如果产线可以达到您对产线推理速度和精度的要求,您可以直接进行开发集成/部署。
 
@@ -1420,34 +1498,51 @@ print_r($result[&quot;categories&quot;]);
 如果通用图像分类产线提供的默认模型权重在您的场景中,精度或速度不满意,您可以尝试利用<b>您自己拥有的特定领域或应用场景的数据</b>对现有模型进行进一步的<b>微调</b>,以提升通用图像分类产线的在您的场景中的识别效果。
 
 ### 4.1 模型微调
-由于通用图像分类产线包含图像分类模块,如果模型产线的效果不及预期,那么您需要参考[图像分类模块开发教程](../../../module_usage/tutorials/cv_modules/image_classification.md)中的[二次开发](../../../module_usage/tutorials/cv_modules/image_classification.md#四二次开发)章节,使用您的私有数据集对图像分类模型进行微调。
+
+由于通用图像分类产线包含图像图像分类模块,如果模型产线的效果不及预期,需要参考以下表格中对应的微调教程链接进行模型微调。
+
+<table>
+  <thead>
+    <tr>
+      <th>情形</th>
+      <th>微调模块</th>
+      <th>微调参考链接</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>多标签分类效果不准</td>
+      <td>多标签分类模块</td>
+      <td><a href="../../../module_usage/tutorials/cv_modules/image_classification.md">链接</a></td>
+    </tr>
+  </tbody>
+</table>
 
 ### 4.2 模型应用
 当您使用私有数据集完成微调训练后,可获得本地模型权重文件。
 
 若您需要使用微调后的模型权重,只需对产线配置文件做修改,将微调后模型权重的本地路径替换至产线配置文件中的对应位置即可:
 
-```
-......
-Pipeline:
-  model: PP-LCNet_x1_0  #可修改为微调后模型的本地路径
-  device: "gpu"
-  batch_size: 1
-......
+```yaml
+SubModules:
+  ImageClassification:
+    module_name: image_classification
+    model_name: PP-LCNet_x0_5
+    model_dir: null
+    batch_size: 4
+    topk: 5
 ```
 随后, 参考本地体验中的命令行方式或 Python 脚本方式,加载修改后的产线配置文件即可。
 
 ##  5. 多硬件支持
-PaddleX 支持英伟达 GPU、昆仑芯 XPU、昇腾 NPU和寒武纪 MLU 等多种主流硬件设备,<b>仅需修改 `--device` 参数</b>即可完成不同硬件之间的无缝切换。
-
-例如,您使用英伟达 GPU 进行图像分类产线的推理,使用的命令为:
+PaddleX 支持英伟达 GPU、昆仑芯 XPU、昇腾 NPU和寒武纪 MLU 等多种主流硬件设备,<b>仅需修改 `--device`参数</b>即可完成不同硬件之间的无缝切换。
 
-```bash
-paddlex --pipeline image_classification --input general_image_classification_001.jpg --device gpu:0
-```
-此时,若您想将硬件切换为昇腾 NPU,仅需将 `--device` 修改为 npu:0 即可:
+例如,您使用昇腾 NPU 进行通用图像分类产线的推理,使用的 Python 命令为:
 
 ```bash
-paddlex --pipeline image_classification --input general_image_classification_001.jpg --device npu:0
+paddlex --pipeline image_classification \
+        --input general_image_classification_001.jpg \
+        --save_path ./output \
+        --device npu:0
 ```
 若您想在更多种类的硬件上使用通用图像分类产线,请参考[PaddleX多硬件使用指南](../../../other_devices_support/multi_devices_use_guide.md)。

+ 188 - 91
docs/pipeline_usage/tutorials/cv_pipelines/image_multi_label_classification.md

@@ -64,47 +64,29 @@ PaddleX 支持在本地使用命令行或 Python 体验通用图像多标签分
 一行命令即可快速体验图像多标签分类产线效果,使用 [测试文件](https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_image_classification_001.jpg),并将 `--input` 替换为本地路径,进行预测
 
 ```bash
-paddlex --pipeline multi_label_image_classification --input general_image_classification_001.jpg --device gpu:0
+paddlex --pipeline image_multilabel_classification --input general_image_classification_001.jpg --device gpu:0
 ```
-参数说明:
+相关的参数说明可以参考[2.2.2 Python脚本方式集成](#222-python脚本方式集成)中的参数说明。
 
-```
---pipeline:产线名称,此处为图像多标签分类产线
---input:待处理的输入图片的本地路径或URL
---device 使用的GPU序号(例如gpu:0表示使用第0块GPU,gpu:1,2表示使用第1、2块GPU),也可选择使用CPU(--device cpu)
-```
-
-在执行上述 命令行时,加载的是默认的图像多标签分类产线配置文件,若您需要自定义配置文件,可执行如下命令获取:
+运行后,会将结果打印到终端上,结果如下:
 
-<details><summary> 👉点击展开</summary>
-
-<pre><code>paddlex --get_pipeline_config multi_label_image_classification
-</code></pre>
-<p>执行后,图像多标签分类产线配置文件将被保存在当前路径。若您希望自定义保存位置,可执行如下命令(假设自定义保存位置为 <code>./my_path</code> ):</p>
-<pre><code>paddlex --get_pipeline_config multi_label_image_classification --save_path ./my_path
-</code></pre>
-<p>获取产线配置文件后,可将 --pipeline 替换为配置文件保存路径,即可使配置文件生效。例如,若配置文件保存路径为 <code>./multi_label_image_classification.yaml</code>,只需执行:</p>
-<pre><code class="language-bash">paddlex --pipeline ./multi_label_image_classification.yaml --input general_image_classification_001.jpg --device gpu:0
-</code></pre>
-<p>其中,<code>--model</code>、<code>--device</code> 等参数无需指定,将使用配置文件中的参数。若依然指定了参数,将以指定的参数为准。</p></details>
+```bash
+{'res': {'input_path': 'test_imgs/general_image_classification_001.jpg', 'page_index': None, 'class_ids': array([21]), 'scores': array([0.99962]), 'label_names': ['bear']}}
+```
 
+运行结果参数说明可以参考[2.2.2 Python脚本方式集成](#222-python脚本方式集成)中的结果解释。
 
-运行后,得到的结果为
+可视化结果保存在`save_path`下,可视化结果如下:
 
-```
-{'input_path': 'general_image_classification_001.jpg', 'class_ids': [21, 0, 30, 24], 'scores': [0.99257, 0.70596, 0.63001, 0.57852], 'label_names': ['bear', 'person', 'skis', 'backpack']}
-```
 <img src="https://raw.githubusercontent.com/cuicheng01/PaddleX_doc_images/main/images/pipelines/image_multi_label_classification/02.png">
 
-可视化图片默认不进行保存,您可以通过 `--save_path` 自定义保存路径,随后所有结果将被保存在指定路径下。
-
 ### 2.2 Python脚本方式集成
-几行代码即可完成产线的快速推理,以通用图像多标签分类产线为例
+* 上述命令行是为了快速体验查看效果,一般来说,在项目中,往往需要通过代码集成,您可以通过几行代码即可完成产线的快速推理,推理代码如下:
 
-``` python
+```python
 from paddlex import create_pipeline
 
-pipeline = create_pipeline(pipeline="multi_label_image_classification")
+pipeline = create_pipeline(pipeline="image_multilabel_classification")
 
 output = pipeline.predict("general_image_classification_001.jpg")
 for res in output:
@@ -116,7 +98,7 @@ for res in output:
 
 在上述 Python 脚本中,执行了如下几个步骤:
 
-(1)实例化 `create_pipeline` 实例化产线对象:具体参数说明如下:
+(1)通过 `create_pipeline()` 实例化通用图像多标签分类产线对象,具体参数说明如下:
 
 <table>
 <thead>
@@ -132,13 +114,13 @@ for res in output:
 <td><code>pipeline</code></td>
 <td>产线名称或是产线配置文件路径。如为产线名称,则必须为 PaddleX 所支持的产线。</td>
 <td><code>str</code></td>
-<td></td>
+<td>None</td>
 </tr>
 <tr>
 <td><code>device</code></td>
-<td>产线模型推理设备。支持:“gpu”,“cpu”。</td>
+<td>产线推理设备。支持指定GPU具体卡号,如“gpu:0”,其他硬件具体卡号,如“npu:0”,CPU如“cpu”。</td>
 <td><code>str</code></td>
-<td><code>gpu</code></td>
+<td><code>gpu:0</code></td>
 </tr>
 <tr>
 <td><code>use_hpip</code></td>
@@ -148,85 +130,183 @@ for res in output:
 </tr>
 </tbody>
 </table>
-(2)调用多标签分类产线对象的 `predict` 方法进行推理预测:`predict` 方法参数为`x`,用于输入待预测数据,支持多种输入方式,具体示例如下:
+(2)调用通用图像多标签分类产线对象的 `predict()` 方法进行推理预测。该方法将返回一个 `generator`。以下是 `predict()` 方法的参数及其说明:
+
+<table>
+<thead>
+<tr>
+<th>参数</th>
+<th>参数说明</th>
+<th>参数类型</th>
+<th>可选项</th>
+<th>默认值</th>
+</tr>
+</thead>
+<tr>
+<td><code>input</code></td>
+<td>待预测数据,支持多种输入类型,必填</td>
+<td><code>Python Var|str|list</code></td>
+<td>
+<ul>
+  <li><b>Python Var</b>:如 <code>numpy.ndarray</code> 表示的图像数据</li>
+  <li><b>str</b>:如图像文件的本地路径:<code>/root/data/img.jpg</code>;<b>如URL链接</b>,如图像文件网络URL:<a href = "https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_image_classification_001.jpg">示例</a>;<b>如本地目录</b>,该目录下需包含待预测图像,如本地路径:<code>/root/data/</code></li>
+  <li><b>List</b>:列表元素需为上述类型数据,如<code>[numpy.ndarray, numpy.ndarray]</code>,<code>[\"/root/data/img1.jpg\", \"/root/data/img2.jpg\"]</code>,<code>[\"/root/data1\", \"/root/data2\"]</code></li>
+</ul>
+</td>
+<td><code>None</code></td>
+</tr>
+<tr>
+<td><code>device</code></td>
+<td>产线推理设备</td>
+<td><code>str|None</code></td>
+<td>
+<ul>
+  <li><b>CPU</b>:如 <code>cpu</code> 表示使用 CPU 进行推理;</li>
+  <li><b>GPU</b>:如 <code>gpu:0</code> 表示使用第 1 块 GPU 进行推理;</li>
+  <li><b>NPU</b>:如 <code>npu:0</code> 表示使用第 1 块 NPU 进行推理;</li>
+  <li><b>XPU</b>:如 <code>xpu:0</code> 表示使用第 1 块 XPU 进行推理;</li>
+  <li><b>MLU</b>:如 <code>mlu:0</code> 表示使用第 1 块 MLU 进行推理;</li>
+  <li><b>DCU</b>:如 <code>dcu:0</code> 表示使用第 1 块 DCU 进行推理;</li>
+  <li><b>None</b>:如果设置为 <code>None</code>, 将默认使用产线初始化的该参数值,初始化时,会优先使用本地的 GPU 0号设备,如果没有,则使用 CPU 设备;</li>
+</ul>
+</td>
+<td><code>None</code></td>
+</tr>
+<tr>
+<td><code>threshold</code></td>
+<td>多标签分类阈值</td>
+<td><code>float | dict | list| None</code></td>
+<td>
+<ul>
+  <li><b>float</b>:表示多标签分类统一阈值;</li>
+  <li><b>list</b>:如<code>[0.5, 0.45, 0.48, 0.4]</code>,表示按照<code>label list</code>顺序的不同类别阈值;</code>;</li>
+  <li><b>dict</b>:字典的key 为 <code>default</code> 和 <code>int</code> 类型,val 为 <code>float</code> 类型阈值,如<code>{"default": 0.5, 0: 0.45, 2: 0.48, 7: 0.4}</code>,<code>default</code> 表示多标签分类统一阈值,其他 <code>int</code> 类型表示对 cls_id 为0的类别应用阈值 0.45、cls_id 为 1 的类别应用阈值 0.48、cls_id 为 7 的类别应用阈值 0.4;</li>
+  <li><b>None</b>:如果设置为<code>None</code>, 将默认使用产线初始化的该参数值,初始化为<code>0.7</code>;</li>
+</ul>
+</td>
+<td><code>0.5</code></td>
+</tr>
+</table>
+3)对预测结果进行处理,每个样本的预测结果均为`dict`类型,且支持打印、保存为图片、保存为`json`文件的操作:
 
 <table>
 <thead>
 <tr>
+<th>方法</th>
+<th>方法说明</th>
+<th>参数</th>
 <th>参数类型</th>
 <th>参数说明</th>
+<th>默认值</th>
 </tr>
 </thead>
-<tbody>
 <tr>
-<td>Python Var</td>
-<td>支持直接传入Python变量,如numpy.ndarray表示的图像数据。</td>
+<td rowspan = "3"><code>print()</code></td>
+<td rowspan = "3">打印结果到终端</td>
+<td><code>format_json</code></td>
+<td><code>bool</code></td>
+<td>是否对输出内容进行使用 <code>JSON</code> 缩进格式化</td>
+<td><code>True</code></td>
+</tr>
+<tr>
+<td><code>indent</code></td>
+<td><code>int</code></td>
+<td>指定缩进级别,以美化输出的 <code>JSON</code> 数据,使其更具可读性,仅当 <code>format_json</code> 为 <code>True</code> 时有效</td>
+<td>4</td>
 </tr>
 <tr>
-<td>str</td>
-<td>支持传入待预测数据文件路径,如图像文件的本地路径:<code>/root/data/img.jpg</code>。</td>
+<td><code>ensure_ascii</code></td>
+<td><code>bool</code></td>
+<td>控制是否将非 <code>ASCII</code> 字符转义为 <code>Unicode</code>。设置为 <code>True</code> 时,所有非 <code>ASCII</code> 字符将被转义;<code>False</code> 则保留原始字符,仅当<code>format_json</code>为<code>True</code>时有效</td>
+<td><code>False</code></td>
 </tr>
 <tr>
-<td>str</td>
-<td>支持传入待预测数据文件URL,如图像文件的网络URL:<a href="https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_image_classification_001.jpg">示例</a>。</td>
+<td rowspan = "3"><code>save_to_json()</code></td>
+<td rowspan = "3">将结果保存为json格式的文件</td>
+<td><code>save_path</code></td>
+<td><code>str</code></td>
+<td>保存的文件路径,当为目录时,保存文件命名与输入文件类型命名一致</td>
+<td>无</td>
 </tr>
 <tr>
-<td>str</td>
-<td>支持传入本地目录,该目录下需包含待预测数据文件,如本地路径:<code>/root/data/</code>。</td>
+<td><code>indent</code></td>
+<td><code>int</code></td>
+<td>指定缩进级别,以美化输出的 <code>JSON</code> 数据,使其更具可读性,仅当 <code>format_json</code> 为 <code>True</code> 时有效</td>
+<td>4</td>
 </tr>
 <tr>
-<td>dict</td>
-<td>支持传入字典类型,字典的key需与具体任务对应,如图像分类任务对应\"img\",字典的val支持上述类型数据,例如:<code>{\"img\": \"/root/data1\"}</code>。</td>
+<td><code>ensure_ascii</code></td>
+<td><code>bool</code></td>
+<td>控制是否将非 <code>ASCII</code> 字符转义为 <code>Unicode</code>。设置为 <code>True</code> 时,所有非 <code>ASCII</code> 字符将被转义;<code>False</code> 则保留原始字符,仅当<code>format_json</code>为<code>True</code>时有效</td>
+<td><code>False</code></td>
 </tr>
 <tr>
-<td>list</td>
-<td>支持传入列表,列表元素需为上述类型数据,如<code>[numpy.ndarray, numpy.ndarray],[\"/root/data/img1.jpg\", \"/root/data/img2.jpg\"]</code>,<code>[\"/root/data1\", \"/root/data2\"]</code>,<code>[{\"img\": \"/root/data1\"}, {\"img\": \"/root/data2/img.jpg\"}]</code>。</td>
+<td><code>save_to_img()</code></td>
+<td>将结果保存为图像格式的文件</td>
+<td><code>save_path</code></td>
+<td><code>str</code></td>
+<td>保存的文件路径,支持目录或文件路径</td>
+<td>无</td>
 </tr>
-</tbody>
 </table>
-(3)调用`predict`方法获取预测结果:`predict` 方法为`generator`,因此需要通过调用获得预测结果,`predict`方法以batch为单位对数据进行预测,因此预测结果为list形式表示的一组预测结果。
 
-(4)对预测结果进行处理:每个样本的预测结果均为`dict`类型,且支持打印,或保存为文件,支持保存的类型与具体产线相关,如:
+- 调用`print()` 方法会将结果打印到终端,打印到终端的内容解释如下:
+
+    - `input_path`: `(str)` 待预测图像的输入路径。
+    - `class_ids`: `(List[numpy.ndarray])` 表示预测结果的类别id。
+    - `scores`: `(List[numpy.ndarray])` 表示预测结果的置信度。
+    - `label_names`: `(List[str])` 表示预测结果的类别名称。
+
+- 调用`save_to_json()` 方法会将上述内容保存到指定的`save_path`中,如果指定为目录,则保存的路径为`save_path/{your_img_basename}.json`,如果指定为文件,则直接保存到该文件中。由于json文件不支持保存numpy数组,因此会将其中的`numpy.array`类型转换为列表形式。
+- 调用`save_to_img()` 方法会将可视化结果保存到指定的`save_path`中,如果指定为目录,则保存的路径为`save_path/{your_img_basename}_res.{your_img_extension}`,如果指定为文件,则直接保存到该文件中。(产线通常包含较多结果图片,不建议直接指定为具体的文件路径,否则多张图会被覆盖,仅保留最后一张图)
+
+* 此外,也支持通过属性获取带结果的可视化图像和预测结果,具体如下:
 
 <table>
 <thead>
 <tr>
-<th>方法</th>
-<th>说明</th>
-<th>方法参数</th>
+<th>属性</th>
+<th>属性说明</th>
 </tr>
 </thead>
-<tbody>
-<tr>
-<td>print</td>
-<td>打印结果到终端</td>
-<td><code>- format_json</code>:bool类型,是否对输出内容进行使用json缩进格式化,默认为True;<br/><code>- indent</code>:int类型,json格式化设置,仅当format_json为True时有效,默认为4;<br/><code>- ensure_ascii</code>:bool类型,json格式化设置,仅当format_json为True时有效,默认为False;</td>
-</tr>
 <tr>
-<td>save_to_json</td>
-<td>将结果保存为json格式的文件</td>
-<td><code>- save_path</code>:str类型,保存的文件路径,当为目录时,保存文件命名与输入文件类型命名一致;<br/><code>- indent</code>:int类型,json格式化设置,默认为4;<br/><code>- ensure_ascii</code>:bool类型,json格式化设置,默认为False;</td>
+<td rowspan = "1"><code>json</code></td>
+<td rowspan = "1">获取预测的 <code>json</code> 格式的结果</td>
 </tr>
 <tr>
-<td>save_to_img</td>
-<td>将结果保存为图像格式的文件</td>
-<td><code>- save_path</code>:str类型,保存的文件路径,当为目录时,保存文件命名与输入文件类型命名一致;</td>
+<td rowspan = "2"><code>img</code></td>
+<td rowspan = "2">获取格式为 <code>dict</code> 的可视化图像</td>
 </tr>
-</tbody>
 </table>
-若您获取了配置文件,即可对图像多标签分类产线各项配置进行自定义,只需要修改 `create_pipeline` 方法中的 `pipeline` 参数值为产线配置文件路径即可。
 
-例如,若您的配置文件保存在 `./my_path/multi_label_image_classification.yaml` ,则只需执行:
+- `json` 属性获取的预测结果为dict类型的数据,相关内容与调用 `save_to_json()` 方法保存的内容一致。
+- `img` 属性返回的预测结果是一个字典类型的数据。其中,键为 `res` 对应的值是`Image.Image` 对象:一个用于显示属性识别结果的可视化图像。
+
+此外,您可以获取通用图像多标签分类产线配置文件,并加载配置文件进行预测。可执行如下命令将结果保存在 `my_path` 中:
+
+```
+paddlex --get_pipeline_config image_multilabel_classification --save_path ./my_path
+```
+
+若您获取了配置文件,即可对OCR产线各项配置进行自定义,只需要修改 `create_pipeline` 方法中的 `pipeline` 参数值为产线配置文件路径即可。示例如下:
 
-``` python
+```python
 from paddlex import create_pipeline
-pipeline = create_pipeline(pipeline="./my_path/multi_label_image_classification.yaml")
-output = pipeline.predict("general_image_classification_001.jpg")
+
+pipeline = create_pipeline(pipeline="./my_path/image_multilabel_classification.yaml")
+
+output = pipeline.predict(
+    input="./general_image_classification_001.jpg",
+)
 for res in output:
-    res.print() ## 打印预测的结构化输出
-    res.save_to_img("./output/") ## 保存结果可视化图像
-    res.save_to_json("./output/") ## 保存预测的结构化输出
+    res.print()
+    res.save_to_img("./output/")
+    res.save_to_json("./output/")
+
 ```
+
+<b>注:</b> 配置文件中的参数为产线初始化参数,如果希望更改通用图像多标签分类产线初始化参数,可以直接修改配置文件中的参数,并加载配置文件进行预测。同时,CLI 预测也支持传入配置文件,`--pipeline` 指定配置文件的路径即可。
+
 ## 3. 开发集成/部署
 如果产线可以达到您对产线推理速度和精度的要求,您可以直接进行开发集成/部署。
 
@@ -792,34 +872,51 @@ print_r($result[&quot;categories&quot;]);
 如果通用图像多标签分类产线提供的默认模型权重在您的场景中,精度或速度不满意,您可以尝试利用<b>您自己拥有的特定领域或应用场景的数据</b>对现有模型进行进一步的<b>微调</b>,以提升通用图像多标签分类产线的在您的场景中的识别效果。
 
 ### 4.1 模型微调
-由于通用图像多标签分类产线包含图像多标签分类模块,如果模型产线的效果不及预期,那么您需要参考[图像多标签分类模块开发教程](../../../module_usage/tutorials/cv_modules/image_multilabel_classification.md)中的[二次开发](../../../module_usage/tutorials/cv_modules/image_multilabel_classification.md#四二次开发)章节,使用您的私有数据集对图像多标签分类模型进行微调。
+
+由于通用图像多标签分类产线包含图像多标签分类模块,如果模型产线的效果不及预期,需要参考以下表格中对应的微调教程链接进行模型微调。
+
+<table>
+  <thead>
+    <tr>
+      <th>情形</th>
+      <th>微调模块</th>
+      <th>微调参考链接</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>多标签分类效果不准</td>
+      <td>多标签分类模块</td>
+      <td><a href="../../../module_usage/tutorials/cv_modules/image_multilabel_classification.md">链接</a></td>
+    </tr>
+  </tbody>
+</table>
 
 ### 4.2 模型应用
 当您使用私有数据集完成微调训练后,可获得本地模型权重文件。
 
 若您需要使用微调后的模型权重,只需对产线配置文件做修改,将微调后模型权重的本地路径替换至产线配置文件中的对应位置即可:
 
-``` python
-......
- Pipeline:
-  model: PP-LCNet_x1_0_ML   #可修改为微调后模型的本地路径
-  batch_size: 1
-  device: "gpu:0"
-......
+``` yaml
+pipeline_name: image_multilabel_classification
+
+SubModules:
+  ImageMultiLabelClassification:
+    module_name: image_multilabel_classification
+    model_name: PP-HGNetV2-B6_ML
+    model_dir: null
+    batch_size: 4
 ```
 随后, 参考本地体验中的命令行方式或 Python 脚本方式,加载修改后的产线配置文件即可。
 
 ##  5. 多硬件支持
-PaddleX 支持英伟达 GPU、昆仑芯 XPU、昇腾 NPU和寒武纪 MLU 等多种主流硬件设备,<b>仅需修改  `--device` 参数</b>即可完成不同硬件之间的无缝切换。
-
-例如,您使用英伟达 GPU 进行图像多标签分类产线的推理,使用的 Python 命令为:
+PaddleX 支持英伟达 GPU、昆仑芯 XPU、昇腾 NPU和寒武纪 MLU 等多种主流硬件设备,<b>仅需修改 `--device`参数</b>即可完成不同硬件之间的无缝切换。
 
-```bash
-paddlex --pipeline multi_label_image_classification --input general_image_classification_001.jpg --device gpu:0
-```
-此时,若您想将硬件切换为昇腾 NPU,仅需对 Python 命令中的 `--device` 修改为 npu:0 即可:
+例如,您使用昇腾 NPU 进行通用图像多标签分类产线的推理,使用的 Python 命令为:
 
 ```bash
-paddlex --pipeline multi_label_image_classification --input general_image_classification_001.jpg --device npu:0
+paddlex --pipeline image_multilabel_classification \
+        --input general_image_classification_001.jpg \
+        --device npu:0
 ```
-若您想在更多种类的硬件上使用通用图像多标签分类产线,请参考[PaddleX多硬件使用指南](../../../other_devices_support/multi_devices_use_guide.md)。
+若您想在更多种类的硬件上使用通用OCR产线,请参考[PaddleX多硬件使用指南](../../../other_devices_support/multi_devices_use_guide.md)。

+ 211 - 81
docs/pipeline_usage/tutorials/cv_pipelines/pedestrian_attribute_recognition.md

@@ -7,7 +7,7 @@ comments: true
 ## 1. 行人属性识别产线介绍
 行人属性识别是计算机视觉系统中的关键功能,用于在图像或视频中定位并标记行人的特定特征,如性别、年龄、衣物颜色和款式等。该任务不仅要求准确检测出行人,还需识别每个行人的详细属性信息。行人属性识别产线是定位并识别行人属性的端到端串联系统,广泛应用于智慧城市和安防监控等领域,可显著提升系统的智能化水平和管理效率。
 
-<img src="https://raw.githubusercontent.com/cuicheng01/PaddleX_doc_images/refs/heads/main/images/pipelines/pedestrian_attribute_recognition/01.jpg">
+<img src="https://raw.githubusercontent.com/cuicheng01/PaddleX_doc_images/refs/heads/main/images/pipelines/pedestrian_attribute_recognition/pedestrian_attribute.png">
 
 <b>行人属性识别产线中包含了行人检测模块和行人属性识别模块</b>,每个模块中包含了若干模型,具体使用哪些模型,您可以根据下边的 benchmark 数据来选择。<b>如您更考虑模型精度,请选择精度较高的模型,如您更考虑模型推理速度,请选择推理速度较快的模型,如您更考虑模型存储大小,请选择存储大小较小的模型</b>。
 
@@ -69,7 +69,7 @@ comments: true
 <p><b>注:以上精度指标为 PaddleX 内部自建数据集 mA。GPU 推理耗时基于 NVIDIA Tesla T4 机器,精度类型为 FP32, CPU 推理速度基于 Intel(R) Xeon(R) Gold 5117 CPU @ 2.00GHz,线程数为 8,精度类型为 FP32。</b></p>
 
 ## 2. 快速开始
-PaddleX 所提供的预训练的模型产线均可以快速体验效果,你可以在线体验行人属性识别产线的效果,也可以在本地使用命令行或 Python 体验行人属性识别产线的效果。
+PaddleX 所提供的模型产线可以在本地使用命令行或 Python 体验行人属性识别产线的效果。
 
 ### 2.1 在线体验
 暂不支持在线体验
@@ -83,30 +83,22 @@ PaddleX 所提供的预训练的模型产线均可以快速体验效果,你可
 ```bash
 paddlex --pipeline pedestrian_attribute_recognition --input pedestrian_attribute_002.jpg --device gpu:0
 ```
-参数说明:
+相关的参数说明可以参考[2.2.2 Python脚本方式集成](#222-python脚本方式集成)中的参数说明。
 
-```
---pipeline:产线名称,此处为行人属性识别产线
---input:待处理的输入图片的本地路径或URL
---device 使用的GPU序号(例如gpu:0表示使用第0块GPU,gpu:1,2表示使用第1、2块GPU),也可选择使用CPU(--device cpu)
+运行后,会将结果打印到终端上,结果如下:
+
+```bash
+{'res': {'input_path': 'pedestrian_attribute_002.jpg', 'boxes': [{'labels': ['Trousers(长裤)', 'Age18-60(年龄在18-60岁之间)', 'LongCoat(长外套)', 'Side(侧面)'], 'cls_scores': array([0.99965, 0.99963, 0.98866, 0.9624 ]), 'det_score': 0.9795178771018982, 'coordinate': [87.24581, 322.5872, 546.2697, 1039.9852]}, {'labels': ['Trousers(长裤)', 'LongCoat(长外套)', 'Front(面朝前)', 'Age18-60(年龄在18-60岁之间)'], 'cls_scores': array([0.99996, 0.99872, 0.93379, 0.71614]), 'det_score': 0.967143177986145, 'coordinate': [737.91626, 306.287, 1150.5961, 1034.2979]}, {'labels': ['Trousers(长裤)', 'LongCoat(长外套)', 'Age18-60(年龄在18-60岁之间)', 'Side(侧面)'], 'cls_scores': array([0.99996, 0.99514, 0.98726, 0.96224]), 'det_score': 0.9645745754241943, 'coordinate': [399.45944, 281.9107, 869.5312, 1038.9962]}]}}
 ```
 
-在执行上述 Python 脚本时,加载的是默认的行人属性识别产线配置文件,若您需要自定义配置文件,可执行如下命令获取:
+运行结果参数说明可以参考[2.2.2 Python脚本方式集成](#222-python脚本方式集成)中的结果解释。
 
-<details><summary> 👉点击展开</summary>
+可视化结果保存在`save_path`下,可视化结果如下:
 
-<pre><code>paddlex --get_pipeline_config pedestrian_attribute_recognition
-</code></pre>
-<p>执行后,行人属性识别产线配置文件将被保存在当前路径。若您希望自定义保存位置,可执行如下命令(假设自定义保存位置为 <code>./my_path</code> ):</p>
-<pre><code>paddlex --get_pipeline_config pedestrian_attribute_recognition --save_path ./my_path
-</code></pre>
-<p>获取产线配置文件后,可将 <code>--pipeline</code> 替换为配置文件保存路径,即可使配置文件生效。例如,若配置文件保存路径为 <code>./pedestrian_attribute_recognition.yaml</code>,只需执行:</p>
-<pre><code class="language-bash">paddlex --pipeline ./pedestrian_attribute_recognition.yaml --input pedestrian_attribute_002.jpg --device gpu:0
-</code></pre>
-<p>其中,<code>--model</code>、<code>--device</code> 等参数无需指定,将使用配置文件中的参数。若依然指定了参数,将以指定的参数为准。</p></details>
+<img src="https://raw.githubusercontent.com/cuicheng01/PaddleX_doc_images/refs/heads/main/images/pipelines/pedestrian_attribute_recognition/01.jpg">
 
 #### 2.2.2 Python脚本方式集成
-几行代码即可完成产线的快速推理,以行人属性识别产线为例
+* 上述命令行是为了快速体验查看效果,一般来说,在项目中,往往需要通过代码集成,您可以通过几行代码即可完成产线的快速推理,推理代码如下:
 
 ```python
 from paddlex import create_pipeline
@@ -123,7 +115,7 @@ for res in output:
 
 在上述 Python 脚本中,执行了如下几个步骤:
 
-(1)实例化 `create_pipeline` 实例化产线对象:具体参数说明如下:
+(1)通过 `create_pipeline()` 实例化行人属性识别产线对象,具体参数说明如下:
 
 <table>
 <thead>
@@ -139,13 +131,13 @@ for res in output:
 <td><code>pipeline</code></td>
 <td>产线名称或是产线配置文件路径。如为产线名称,则必须为 PaddleX 所支持的产线。</td>
 <td><code>str</code></td>
-<td></td>
+<td>None</td>
 </tr>
 <tr>
 <td><code>device</code></td>
-<td>产线模型推理设备。支持:“gpu”,“cpu”。</td>
+<td>产线推理设备。支持指定GPU具体卡号,如“gpu:0”,其他硬件具体卡号,如“npu:0”,CPU如“cpu”。</td>
 <td><code>str</code></td>
-<td><code>gpu</code></td>
+<td><code>gpu:0</code></td>
 </tr>
 <tr>
 <td><code>use_hpip</code></td>
@@ -155,86 +147,198 @@ for res in output:
 </tr>
 </tbody>
 </table>
-(2)调用行人属性识别产线对象的 `predict` 方法进行推理预测:`predict` 方法参数为`x`,用于输入待预测数据,支持多种输入方式,具体示例如下:
+(2)调用行人属性识别产线对象的 `predict()` 方法进行推理预测。该方法将返回一个 `generator`。以下是 `predict()` 方法的参数及其说明:
+
+<table>
+<thead>
+<tr>
+<th>参数</th>
+<th>参数说明</th>
+<th>参数类型</th>
+<th>可选项</th>
+<th>默认值</th>
+</tr>
+</thead>
+<tr>
+<td><code>input</code></td>
+<td>待预测数据,支持多种输入类型,必填</td>
+<td><code>Python Var|str|list</code></td>
+<td>
+<ul>
+  <li><b>Python Var</b>:如 <code>numpy.ndarray</code> 表示的图像数据</li>
+  <li><b>str</b>:如图像文件的本地路径:<code>/root/data/img.jpg</code>;<b>如URL链接</b>,如图像文件网络URL:<a href = "https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/pedestrian_attribute_002.jpg">示例</a>;<b>如本地目录</b>,该目录下需包含待预测图像,如本地路径:<code>/root/data/</code></li>
+  <li><b>List</b>:列表元素需为上述类型数据,如<code>[numpy.ndarray, numpy.ndarray]</code>,<code>[\"/root/data/img1.jpg\", \"/root/data/img2.jpg\"]</code>,<code>[\"/root/data1\", \"/root/data2\"]</code></li>
+</ul>
+</td>
+<td><code>None</code></td>
+</tr>
+<tr>
+<td><code>device</code></td>
+<td>产线推理设备</td>
+<td><code>str|None</code></td>
+<td>
+<ul>
+  <li><b>CPU</b>:如 <code>cpu</code> 表示使用 CPU 进行推理;</li>
+  <li><b>GPU</b>:如 <code>gpu:0</code> 表示使用第 1 块 GPU 进行推理;</li>
+  <li><b>NPU</b>:如 <code>npu:0</code> 表示使用第 1 块 NPU 进行推理;</li>
+  <li><b>XPU</b>:如 <code>xpu:0</code> 表示使用第 1 块 XPU 进行推理;</li>
+  <li><b>MLU</b>:如 <code>mlu:0</code> 表示使用第 1 块 MLU 进行推理;</li>
+  <li><b>DCU</b>:如 <code>dcu:0</code> 表示使用第 1 块 DCU 进行推理;</li>
+  <li><b>None</b>:如果设置为 <code>None</code>, 将默认使用产线初始化的该参数值,初始化时,会优先使用本地的 GPU 0号设备,如果没有,则使用 CPU 设备;</li>
+</ul>
+</td>
+<td><code>None</code></td>
+</tr>
+<tr>
+<td><code>det_threshold</code></td>
+<td>行人检测可视化阈值</td>
+<td><code>float | None</code></td>
+<td>
+<ul>
+  <li><b>float</b>:如<code>0.5</code>, 表示过滤掉所有阈值小于<code>0.5</code>的目标框;</li>
+  <li><b>None</b>:如果设置为<code>None</code>, 将默认使用产线初始化的该参数值,初始化为<code>0.5</code>;</li>
+</ul>
+</td>
+<td><code>0.5</code></td>
+</tr>
+<tr>
+<td><code>cls_threshold</code></td>
+<td>行人属性预测阈值</td>
+<td><code>float | dict | list| None</code></td>
+<td>
+<ul>
+  <li><b>float</b>:表示属性识别的统一阈值;</li>
+  <li><b>list</b>:如<code>[0.5, 0.45, 0.48, 0.4]</code>,表示按照<code>label list</code>顺序的不同类别阈值;</code>;</li>
+  <li><b>dict</b>:字典的key 为 <code>default</code> 和 <code>int</code> 类型,val 为 <code>float</code> 类型阈值,如<code>{"default": 0.5, 0: 0.45, 2: 0.48, 7: 0.4}</code>,<code>default</code> 表示多标签分类的统一阈值,其他 <code>int</code> 类型表示对 cls_id 为0的类别应用阈值 0.45、cls_id 为 1 的类别应用阈值 0.48、cls_id 为 7 的类别应用阈值 0.4;</li>
+  <li><b>None</b>:如果设置为<code>None</code>, 将默认使用产线初始化的该参数值,初始化为<code>0.7</code>;</li>
+</ul>
+</td>
+<td><code>0.7</code></td>
+</tr>
+</table>
+3)对预测结果进行处理,每个样本的预测结果均为`dict`类型,且支持打印、保存为图片、保存为`json`文件的操作:
 
 <table>
 <thead>
 <tr>
+<th>方法</th>
+<th>方法说明</th>
+<th>参数</th>
 <th>参数类型</th>
 <th>参数说明</th>
+<th>默认值</th>
 </tr>
 </thead>
-<tbody>
 <tr>
-<td>Python Var</td>
-<td>支持直接传入Python变量,如numpy.ndarray表示的图像数据。</td>
+<td rowspan = "3"><code>print()</code></td>
+<td rowspan = "3">打印结果到终端</td>
+<td><code>format_json</code></td>
+<td><code>bool</code></td>
+<td>是否对输出内容进行使用 <code>JSON</code> 缩进格式化</td>
+<td><code>True</code></td>
 </tr>
 <tr>
-<td>str</td>
-<td>支持传入待预测数据文件路径,如图像文件的本地路径:<code>/root/data/img.jpg</code>。</td>
+<td><code>indent</code></td>
+<td><code>int</code></td>
+<td>指定缩进级别,以美化输出的 <code>JSON</code> 数据,使其更具可读性,仅当 <code>format_json</code> 为 <code>True</code> 时有效</td>
+<td>4</td>
 </tr>
 <tr>
-<td>str</td>
-<td>支持传入待预测数据文件URL,如图像文件的网络URL:<a href="https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/pedestrian_attribute_002.jpg">示例</a>。</td>
+<td><code>ensure_ascii</code></td>
+<td><code>bool</code></td>
+<td>控制是否将非 <code>ASCII</code> 字符转义为 <code>Unicode</code>。设置为 <code>True</code> 时,所有非 <code>ASCII</code> 字符将被转义;<code>False</code> 则保留原始字符,仅当<code>format_json</code>为<code>True</code>时有效</td>
+<td><code>False</code></td>
 </tr>
 <tr>
-<td>str</td>
-<td>支持传入本地目录,该目录下需包含待预测数据文件,如本地路径:<code>/root/data/</code>。</td>
+<td rowspan = "3"><code>save_to_json()</code></td>
+<td rowspan = "3">将结果保存为json格式的文件</td>
+<td><code>save_path</code></td>
+<td><code>str</code></td>
+<td>保存的文件路径,当为目录时,保存文件命名与输入文件类型命名一致</td>
+<td>无</td>
 </tr>
 <tr>
-<td>dict</td>
-<td>支持传入字典类型,字典的key需与具体任务对应,如行人属性识别任务对应\"img\",字典的val支持上述类型数据,例如:<code>{\"img\": \"/root/data1\"}</code>。</td>
+<td><code>indent</code></td>
+<td><code>int</code></td>
+<td>指定缩进级别,以美化输出的 <code>JSON</code> 数据,使其更具可读性,仅当 <code>format_json</code> 为 <code>True</code> 时有效</td>
+<td>4</td>
 </tr>
 <tr>
-<td>list</td>
-<td>支持传入列表,列表元素需为上述类型数据,如<code>[numpy.ndarray, numpy.ndarray],[\"/root/data/img1.jpg\", \"/root/data/img2.jpg\"]</code>,<code>[\"/root/data1\", \"/root/data2\"]</code>,<code>[{\"img\": \"/root/data1\"}, {\"img\": \"/root/data2/img.jpg\"}]</code>。</td>
+<td><code>ensure_ascii</code></td>
+<td><code>bool</code></td>
+<td>控制是否将非 <code>ASCII</code> 字符转义为 <code>Unicode</code>。设置为 <code>True</code> 时,所有非 <code>ASCII</code> 字符将被转义;<code>False</code> 则保留原始字符,仅当<code>format_json</code>为<code>True</code>时有效</td>
+<td><code>False</code></td>
+</tr>
+<tr>
+<td><code>save_to_img()</code></td>
+<td>将结果保存为图像格式的文件</td>
+<td><code>save_path</code></td>
+<td><code>str</code></td>
+<td>保存的文件路径,支持目录或文件路径</td>
+<td>无</td>
 </tr>
-</tbody>
 </table>
-(3)调用`predict`方法获取预测结果:`predict` 方法为`generator`,因此需要通过调用获得预测结果,`predict`方法以batch为单位对数据进行预测,因此预测结果为list形式表示的一组预测结果。
 
-(4)对预测结果进行处理:每个样本的预测结果均为`dict`类型,且支持打印,或保存为文件,支持保存的类型与具体产线相关,如:
+- 调用`print()` 方法会将结果打印到终端,打印到终端的内容解释如下:
+
+    - `input_path`: `(str)` 待预测图像的输入路径。
+    - `boxes`: `(List[Dict])` 表示预测结果的类别id。
+    - `labels`: `(List[str])` 表示预测结果的类别名称。
+    - `cls_scores`: `(List[numpy.ndarray])` 表示属性预测结果的置信度。
+    - `det_scores`: `(float)` 表示行人检测框的置信度。
+
+- 调用`save_to_json()` 方法会将上述内容保存到指定的`save_path`中,如果指定为目录,则保存的路径为`save_path/{your_img_basename}.json`,如果指定为文件,则直接保存到该文件中。由于json文件不支持保存numpy数组,因此会将其中的`numpy.array`类型转换为列表形式。
+- 调用`save_to_img()` 方法会将可视化结果保存到指定的`save_path`中,如果指定为目录,则保存的路径为`save_path/{your_img_basename}_res.{your_img_extension}`,如果指定为文件,则直接保存到该文件中。(产线通常包含较多结果图片,不建议直接指定为具体的文件路径,否则多张图会被覆盖,仅保留最后一张图)
+
+* 此外,也支持通过属性获取带结果的可视化图像和预测结果,具体如下:
 
 <table>
 <thead>
 <tr>
-<th>方法</th>
-<th>说明</th>
-<th>方法参数</th>
+<th>属性</th>
+<th>属性说明</th>
 </tr>
 </thead>
-<tbody>
-<tr>
-<td>print</td>
-<td>打印结果到终端</td>
-<td><code>- format_json</code>:bool类型,是否对输出内容进行使用json缩进格式化,默认为True;<br/><code>- indent</code>:int类型,json格式化设置,仅当format_json为True时有效,默认为4;<br/><code>- ensure_ascii</code>:bool类型,json格式化设置,仅当format_json为True时有效,默认为False;</td>
-</tr>
 <tr>
-<td>save_to_json</td>
-<td>将结果保存为json格式的文件</td>
-<td><code>- save_path</code>:str类型,保存的文件路径,当为目录时,保存文件命名与输入文件类型命名一致;<br/><code>- indent</code>:int类型,json格式化设置,默认为4;<br/><code>- ensure_ascii</code>:bool类型,json格式化设置,默认为False;</td>
+<td rowspan = "1"><code>json</code></td>
+<td rowspan = "1">获取预测的 <code>json</code> 格式的结果</td>
 </tr>
 <tr>
-<td>save_to_img</td>
-<td>将结果保存为图像格式的文件</td>
-<td><code>- save_path</code>:str类型,保存的文件路径,当为目录时,保存文件命名与输入文件类型命名一致;</td>
+<td rowspan = "2"><code>img</code></td>
+<td rowspan = "2">获取格式为 <code>dict</code> 的可视化图像</td>
 </tr>
-</tbody>
 </table>
-若您获取了配置文件,即可对行人属性识别产线各项配置进行自定义,只需要修改 `create_pipeline` 方法中的 `pipeline` 参数值为产线配置文件路径即可。
 
-例如,若您的配置文件保存在 `./my_path/pedestrian_attribute_recognition*.yaml` ,则只需执行:
+- `json` 属性获取的预测结果为dict类型的数据,相关内容与调用 `save_to_json()` 方法保存的内容一致。
+- `img` 属性返回的预测结果是一个字典类型的数据。其中,键为 `res` 对应的值是`Image.Image` 对象:一个用于显示属性识别结果的可视化图像。
+
+此外,您可以获取行人属性识别产线配置文件,并加载配置文件进行预测。可执行如下命令将结果保存在 `my_path` 中:
+
+```
+paddlex --get_pipeline_config pedestrian_attribute_recognition --save_path ./my_path
+```
+
+若您获取了配置文件,即可对OCR产线各项配置进行自定义,只需要修改 `create_pipeline` 方法中的 `pipeline` 参数值为产线配置文件路径即可。示例如下:
 
 ```python
 from paddlex import create_pipeline
+
 pipeline = create_pipeline(pipeline="./my_path/pedestrian_attribute_recognition.yaml")
-output = pipeline.predict("pedestrian_attribute_002.jpg")
+
+output = pipeline.predict(
+    input="./pedestrian_attribute_002.jpg",
+)
 for res in output:
-    res.print() ## 打印预测的结构化输出
-    res.save_to_img("./output/") ## 保存结果可视化图像
-    res.save_to_json("./output/") ## 保存预测的结构化输出
+    res.print()
+    res.save_to_img("./output/")
+    res.save_to_json("./output/")
+
 ```
+
+<b>注:</b> 配置文件中的参数为产线初始化参数,如果希望更改行人属性识别产线初始化参数,可以直接修改配置文件中的参数,并加载配置文件进行预测。同时,CLI 预测也支持传入配置文件,`--pipeline` 指定配置文件的路径即可。
+
 ## 3. 开发集成/部署
+
 如果产线可以达到您对产线推理速度和精度的要求,您可以直接进行开发集成/部署。
 
 若您需要将产线直接应用在您的Python项目中,可以参考 [2.2.2 Python脚本方式](#222-python脚本方式集成)中的示例代码。
@@ -459,36 +563,62 @@ print(result[&quot;pedestrians&quot;])
 如果行人属性识别产线提供的默认模型权重在您的场景中,精度或速度不满意,您可以尝试利用<b>您自己拥有的特定领域或应用场景的数据</b>对现有模型进行进一步的<b>微调</b>,以提升行人属性识别产线的在您的场景中的识别效果。
 
 ### 4.1 模型微调
-由于行人属性识别产线包含行人属性识别模块和行人检测模块,如果模型产线的效果不及预期可能来自于其中任何一个模块。
-您可以对识别效果差的图片进行分析,如果在分析过程中发现有较多的主体目标未被检测出来,那么可能是行人检测模型存在不足那么您需要参考[行人检测模块开发教程](../../../module_usage/tutorials/cv_modules/human_detection.md)中的[二次开发](../../../module_usage/tutorials/cv_modules/human_detection.md#四二次开发)章节,使用您的私有数据集对行人检测模型进行微调;如果检测出来的主体属性识别错误,那么您需要参考[行人属性识别模块开发教程](../../../module_usage/tutorials/cv_modules/pedestrian_attribute_recognition.md)中的[二次开发](../../../module_usage/tutorials/cv_modules/pedestrian_attribute_recognition.md#四二次开发)章节,使用您的私有数据集对行人属性识别模型进行微调。
+由于行人属性识别产线包含行人属性识别模块和行人检测模块,如果模型产线的效果不及预期,可能来自于其中任何一个模块。您可以对识别效果差的图片进行分析,进而确定是哪个模块存在问题,并参考以下表格中对应的微调教程链接进行模型微调。
+
+<table>
+  <thead>
+    <tr>
+      <th>情形</th>
+      <th>微调模块</th>
+      <th>微调参考链接</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>行人检测不准</td>
+      <td>行人检测模块</td>
+      <td><a href="../../../module_usage/tutorials/cv_modules/human_detection.md">链接</a></td>
+    </tr>
+    <tr>
+      <td>属性识别不准</td>
+      <td>行人属性识别模块</td>
+      <td><a href="../../../module_usage/tutorials/cv_modules/pedestrian_attribute_recognition.md">链接</a></td>
+    </tr>
+  </tbody>
+</table>
 
 ### 4.2 模型应用
 当您使用私有数据集完成微调训练后,可获得本地模型权重文件。
 
 若您需要使用微调后的模型权重,只需对产线配置文件做修改,将微调后模型权重的本地路径替换至产线配置文件中的对应位置即可:
 
-```
-......
-Pipeline:
-  det_model: PP-YOLOE-L_human
-  cls_model: PP-LCNet_x1_0_pedestrian_attribute  #可修改为微调后模型的本地路径
-  device: "gpu"
-  batch_size: 1
-......
+```yaml
+pipeline_name: pedestrian_attribute_recognition
+
+SubModules:
+  Detection:
+    module_name: object_detection
+    model_name: PP-YOLOE-L_human
+    model_dir: null
+    batch_size: 1
+    threshold: 0.5
+  Classification:
+    module_name: multilabel_classification
+    model_name: PP-LCNet_x1_0_pedestrian_attribute
+    model_dir: null
+    batch_size: 1
+    threshold: 0.7
 ```
 随后, 参考本地体验中的命令行方式或 Python 脚本方式,加载修改后的产线配置文件即可。
 
 ##  5. 多硬件支持
-PaddleX 支持英伟达 GPU、昆仑芯 XPU、昇腾 NPU和寒武纪 MLU 等多种主流硬件设备,<b>仅需修改 `--device` 参数</b>即可完成不同硬件之间的无缝切换。
-
-例如,您使用英伟达 GPU 进行行人属性识别产线的推理,使用的命令为:
+PaddleX 支持英伟达 GPU、昆仑芯 XPU、昇腾 NPU和寒武纪 MLU 等多种主流硬件设备,<b>仅需修改 `--device`参数</b>即可完成不同硬件之间的无缝切换。
 
-```bash
-paddlex --pipeline pedestrian_attribute_recognition --input pedestrian_attribute_002.jpg --device gpu:0
-```
-此时,若您想将硬件切换为昇腾 NPU,仅需将 `--device` 修改为 npu:0 即可:
+例如,您使用昇腾 NPU 进行行人属性识别产线的推理,使用的 Python 命令为:
 
 ```bash
-paddlex --pipeline pedestrian_attribute_recognition --input pedestrian_attribute_002.jpg --device npu:0
+paddlex --pipeline pedestrian_attribute_recognition \
+        --input pedestrian_attribute_002.jpg \
+        --device npu:0
 ```
-若您想在更多种类的硬件上使用行人属性识别产线,请参考[PaddleX多硬件使用指南](../../../other_devices_support/multi_devices_use_guide.md)。
+若您想在更多种类的硬件上使用通用OCR产线,请参考[PaddleX多硬件使用指南](../../../other_devices_support/multi_devices_use_guide.md)。

+ 210 - 80
docs/pipeline_usage/tutorials/cv_pipelines/vehicle_attribute_recognition.md

@@ -7,7 +7,7 @@ comments: true
 ## 1. 车辆属性识别产线介绍
 车辆属性识别是计算机视觉系统中的重要组成部分,其主要任务是在图像或视频中定位并标记出车辆的特定属性,如车辆类型、颜色、车牌号等。该任务不仅要求准确检测出车辆,还需识别每辆车的详细属性信息。车辆属性识别产线是定位并识别车辆属性的端到端串联系统,广泛应用于交通管理、智能停车、安防监控、自动驾驶等领域,显著提升了系统效率和智能化水平,并推动了相关行业的发展与创新。
 
-<img src="https://raw.githubusercontent.com/cuicheng01/PaddleX_doc_images/refs/heads/main/images/pipelines/vehicle_attribute_recognition/01.jpg">
+<img src="https://raw.githubusercontent.com/cuicheng01/PaddleX_doc_images/refs/heads/main/images/pipelines/vehicle_attribute_recognition/vehicle_attribute_1.jpg">
 
 <b>车辆属性识别产线中包含了车辆检测模块和车辆属性识别模块</b>,每个模块中包含了若干模型,具体使用哪些模型,您可以根据下边的 benchmark 数据来选择。<b>如您更考虑模型精度,请选择精度较高的模型,如您更考虑模型推理速度,请选择推理速度较快的模型,如您更考虑模型存储大小,请选择存储大小较小的模型</b>。
 
@@ -66,7 +66,7 @@ comments: true
 <p><b>注:以上精度指标为 VeRi 数据集mA。GPU 推理耗时基于 NVIDIA Tesla T4 机器,精度类型为 FP32, CPU 推理速度基于 Intel(R) Xeon(R) Gold 5117 CPU @ 2.00GHz,线程数为 8,精度类型为 FP32。</b></p>
 
 ## 2. 快速开始
-PaddleX 所提供的预训练的模型产线均可以快速体验效果,你可以在线体验车辆属性识别产线的效果,也可以在本地使用命令行或 Python 体验车辆属性识别产线的效果。
+PaddleX 所提供的模型产线可以在本地使用命令行或 Python 体验车辆属性识别产线的效果。
 
 ### 2.1 在线体验
 暂不支持在线体验
@@ -80,30 +80,22 @@ PaddleX 所提供的预训练的模型产线均可以快速体验效果,你可
 ```bash
 paddlex --pipeline vehicle_attribute_recognition --input vehicle_attribute_002.jpg --device gpu:0
 ```
-参数说明:
+相关的参数说明可以参考[2.2.2 Python脚本方式集成](#222-python脚本方式集成)中的参数说明。
 
-```
---pipeline:产线名称,此处为车辆属性识别产线
---input:待处理的输入图片的本地路径或URL
---device 使用的GPU序号(例如gpu:0表示使用第0块GPU,gpu:1,2表示使用第1、2块GPU),也可选择使用CPU(--device cpu)
+运行后,会将结果打印到终端上,结果如下:
+
+```bash
+{'res': {'input_path': 'vehicle_attribute_002.jpg', 'boxes': [{'labels': ['red(红色)', 'sedan(轿车)'], 'cls_scores': array([0.96375, 0.94025]), 'det_score': 0.9774094820022583, 'coordinate': [196.32553, 302.3847, 639.3131, 655.57904]}, {'labels': ['suv(SUV)', 'brown(棕色)'], 'cls_scores': array([0.99968, 0.99317]), 'det_score': 0.9705657958984375, 'coordinate': [769.4419, 278.8417, 1401.0217, 641.3569]}]}}
 ```
 
-在执行上述 Python 脚本时,加载的是默认的车辆属性识别产线配置文件,若您需要自定义配置文件,可执行如下命令获取:
+运行结果参数说明可以参考[2.2.2 Python脚本方式集成](#222-python脚本方式集成)中的结果解释。
 
-<details><summary> 👉点击展开</summary>
+可视化结果保存在`save_path`下,可视化结果如下:
 
-<pre><code>paddlex --get_pipeline_config vehicle_attribute_recognition
-</code></pre>
-<p>执行后,车辆属性识别产线配置文件将被保存在当前路径。若您希望自定义保存位置,可执行如下命令(假设自定义保存位置为 <code>./my_path</code> ):</p>
-<pre><code>paddlex --get_pipeline_config vehicle_attribute_recognition --save_path ./my_path
-</code></pre>
-<p>获取产线配置文件后,可将 <code>--pipeline</code> 替换为配置文件保存路径,即可使配置文件生效。例如,若配置文件保存路径为 <code>./vehicle_attribute_recognition.yaml</code>,只需执行:</p>
-<pre><code class="language-bash">paddlex --pipeline ./vehicle_attribute_recognition.yaml --input vehicle_attribute_002.jpg --device gpu:0
-</code></pre>
-<p>其中,<code>--model</code>、<code>--device</code> 等参数无需指定,将使用配置文件中的参数。若依然指定了参数,将以指定的参数为准。</p></details>
+<img src="https://raw.githubusercontent.com/cuicheng01/PaddleX_doc_images/refs/heads/main/images/pipelines/vehicle_attribute_recognition/01.jpg">
 
 #### 2.2.2 Python脚本方式集成
-几行代码即可完成产线的快速推理,以车辆属性识别产线为例
+* 上述命令行是为了快速体验查看效果,一般来说,在项目中,往往需要通过代码集成,您可以通过几行代码即可完成产线的快速推理,推理代码如下:
 
 ```python
 from paddlex import create_pipeline
@@ -120,7 +112,7 @@ for res in output:
 
 在上述 Python 脚本中,执行了如下几个步骤:
 
-(1)实例化 `create_pipeline` 实例化产线对象:具体参数说明如下:
+(1)通过 `create_pipeline()` 实例化车辆属性识别产线对象,具体参数说明如下:
 
 <table>
 <thead>
@@ -136,13 +128,13 @@ for res in output:
 <td><code>pipeline</code></td>
 <td>产线名称或是产线配置文件路径。如为产线名称,则必须为 PaddleX 所支持的产线。</td>
 <td><code>str</code></td>
-<td></td>
+<td>None</td>
 </tr>
 <tr>
 <td><code>device</code></td>
-<td>产线模型推理设备。支持:“gpu”,“cpu”。</td>
+<td>产线推理设备。支持指定GPU具体卡号,如“gpu:0”,其他硬件具体卡号,如“npu:0”,CPU如“cpu”。</td>
 <td><code>str</code></td>
-<td><code>gpu</code></td>
+<td><code>gpu:0</code></td>
 </tr>
 <tr>
 <td><code>use_hpip</code></td>
@@ -152,86 +144,198 @@ for res in output:
 </tr>
 </tbody>
 </table>
-(2)调用车辆属性识别产线对象的 `predict` 方法进行推理预测:`predict` 方法参数为`x`,用于输入待预测数据,支持多种输入方式,具体示例如下
+(2)调用车辆属性识别产线对象的 `predict()` 方法进行推理预测。该方法将返回一个 `generator`。以下是 `predict()` 方法的参数及其说明
 
 <table>
 <thead>
 <tr>
+<th>参数</th>
+<th>参数说明</th>
+<th>参数类型</th>
+<th>可选项</th>
+<th>默认值</th>
+</tr>
+</thead>
+<tr>
+<td><code>input</code></td>
+<td>待预测数据,支持多种输入类型,必填</td>
+<td><code>Python Var|str|list</code></td>
+<td>
+<ul>
+  <li><b>Python Var</b>:如 <code>numpy.ndarray</code> 表示的图像数据</li>
+  <li><b>str</b>:如图像文件的本地路径:<code>/root/data/img.jpg</code>;<b>如URL链接</b>,如图像文件网络URL:<a href = "https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/vehicle_attribute_002.jpg">示例</a>;<b>如本地目录</b>,该目录下需包含待预测图像,如本地路径:<code>/root/data/</code></li>
+  <li><b>List</b>:列表元素需为上述类型数据,如<code>[numpy.ndarray, numpy.ndarray]</code>,<code>[\"/root/data/img1.jpg\", \"/root/data/img2.jpg\"]</code>,<code>[\"/root/data1\", \"/root/data2\"]</code></li>
+</ul>
+</td>
+<td><code>None</code></td>
+</tr>
+<tr>
+<td><code>device</code></td>
+<td>产线推理设备</td>
+<td><code>str|None</code></td>
+<td>
+<ul>
+  <li><b>CPU</b>:如 <code>cpu</code> 表示使用 CPU 进行推理;</li>
+  <li><b>GPU</b>:如 <code>gpu:0</code> 表示使用第 1 块 GPU 进行推理;</li>
+  <li><b>NPU</b>:如 <code>npu:0</code> 表示使用第 1 块 NPU 进行推理;</li>
+  <li><b>XPU</b>:如 <code>xpu:0</code> 表示使用第 1 块 XPU 进行推理;</li>
+  <li><b>MLU</b>:如 <code>mlu:0</code> 表示使用第 1 块 MLU 进行推理;</li>
+  <li><b>DCU</b>:如 <code>dcu:0</code> 表示使用第 1 块 DCU 进行推理;</li>
+  <li><b>None</b>:如果设置为 <code>None</code>, 将默认使用产线初始化的该参数值,初始化时,会优先使用本地的 GPU 0号设备,如果没有,则使用 CPU 设备;</li>
+</ul>
+</td>
+<td><code>None</code></td>
+</tr>
+<tr>
+<td><code>det_threshold</code></td>
+<td>车辆检测可视化阈值</td>
+<td><code>float | None</code></td>
+<td>
+<ul>
+  <li><b>float</b>:如<code>0.5</code>, 表示过滤掉所有阈值小于<code>0.5</code>的目标框;</li>
+  <li><b>None</b>:如果设置为<code>None</code>, 将默认使用产线初始化的该参数值,初始化为<code>0.5</code>;</li>
+</ul>
+</td>
+<td><code>0.5</code></td>
+</tr>
+<tr>
+<td><code>cls_threshold</code></td>
+<td>车辆属性预测阈值</td>
+<td><code>float | dict | list| None</code></td>
+<td>
+<ul>
+  <li><b>float</b>:表示属性识别的统一阈值;</li>
+  <li><b>list</b>:如<code>[0.5, 0.45, 0.48, 0.4]</code>,表示按照<code>label list</code>顺序的不同类别阈值;</code>;</li>
+  <li><b>dict</b>:字典的key 为 <code>default</code> 和 <code>int</code> 类型,val 为 <code>float</code> 类型阈值,如<code>{"default": 0.5, 0: 0.45, 2: 0.48, 7: 0.4}</code>,<code>default</code> 表示属性识别的统一阈值,其他 <code>int</code> 类型表示对 cls_id 为0的类别应用阈值 0.45、cls_id 为 1 的类别应用阈值 0.48、cls_id 为 7 的类别应用阈值 0.4;</li>
+  <li><b>None</b>:如果设置为<code>None</code>, 将默认使用产线初始化的该参数值,初始化为<code>0.7</code>;</li>
+</ul>
+</td>
+<td><code>0.7</code></td>
+</tr>
+</table>
+3)对预测结果进行处理,每个样本的预测结果均为`dict`类型,且支持打印、保存为图片、保存为`json`文件的操作:
+
+<table>
+<thead>
+<tr>
+<th>方法</th>
+<th>方法说明</th>
+<th>参数</th>
 <th>参数类型</th>
 <th>参数说明</th>
+<th>默认值</th>
 </tr>
 </thead>
-<tbody>
 <tr>
-<td>Python Var</td>
-<td>支持直接传入Python变量,如numpy.ndarray表示的图像数据。</td>
+<td rowspan = "3"><code>print()</code></td>
+<td rowspan = "3">打印结果到终端</td>
+<td><code>format_json</code></td>
+<td><code>bool</code></td>
+<td>是否对输出内容进行使用 <code>JSON</code> 缩进格式化</td>
+<td><code>True</code></td>
+</tr>
+<tr>
+<td><code>indent</code></td>
+<td><code>int</code></td>
+<td>指定缩进级别,以美化输出的 <code>JSON</code> 数据,使其更具可读性,仅当 <code>format_json</code> 为 <code>True</code> 时有效</td>
+<td>4</td>
 </tr>
 <tr>
-<td>str</td>
-<td>支持传入待预测数据文件路径,如图像文件的本地路径:<code>/root/data/img.jpg</code>。</td>
+<td><code>ensure_ascii</code></td>
+<td><code>bool</code></td>
+<td>控制是否将非 <code>ASCII</code> 字符转义为 <code>Unicode</code>。设置为 <code>True</code> 时,所有非 <code>ASCII</code> 字符将被转义;<code>False</code> 则保留原始字符,仅当<code>format_json</code>为<code>True</code>时有效</td>
+<td><code>False</code></td>
 </tr>
 <tr>
-<td>str</td>
-<td>支持传入待预测数据文件URL,如图像文件的网络URL:<a href="https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/vehicle_attribute_002.jpg">示例</a>。</td>
+<td rowspan = "3"><code>save_to_json()</code></td>
+<td rowspan = "3">将结果保存为json格式的文件</td>
+<td><code>save_path</code></td>
+<td><code>str</code></td>
+<td>保存的文件路径,当为目录时,保存文件命名与输入文件类型命名一致</td>
+<td>无</td>
 </tr>
 <tr>
-<td>str</td>
-<td>支持传入本地目录,该目录下需包含待预测数据文件,如本地路径:<code>/root/data/</code>。</td>
+<td><code>indent</code></td>
+<td><code>int</code></td>
+<td>指定缩进级别,以美化输出的 <code>JSON</code> 数据,使其更具可读性,仅当 <code>format_json</code> 为 <code>True</code> 时有效</td>
+<td>4</td>
 </tr>
 <tr>
-<td>dict</td>
-<td>支持传入字典类型,字典的key需与具体任务对应,如车辆属性识别任务对应\"img\",字典的val支持上述类型数据,例如:<code>{\"img\": \"/root/data1\"}</code>。</td>
+<td><code>ensure_ascii</code></td>
+<td><code>bool</code></td>
+<td>控制是否将非 <code>ASCII</code> 字符转义为 <code>Unicode</code>。设置为 <code>True</code> 时,所有非 <code>ASCII</code> 字符将被转义;<code>False</code> 则保留原始字符,仅当<code>format_json</code>为<code>True</code>时有效</td>
+<td><code>False</code></td>
 </tr>
 <tr>
-<td>list</td>
-<td>支持传入列表,列表元素需为上述类型数据,如<code>[numpy.ndarray, numpy.ndarray],[\"/root/data/img1.jpg\", \"/root/data/img2.jpg\"]</code>,<code>[\"/root/data1\", \"/root/data2\"]</code>,<code>[{\"img\": \"/root/data1\"}, {\"img\": \"/root/data2/img.jpg\"}]</code>。</td>
+<td><code>save_to_img()</code></td>
+<td>将结果保存为图像格式的文件</td>
+<td><code>save_path</code></td>
+<td><code>str</code></td>
+<td>保存的文件路径,支持目录或文件路径</td>
+<td>无</td>
 </tr>
-</tbody>
 </table>
-(3)调用`predict`方法获取预测结果:`predict` 方法为`generator`,因此需要通过调用获得预测结果,`predict`方法以batch为单位对数据进行预测,因此预测结果为list形式表示的一组预测结果。
 
-(4)对预测结果进行处理:每个样本的预测结果均为`dict`类型,且支持打印,或保存为文件,支持保存的类型与具体产线相关,如:
+- 调用`print()` 方法会将结果打印到终端,打印到终端的内容解释如下:
+
+    - `input_path`: `(str)` 待预测图像的输入路径。
+    - `boxes`: `(List[Dict])` 表示预测结果的类别id。
+    - `labels`: `(List[str])` 表示预测结果的类别名称。
+    - `cls_scores`: `(List[numpy.ndarray])` 表示属性预测结果的置信度。
+    - `det_scores`: `(float)` 表示车辆检测框的置信度。
+
+- 调用`save_to_json()` 方法会将上述内容保存到指定的`save_path`中,如果指定为目录,则保存的路径为`save_path/{your_img_basename}.json`,如果指定为文件,则直接保存到该文件中。由于json文件不支持保存numpy数组,因此会将其中的`numpy.array`类型转换为列表形式。
+- 调用`save_to_img()` 方法会将可视化结果保存到指定的`save_path`中,如果指定为目录,则保存的路径为`save_path/{your_img_basename}_res.{your_img_extension}`,如果指定为文件,则直接保存到该文件中。(产线通常包含较多结果图片,不建议直接指定为具体的文件路径,否则多张图会被覆盖,仅保留最后一张图)
+
+* 此外,也支持通过属性获取带结果的可视化图像和预测结果,具体如下:
 
 <table>
 <thead>
 <tr>
-<th>方法</th>
-<th>说明</th>
-<th>方法参数</th>
+<th>属性</th>
+<th>属性说明</th>
 </tr>
 </thead>
-<tbody>
-<tr>
-<td>print</td>
-<td>打印结果到终端</td>
-<td><code>- format_json</code>:bool类型,是否对输出内容进行使用json缩进格式化,默认为True;<br/><code>- indent</code>:int类型,json格式化设置,仅当format_json为True时有效,默认为4;<br/><code>- ensure_ascii</code>:bool类型,json格式化设置,仅当format_json为True时有效,默认为False;</td>
-</tr>
 <tr>
-<td>save_to_json</td>
-<td>将结果保存为json格式的文件</td>
-<td><code>- save_path</code>:str类型,保存的文件路径,当为目录时,保存文件命名与输入文件类型命名一致;<br/><code>- indent</code>:int类型,json格式化设置,默认为4;<br/><code>- ensure_ascii</code>:bool类型,json格式化设置,默认为False;</td>
+<td rowspan = "1"><code>json</code></td>
+<td rowspan = "1">获取预测的 <code>json</code> 格式的结果</td>
 </tr>
 <tr>
-<td>save_to_img</td>
-<td>将结果保存为图像格式的文件</td>
-<td><code>- save_path</code>:str类型,保存的文件路径,当为目录时,保存文件命名与输入文件类型命名一致;</td>
+<td rowspan = "2"><code>img</code></td>
+<td rowspan = "2">获取格式为 <code>dict</code> 的可视化图像</td>
 </tr>
-</tbody>
 </table>
-若您获取了配置文件,即可对车辆属性识别产线各项配置进行自定义,只需要修改 `create_pipeline` 方法中的 `pipeline` 参数值为产线配置文件路径即可。
 
-例如,若您的配置文件保存在 `./my_path/vehicle_attribute_recognition.yaml` ,则只需执行:
+- `json` 属性获取的预测结果为dict类型的数据,相关内容与调用 `save_to_json()` 方法保存的内容一致。
+- `img` 属性返回的预测结果是一个字典类型的数据。其中,键为 `res` 对应的值是`Image.Image` 对象:一个用于显示属性识别结果的可视化图像。
+
+此外,您可以获取车辆属性识别产线配置文件,并加载配置文件进行预测。可执行如下命令将结果保存在 `my_path` 中:
+
+```
+paddlex --get_pipeline_config vehicle_attribute_recognition --save_path ./my_path
+```
+
+若您获取了配置文件,即可对OCR产线各项配置进行自定义,只需要修改 `create_pipeline` 方法中的 `pipeline` 参数值为产线配置文件路径即可。示例如下:
 
 ```python
 from paddlex import create_pipeline
+
 pipeline = create_pipeline(pipeline="./my_path/vehicle_attribute_recognition.yaml")
-output = pipeline.predict("vehicle_attribute_002.jpg")
+
+output = pipeline.predict(
+    input="./vehicle_attribute_002.jpg",
+)
 for res in output:
-    res.print() ## 打印预测的结构化输出
-    res.save_to_img("./output/") ## 保存结果可视化图像
-    res.save_to_json("./output/") ## 保存预测的结构化输出
+    res.print()
+    res.save_to_img("./output/")
+    res.save_to_json("./output/")
+
 ```
+
+<b>注:</b> 配置文件中的参数为产线初始化参数,如果希望更改车辆属性识别产线初始化参数,可以直接修改配置文件中的参数,并加载配置文件进行预测。同时,CLI 预测也支持传入配置文件,`--pipeline` 指定配置文件的路径即可。
+
 ## 3. 开发集成/部署
+
 如果产线可以达到您对产线推理速度和精度的要求,您可以直接进行开发集成/部署。
 
 若您需要将产线直接应用在您的Python项目中,可以参考 [2.2.2 Python脚本方式](#222-python脚本方式集成)中的示例代码。
@@ -456,8 +560,29 @@ print(result[&quot;vehicles&quot;])
 如果车辆属性识别产线提供的默认模型权重在您的场景中,精度或速度不满意,您可以尝试利用<b>您自己拥有的特定领域或应用场景的数据</b>对现有模型进行进一步的<b>微调</b>,以提升车辆属性识别产线的在您的场景中的识别效果。
 
 ### 4.1 模型微调
-由于车辆属性识别产线包含车辆属性识别模块和车辆检测模块,如果模型产线的效果不及预期可能来自于其中任何一个模块。
-您可以对识别效果差的图片进行分析,如果在分析过程中发现有较多的主体目标未被检测出来,那么可能是车辆检测模型存在不足那么您需要参考[车辆检测模块开发教程](../../../module_usage/tutorials/cv_modules/vehicle_detection.md)中的[二次开发](../../../module_usage/tutorials/cv_modules/vehicle_detection.md#四二次开发)章节,使用您的私有数据集对车辆检测模型进行微调;如果检测出来的主体属性识别错误,那么您需要参考[车辆属性识别模块开发教程](../../../module_usage/tutorials/cv_modules/vehicle_attribute_recognition.md)中的[二次开发](../../../module_usage/tutorials/cv_modules/vehicle_attribute_recognition.md#四二次开发)章节,使用您的私有数据集对车辆属性识别模型进行微调。
+由于车辆属性识别产线包含车辆属性识别模块和车辆检测模块,如果模型产线的效果不及预期,可能来自于其中任何一个模块。您可以对识别效果差的图片进行分析,进而确定是哪个模块存在问题,并参考以下表格中对应的微调教程链接进行模型微调。
+
+<table>
+  <thead>
+    <tr>
+      <th>情形</th>
+      <th>微调模块</th>
+      <th>微调参考链接</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>车辆检测不准</td>
+      <td>车辆检测模块</td>
+      <td><a href="../../../module_usage/tutorials/cv_modules/vehicle_detection.md">链接</a></td>
+    </tr>
+    <tr>
+      <td>属性识别不准</td>
+      <td>车辆属性识别模块</td>
+      <td><a href="../../../module_usage/tutorials/cv_modules/vehicle_attribute_recognition.md">链接</a></td>
+    </tr>
+  </tbody>
+</table>
 
 ### 4.2 模型应用
 当您使用私有数据集完成微调训练后,可获得本地模型权重文件。
@@ -465,27 +590,32 @@ print(result[&quot;vehicles&quot;])
 若您需要使用微调后的模型权重,只需对产线配置文件做修改,将微调后模型权重的本地路径替换至产线配置文件中的对应位置即可:
 
 ```
-......
-Pipeline:
-  det_model: PP-YOLOE-L_vehicle
-  cls_model: PP-LCNet_x1_0_vehicle_attribute  #可修改为微调后模型的本地路径
-  device: "gpu"
-  batch_size: 1
-......
+pipeline_name: vehicle_attribute_recognition
+
+SubModules:
+  Detection:
+    module_name: object_detection
+    model_name: PP-YOLOE-L_vehicle
+    model_dir: null
+    batch_size: 1
+    threshold: 0.5
+  Classification:
+    module_name: multilabel_classification
+    model_name: PP-LCNet_x1_0_vehicle_attribute
+    model_dir: null
+    batch_size: 1
+    threshold: 0.7
 ```
 随后, 参考本地体验中的命令行方式或 Python 脚本方式,加载修改后的产线配置文件即可。
 
 ##  5. 多硬件支持
-PaddleX 支持英伟达 GPU、昆仑芯 XPU、昇腾 NPU和寒武纪 MLU 等多种主流硬件设备,<b>仅需修改 `--device` 参数</b>即可完成不同硬件之间的无缝切换。
-
-例如,您使用英伟达 GPU 进行车辆属性识别产线的推理,使用的命令为:
+PaddleX 支持英伟达 GPU、昆仑芯 XPU、昇腾 NPU和寒武纪 MLU 等多种主流硬件设备,<b>仅需修改 `--device`参数</b>即可完成不同硬件之间的无缝切换。
 
-```bash
-paddlex --pipeline vehicle_attribute_recognition --input vehicle_attribute_002.jpg --device gpu:0
-```
-此时,若您想将硬件切换为昇腾 NPU,仅需将 `--device` 修改为 npu:0 即可:
+例如,您使用昇腾 NPU 进行车辆属性识别产线的推理,使用的 Python 命令为:
 
 ```bash
-paddlex --pipeline vehicle_attribute_recognition --input vehicle_attribute_002.jpg --device npu:0
+paddlex --pipeline vehicle_attribute_recognition \
+        --input vehicle_attribute_002.jpg \
+        --device npu:0
 ```
-若您想在更多种类的硬件上使用车辆属性识别产线,请参考[PaddleX多硬件使用指南](../../../other_devices_support/multi_devices_use_guide.md)。
+若您想在更多种类的硬件上使用通用OCR产线,请参考[PaddleX多硬件使用指南](../../../other_devices_support/multi_devices_use_guide.md)。