{'res': {'input_path': 'vehicle_attribute_007.jpg', 'page_index': None, 'class_ids': array([ 0, 13]), 'scores': array([0.98929, 0.97349]), 'label_names': ['yellow(黄色)', 'hatchback(掀背车)']}}
运行结果参数含义如下:
- input_path:表示输入待预测多类别图像的路径
- page_index:如果输入是PDF文件,则表示当前是PDF的第几页,否则为 None
- class_ids:表示车辆属性图像的预测标签ID
- scores:表示车辆属性图像的预测标签置信度
- label_names:表示车辆属性图像的预测标签名称
可视化图片如下:
相关方法、参数等说明如下:
create_model实例化车辆属性识别模型(此处以PP-LCNet_x1_0_vehicle_attribute为例),具体说明如下:
float类型变量,任意[0-1]之间浮点数:0.5
list类型变量,由多个[0-1]之间浮点数组成的列表:[0.5,0.5,...]
dict类型变量,指定不同类别使用不同的阈值,其中"default"为必须包含的键:{"default":0.5,1:0.1,...}
use_hpip
是否启用高性能推理插件
False
hpi_config
高性能推理配置
dict | None
其中,model_name 必须指定,指定 model_name 后,默认使用 PaddleX 内置的模型参数,在此基础上,指定 model_dir 时,使用用户自定义的模型。
其中,threshold 参数用于设置多标签分类的阈值,默认为0.7。当设置为浮点数时,表示所有类别均使用该阈值;当设置为列表时,表示不同类别使用不同的阈值,此时需保持列表长度与类别数量一致;当设置为字典时,default 为必须包含的键, 表示所有类别的默认阈值,其它类别使用各自的阈值。例如:{"default":0.5,1:0.1}。
调用多标签分类模型的 predict() 方法进行推理预测,predict() 方法参数有 input , batch_size 和 threshold,具体说明如下:
Python变量,如numpy.ndarray表示的图像数据
文件路径,如图像文件的本地路径:/root/data/img.jpg
URL链接,如图像文件的网络URL:示例
本地目录,该目录下需包含待预测数据文件,如本地路径:/root/data/
列表,列表元素需为上述类型数据,如[numpy.ndarray, numpy.ndarray],[\"/root/data/img1.jpg\", \"/root/data/img2.jpg\"],[\"/root/data1\", \"/root/data2\"]
batch_size
threshold
车辆属性识别阈值
float/list/dict
float类型变量,任意[0-1]之间浮点数:0.5
list类型变量,由多个[0-1]之间浮点数组成的列表:[0.5,0.5,...]
dict类型变量,指定不同类别使用不同的阈值,其中"default"为必须包含的键:{"default":0.5,1:0.1,...}
ensure_ascii
控制是否将非 ASCII 字符转义为 Unicode。设置为 True 时,所有非 ASCII 字符将被转义;False 则保留原始字符,仅当format_json为True时有效
False
save_to_json()
将结果保存为json格式的文件
save_path
保存的文件路径,当为目录时,保存文件命名与输入文件类型命名一致
indent
指定缩进级别,以美化输出的 JSON 数据,使其更具可读性,仅当 format_json 为 True 时有效
ensure_ascii
控制是否将非 ASCII 字符转义为 Unicode。设置为 True 时,所有非 ASCII 字符将被转义;False 则保留原始字符,仅当format_json为True时有效
False
save_to_img()
将结果保存为图像格式的文件
save_path
保存的文件路径,当为目录时,保存文件命名与输入文件类型命名一致
关于更多 PaddleX 的单模型推理的 API 的使用方法,可以参考的使用方法,可以参考PaddleX单模型Python脚本使用说明。
四、二次开发
如果你追求更高精度的现有模型,可以使用 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/vehicle_attribute_examples.tar -P ./dataset
tar -xf ./dataset/vehicle_attribute_examples.tar -C ./dataset/
一行命令即可完成数据校验:
python main.py -c paddlex/configs/modules/vehicle_attribute_recognition/PP-LCNet_x1_0_vehicle_attribute.yaml \
-o Global.mode=check_dataset \
-o Global.dataset_dir=./dataset/vehicle_attribute_examples
执行上述命令后,PaddleX 会对数据集进行校验,并统计数据集的基本信息,命令运行成功后会在log中打印出Check dataset passed !信息。校验结果文件保存在./output/check_dataset_result.json,同时相关产出会保存在当前目录的./output/check_dataset目录下,产出目录中包括可视化的示例样本图片和样本分布直方图。
👉 校验结果详情(点击展开)
校验结果文件具体内容为:
"done_flag": true,
"check_pass": true,
"attributes": {
"label_file": "../../dataset/vehicle_attribute_examples/label.txt",
"num_classes": 19,
"train_samples": 1200,
"train_sample_paths": [
"check_dataset/demo_img/0018_c017_00033140_0.jpg",
"check_dataset/demo_img/0010_c019_00034275_0.jpg",
"check_dataset/demo_img/0015_c019_00068660_0.jpg",
"check_dataset/demo_img/0016_c017_00049590_1.jpg",
"check_dataset/demo_img/0018_c016_00052280_0.jpg",
"check_dataset/demo_img/0023_c001_00006995_0.jpg",
"check_dataset/demo_img/0022_c004_00065910_0.jpg",
"check_dataset/demo_img/0007_c019_00048655_1.jpg",
"check_dataset/demo_img/0022_c007_00072970_0.jpg",
"check_dataset/demo_img/0022_c008_00065785_0.jpg"
"val_samples": 300,
"val_sample_paths": [
"check_dataset/demo_img/0025_c003_00054095_0.jpg",
"check_dataset/demo_img/0023_c013_00006350_1.jpg",
"check_dataset/demo_img/0024_c003_00046320_0.jpg",
"check_dataset/demo_img/0025_c005_00054795_2.jpg",
"check_dataset/demo_img/0024_c012_00041770_0.jpg",
"check_dataset/demo_img/0024_c007_00060845_1.jpg",
"check_dataset/demo_img/0023_c017_00013150_0.jpg",
"check_dataset/demo_img/0024_c014_00040410_0.jpg",
"check_dataset/demo_img/0025_c002_00050685_1.jpg",
"check_dataset/demo_img/0025_c005_00032645_0.jpg"
"analysis": {
"histogram": "check_dataset/histogram.png"
"dataset_path": "vehicle_attribute_examples",
"show_type": "image",
"dataset_type": "MLClsDataset"
上述校验结果中,check_pass 为 true 表示数据集格式符合要求,其他部分指标的说明如下:
attributes.num_classes:该数据集类别数为 19;
attributes.train_samples:该数据集训练集样本数量为 1200;
attributes.val_samples:该数据集验证集样本数量为 300;
attributes.train_sample_paths:该数据集训练集样本可视化图片相对路径列表;
attributes.val_sample_paths:该数据集验证集样本可视化图片相对路径列表;
另外,数据集校验还对数据集中所有图片的长宽分布情况进行了分析分析,并绘制了分布直方图(histogram.png):
在您完成数据校验之后,可以通过修改配置文件或是追加超参数的方式对数据集的格式进行转换,也可以对数据集的训练/验证比例进行重新划分。
👉 格式转换/数据集划分详情(点击展开)
(1)数据集格式转换
车辆属性识别不支持数据格式转换。
(2)数据集划分
数据集划分的参数可以通过修改配置文件中 CheckDataset 下的字段进行设置,配置文件中部分参数的示例说明如下:
CheckDataset:
split:
enable: 是否进行重新划分数据集,为 True 时进行数据集格式转换,默认为 False;
train_percent: 如果重新划分数据集,则需要设置训练集的百分比,类型为0-100之间的任意整数,需要保证与 val_percent 的值之和为100;
例如,您想重新划分数据集为 训练集占比90%、验证集占比10%,则需将配置文件修改为:
......
CheckDataset:
......
split:
enable: True
train_percent: 90
val_percent: 10
......
随后执行命令:
python main.py -c paddlex/configs/modules/vehicle_attribute_recognition/PP-LCNet_x1_0_vehicle_attribute.yaml \
-o Global.mode=check_dataset \
-o Global.dataset_dir=./dataset/vehicle_attribute_examples
数据划分执行之后,原有标注文件会被在原路径下重命名为 xxx.bak。
以上参数同样支持通过追加命令行参数的方式进行设置:
python main.py -c paddlex/configs/modules/vehicle_attribute_recognition/PP-LCNet_x1_0_vehicle_attribute.yaml \
-o Global.mode=check_dataset \
-o Global.dataset_dir=./dataset/vehicle_attribute_examples \
-o CheckDataset.split.enable=True \
-o CheckDataset.split.train_percent=90 \
-o CheckDataset.split.val_percent=10
4.2 模型训练
一条命令即可完成模型的训练,以此处 PP-LCNet 车辆属性识别模型(PP-LCNet_x1_0_vehicle_attribute)的训练为例: