『paddle』paddleclas 学习笔记:图像识别

本文档详细介绍了如何进行图像识别的快速体验,包括下载解压模型与数据,进行商品识别与检索。通过实例展示了识别单张图像和批量识别的步骤,并解释了如何处理未知类别的图像,包括准备新数据、建立新索引库及基于新索引库的识别。
摘要由CSDN通过智能技术生成


1. 图像识别体验

检测模型与4个方向 (Logo、动漫人物、车辆、商品) 的识别 inference 模型、测试数据下载地址以及对应的配置文件地址如下。

模型简介推荐场景inference模型预测配置文件构建索引库的配置文件
通用主体检测模型通用场景模型下载链接--
Logo识别模型Logo场景模型下载链接inference_logo.yamlbuild_logo.yaml
动漫人物识别模型动漫人物场景模型下载链接inference_cartoon.yamlbuild_cartoon.yaml
车辆细分类模型车辆场景模型下载链接inference_vehicle.yamlbuild_vehicle.yaml
商品识别模型商品场景模型下载链接inference_product.yamlbuild_product.yaml
车辆ReID模型车辆ReID场景模型下载链接--

本章节 demo 数据下载地址如下: 数据下载链接

注意

  1. windows 环境下如果没有安装 wget,可以按照下面的步骤安装 wget 与 tar 命令,也可以在下载模型时将链接复制到浏览器中下载,并解压放置在相应目录下;linux 或者 macOS 用户可以右键点击,然后复制下载链接,即可通过 wget 命令下载。

  2. 如果 macOS 环境下没有安装 wget 命令,可以运行下面的命令进行安装。

    # 安装 homebrew
    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)";
    # 安装wget
    brew install wget
    
  3. 如果希望在 windows 环境下安装 wget,可以参考:链接
    如果希望在 windows 环境中安装 tar 命令,可以参考:链接

  • 可以按照下面的命令下载并解压数据与模型
    mkdir models
    cd models
    # 下载识别inference模型并解压
    wget {模型下载链接地址} && tar -xf {压缩包的名称}
    cd ..
    
    # 下载demo数据并解压
    wget {数据下载链接地址} && tar -xf {压缩包的名称}
    

1.1 下载、解压 inference 模型与 demo 数据

以商品识别为例,下载 demo 数据集以及通用检测、识别模型,命令如下。

mkdir models
cd models
# 下载通用检测inference模型并解压
wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/ppyolov2_r50vd_dcn_mainbody_v1.0_infer.tar && tar -xf ppyolov2_r50vd_dcn_mainbody_v1.0_infer.tar
# 下载识别inference模型并解压
wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/product_ResNet50_vd_aliproduct_v1.0_infer.tar && tar -xf product_ResNet50_vd_aliproduct_v1.0_infer.tar

cd ../
# 下载demo数据并解压
wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/data/recognition_demo_data_v1.0.tar && tar -xf recognition_demo_data_v1.0.tar

解压完毕后,recognition_demo_data_v1.0 文件夹下应有如下文件结构:

├── recognition_demo_data_v1.0
│   ├── gallery_cartoon
│   ├── gallery_logo
│   ├── gallery_product
│   ├── gallery_vehicle
│   ├── test_cartoon
│   ├── test_logo
│   ├── test_product
│   └── test_vehicle
├── ...

其中gallery_xxx文件夹中存放的是用于构建索引库的原始图像,test_xxx文件夹中存放的是用于测试识别效果的图像列表。

models文件夹下应有如下文件结构:

├── product_ResNet50_vd_aliproduct_v1.0_infer
│   ├── inference.pdiparams
│   ├── inference.pdiparams.info
│   └── inference.pdmodel
├── ppyolov2_r50vd_dcn_mainbody_v1.0_infer
│   ├── inference.pdiparams
│   ├── inference.pdiparams.info
│   └── inference.pdmodel

1.2 商品识别与检索

以商品识别 demo 为例,展示识别与检索过程(如果希望尝试其他方向的识别与检索效果,在下载解压好对应的demo数据与模型之后,替换对应的配置文件即可完成预测)。

1.2.1 识别单张图像

运行下面的命令,对图像 ./recognition_demo_data_v1.0/test_product/daoxiangcunjinzhubing_6.jpg 进行识别与检索

# 使用下面的命令使用 GPU 进行预测
python3.7 python/predict_system.py -c configs/inference_product.yaml
# 使用下面的命令使用 CPU 进行预测
python3.7 python/predict_system.py -c configs/inference_product.yaml -o Global.use_gpu=False

注意:这里使用了默认编译生成的库文件进行特征索引,如果与您的环境不兼容,导致程序报错,可以参考向量检索教程重新编译库文件。

待检索图像如下所示。

最终输出结果如下。

[{'bbox': [287, 129, 497, 326], 'rec_docs': '稻香村金猪饼', 'rec_scores': 0.8309420943260193}, {'bbox': [99, 242, 313, 426], 'rec_docs': '稻香村金猪饼', 'rec_scores': 0.7245652079582214}]

其中 bbox 表示检测出的主体所在位置,rec_docs 表示索引库中与检测框最为相似的类别,rec_scores 表示对应的置信度。

检测的可视化结果也保存在 output 文件夹下,对于本张图像,识别结果可视化如下所示。

1.2.2 基于文件夹的批量识别

如果希望预测文件夹内的图像,可以直接修改配置文件中的 Global.infer_imgs 字段,也可以通过下面的 -o 参数修改对应的配置。

# 使用下面的命令使用 GPU 进行预测,如果希望使用 CPU 预测,可以在命令后面添加 -o Global.use_gpu=False
python3.7 python/predict_system.py -c configs/inference_product.yaml -o Global.infer_imgs="./recognition_demo_data_v1.0/test_product/"

终端中会输出该文件夹内所有图像的识别结果,如下所示。

...
[{'bbox': [37, 29, 123, 89], 'rec_docs': '香奈儿包', 'rec_scores': 0.6163763999938965}, {'bbox': [153, 96, 235, 175], 'rec_docs': '香奈儿包', 'rec_scores': 0.5279821157455444}]
[{'bbox': [735, 562, 1133, 851], 'rec_docs': '香奈儿包', 'rec_scores': 0.5588355660438538}]
[{'bbox': [124, 50, 230, 129], 'rec_docs': '香奈儿包', 'rec_scores': 0.6980369687080383}]
[{'bbox': [0, 0, 275, 183], 'rec_docs': '香奈儿包', 'rec_scores': 0.5818190574645996}]
[{'bbox': [400, 1179, 905, 1537], 'rec_docs': '香奈儿包', 'rec_scores': 0.9814301133155823}]
[{'bbox': [544, 4, 1482, 932], 'rec_docs': '香奈儿包', 'rec_scores': 0.5143815279006958}]
[{'bbox': [29, 42, 194, 183], 'rec_docs': '香奈儿包', 'rec_scores': 0.9543638229370117}]
...

所有图像的识别结果可视化图像也保存在 output 文件夹内。

更多地,可以通过修改 Global.rec_inference_model_dir 字段来更改识别 inference 模型的路径,通过修改 IndexProcess.index_path 字段来更改索引库索引的路径。

2. 未知类别的图像识别体验

对图像 ./recognition_demo_data_v1.0/test_product/anmuxi.jpg 进行识别,命令如下

# 使用下面的命令使用 GPU 进行预测,如果希望使用 CPU 预测,可以在命令后面添加 -o Global.use_gpu=False
python3.7 python/predict_system.py -c configs/inference_product.yaml -o Global.infer_imgs="./recognition_demo_data_v1.0/test_product/anmuxi.jpg"

待检索图像如下所示。

输出结果为空。

由于默认的索引库中不包含对应的索引信息,所以这里的识别结果有误,此时我们可以通过构建新的索引库的方式,完成未知类别的图像识别。

当索引库中的图像无法覆盖我们实际识别的场景时,即在预测未知类别的图像时,我们需要将对应类别的相似图像添加到索引库中,从而完成对未知类别的图像识别,这一过程是不需要重新训练的。

2.1 准备新的数据与标签

首先需要将与待检索图像相似的图像列表拷贝到索引库原始图像的文件夹(./recognition_demo_data_v1.0/gallery_product/gallery)中,运行下面的命令拷贝相似图像。

cp -r  ../docs/images/recognition/product_demo/gallery/anmuxi ./recognition_demo_data_v1.0/gallery_product/gallery/

然后需要编辑记录了图像路径和标签信息的文本文件(./recognition_demo_data_v1.0/gallery_product/data_file_update.txt),这里基于原始标签文件,新建一个文件。命令如下。

# 复制文件
cp recognition_demo_data_v1.0/gallery_product/data_file.txt recognition_demo_data_v1.0/gallery_product/data_file_update.txt

然后在文件 recognition_demo_data_v1.0/gallery_product/data_file_update.txt 中添加以下的信息,

gallery/anmuxi/001.jpg	安慕希酸奶
gallery/anmuxi/002.jpg	安慕希酸奶
gallery/anmuxi/003.jpg	安慕希酸奶
gallery/anmuxi/004.jpg	安慕希酸奶
gallery/anmuxi/005.jpg	安慕希酸奶
gallery/anmuxi/006.jpg	安慕希酸奶

每一行的文本中,第一个字段表示图像的相对路径,第二个字段表示图像对应的标签信息,中间用 tab 键分隔开(注意:有些编辑器会将tab自动转换为空格,这种情况下会导致文件解析报错)。

2.2 建立新的索引库

使用下面的命令构建 index 索引,加速识别后的检索过程。

python3.7 python/build_gallery.py -c configs/build_product.yaml -o IndexProcess.data_file="./recognition_demo_data_v1.0/gallery_product/data_file_update.txt" -o IndexProcess.index_path="./recognition_demo_data_v1.0/gallery_product/index_update"

最终新的索引信息保存在文件夹./recognition_demo_data_v1.0/gallery_product/index_update中。

2.3 基于新的索引库的图像识别

使用新的索引库,对上述图像进行识别,运行命令如下。

# 使用下面的命令使用 GPU 进行预测,如果希望使用 CPU 预测,可以在命令后面添加-o Global.use_gpu=False
python3.7 python/predict_system.py -c configs/inference_product.yaml -o Global.infer_imgs="./recognition_demo_data_v1.0/test_product/anmuxi.jpg" -o IndexProcess.index_path="./recognition_demo_data_v1.0/gallery_product/index_update"

输出结果如下。

[{'bbox': [243, 80, 523, 522], 'rec_docs': '安慕希酸奶', 'rec_scores': 0.5570770502090454}]

最终识别结果为安慕希酸奶,识别正确,识别结果可视化如下所示。

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

libo-coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值