背景介绍
计算复杂度低,推理速度快:多标签分类无需进行复杂的边界框回归和非极大值抑制等步骤,对图像分辨率要求较低,因此计算复杂度大大降低,推理速度更快,适合实时应用。
数据标注成本低:只需为每张图像标注存在的类别,无需精确标注每个物体的边界框,降低了标注的复杂性和成本。
鲁棒性高:由于不关注具体位置信息,多标签分类在面对图像噪声或遮挡时表现更为鲁棒。
模型简单:多标签分类模型通常结构简单,易于训练和部署。
算法解读
针对多标签分类任务,我们提供了三类不同的模型,以满足不同场景的需求:
高精度模型:代表模型为PP-HGNetV2-B6_ML,基于飞桨自研高精度骨干网络模型PP-HGNetV2-B6训练得到,其在精度上达到了91.06 mAP的最高表现,尤其适合需要高精度的任务场景。
精度和效率均衡模型:代表模型为PP-HGNetV2-B4_ML,基于飞桨自研精度-效率均衡的骨干网络模型PP-HGNetV2-B4训练得到,适合精度效率兼顾要求的任务。
高效率模型:代表模型为PP-LCNet_x1_0_ML,基于飞桨自研高效率骨干网络模型PP-LCNet_x1_0训练得到,以提升推理速度和降低模型大小为目标,适合于资源受限的环境和实时应用场景。
所有这些模型都采用了性能更高且更高效的ML-Decoder分类头,以进一步提升整体性能。各个模型的性能指标如下:
注:以上精度指标为COCO2017的多标签分类任务mAP。所有模型 GPU 推理耗时基于 NVIDIA Tesla V100-SXM2-32GB 机器,精度类型为 FP32, CPU 推理速度基于 Intel(R) Xeon(R) Gold 6271C CPU @ 2.60GHz,精度类型为 FP32。
下面就从零开始,基于PaddleX体验多标签分类产线:
安装
# cpu
python -m pip install paddlepaddle==3.0.0b2 -i https://www.paddlepaddle.org.cn/packages/stable/cpu/
# gpu,该命令仅适用于 CUDA 版本为 11.8 的机器环境
python -m pip install paddlepaddle-gpu==3.0.0b2 -i https://www.paddlepaddle.org.cn/packages/stable/cu118/
# gpu,该命令仅适用于 CUDA 版本为 12.3 的机器环境
python -m pip install paddlepaddle-gpu==3.0.0b2 -i https://www.paddlepaddle.org.cn/packages/stable/cu123/
安装 PaddleX
pip install https://paddle-model-ecology.bj.bcebos.com/paddlex/whl/paddlex-3.0.0b2-py3-none-any.whl
快速体验
PaddleX 提供了简单易用的 Python API,只需几行代码即可体验端到端预测效果,可以下载测试图片,方便大家快速体验效果:
测试图片链接:
https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_object_detection_005.png
from paddlex import create_pipeline
pipeline = create_pipeline(pipeline="multi_label_image_classification")
output = pipeline.predict("general_object_detection_005.png")
for res in output:
res.print() ## 打印预测的结构化输出
res.save_to_img("./output/") ## 保存结果可视化图像
res.save_to_json("./output/") ## 保存预测的结构化输出
上述代码中:
首先使用产线名称调用create_pipeline()方法实例化产线对象;
然后使用predict()方法进行预测,对于预测结果支持print()方法进行打印,save_to_img()方法进行可视化并保存为图片以及save_to_json()方法保存预测的结构化输出。
{
"input_path": "clsmu2.png",
"class_ids": [
62,
57,
73,
58,
56,
75,
60,
65,
45,
41,
74
],
"scores": [
0.99995,
0.9998,
0.99936,
0.99883,
0.95708,
0.87987,
0.68819,
0.60793,
0.60174,
0.56606,
0.56438
],
"label_names": [
"tv",
"couch",
"book",
"potted plant",
"chair",
"vase",
"dining table",
"remote",
"bowl",
"cup",
"clock"
]
}
二次开发
如果对产线的预训练模型效果满意,可以直接对产线进行高性能推理/服务化部署/端侧部署,如果不满意,您也可以使用 PaddleX 进行便捷高效的二次开发,使用自己场景的数据对模型微调训练获得更优的精度。
基于 PaddleX 便捷的二次开发能力,使用统一命令即可完成数据校验、模型训练与评估推理,无需了解深度学习的底层原理,按要求准备好场景数据,简单运行命令即可完成模型迭代,此处展示多标签分类模型二次开发流程:
python main.py -c paddlex/configs/multilabel_classification/PP-LCNet_x1_0_ML.yaml \
-o Global.mode=train \
-o Global.dataset_dir=./dataset/mlcls_nus_examples
更多参数也可以继续在命令中追加参数设置:如指定前 2 卡 gpu 训练:-o Global.device=gpu:0,1;设置训练轮次数为 10:-o Train.epochs_iters=10。此外,相关参数均可通过修改.yaml配置文件中的Global和Train的具体字段来进行设置。
其余更详细的使用方法及产线部署、自定义数据集相关的内容,请参考PaddleX官方教程文档:
多标签分类产线使用教程
多标签分类模块使用教程
https://paddlepaddle.github.io/PaddleX/latest/module_usage/tutorials/cv_modules/image_multilabel_classification.html
北京德厚泉科技有限公司基于PaddleX多标签分类模型搭建了一套高效准确的道路地面缺陷检测系统。该系统能够自动识别和定位道路图像中的各种缺陷,如裂缝、坑洼和破损,并生成详细的检测报告。在这一应用场景中,基于多标签分类的模型相比传统的目标检测模型展现出更高的性价比。
目前,该系统的误检率小于5%,召回率大于85%,已经成功安装在多个城市的出租车上,通过极低的算力完成路面情况的实时分析,从而减少人工成本、提高检测效率,并有助于及早发现道路问题,及时采取维修措施,进而提升道路的安全性和舒适度。