『paddle』paddleclas 学习笔记:图像识别
图像识别快速开始
- 1. 图像识别体验
- 1.1 下载、解压 inference 模型与 demo 数据
- 1.2 商品识别与检索
- 1.2.1 识别单张图像
- 1.2.2 基于文件夹的批量识别
- 2. 未知类别的图像识别体验
- 2.1 准备新的数据与标签
- 2.2 建立新的索引库
- 2.3 基于新的索引库的图像识别
1. 图像识别体验
检测模型与4个方向 (Logo、动漫人物、车辆、商品) 的识别 inference 模型、测试数据下载地址以及对应的配置文件地址如下。
模型简介 | 推荐场景 | inference模型 | 预测配置文件 | 构建索引库的配置文件 |
---|---|---|---|---|
通用主体检测模型 | 通用场景 | 模型下载链接 | - | - |
Logo识别模型 | Logo场景 | 模型下载链接 | inference_logo.yaml | build_logo.yaml |
动漫人物识别模型 | 动漫人物场景 | 模型下载链接 | inference_cartoon.yaml | build_cartoon.yaml |
车辆细分类模型 | 车辆场景 | 模型下载链接 | inference_vehicle.yaml | build_vehicle.yaml |
商品识别模型 | 商品场景 | 模型下载链接 | inference_product.yaml | build_product.yaml |
车辆ReID模型 | 车辆ReID场景 | 模型下载链接 | - | - |
本章节 demo 数据下载地址如下: 数据下载链接。
注意
windows 环境下如果没有安装 wget,可以按照下面的步骤安装 wget 与 tar 命令,也可以在下载模型时将链接复制到浏览器中下载,并解压放置在相应目录下;linux 或者 macOS 用户可以右键点击,然后复制下载链接,即可通过
wget
命令下载。如果 macOS 环境下没有安装
wget
命令,可以运行下面的命令进行安装。# 安装 homebrew ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"; # 安装wget brew install wget
如果希望在 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.tarcd ../
# 下载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}]
最终识别结果为安慕希酸奶
,识别正确,识别结果可视化如下所示。
『paddle』paddleclas 学习笔记:图像识别相关推荐
- 『paddle』paddleclas 学习笔记:分类预训练模型选择
目录 ImageNet预训练模型库 模型库概览图 SSLD知识蒸馏预训练模型 ResNet 及其 Vd 系列 移动端系列 SEResNeXt与Res2Net系列 DPN 与 DenseNet 系列 H ...
- 『ES6』ES6 - 学习笔记
比较 var 和 let 关键字的作用域 使用 var 关键字声明变量时,它是全局声明的,如果在函数内部声明则是局部声明的. let 关键字的行为类似,但有一些额外的功能. 在代码块.语句或表达式中使 ...
- 『Material Design 入门学习笔记』前言
写在最前面的话 最开始我在毕业的时候做Android,当时还没到Android5.0,没有Material Design,当时的设计都是以立体仿3d效果为主.后来有了扁平化设计,我却开始了SDK各种功 ...
- 『不走弯路』Unity学习路线(主程方向)
本学习路线由大智凭个人经验编写,仅供参考,欢迎私信找大智交流(
- 『WEB』web学习
1. Web开发的发展史---Web开发技术的演变 CGI(Common Gateway Interface) XML是一种数据定义,里面是放数据和数据定义的,也就是数据库 ASP是一个环境,在这个 ...
- 二维码学习笔记(二) | 数据分析与数据编码
唠唠闲话 二维码笔记系列(原文地址): 『二维码学习笔记(一) | 二维码概述』 『二维码学习笔记(二) | 数据分析与数据编码』 『二维码学习笔记(三) | 纠错编码』 『二维码学习笔记(四) | ...
- 『TensorFlow』模型保存和载入方法汇总
一.TensorFlow常规模型加载方法 保存模型 tf.train.Saver()类,.save(sess, ckpt文件目录)方法 参数名称 功能说明 默认值 var_list Saver中存储变 ...
- 『TensorFlow』模型载入方法汇总
『TensorFlow』第七弹_保存&载入会话_霸王回马 一.TensorFlow常规模型加载方法 保存模型 tf.train.Saver()类,.save(sess, ckpt文件目录)方法 ...
- 鸟哥的Linux私房菜基础篇-学习笔记
第零章.计算器概论 计算器癿定义为:『接受用户输入指令不数据,绊由中央处理器癿数学不逡辑单元运算处理后, 以产生戒储存成有用癿信息』: 计算机癿五大单元包括:输入单元. 输出单元. CPU 内 ...
- 『SQL Server 2000 Reporting Services学习笔记』(1)报表管理器的使用 与 通过角色分配配置安全性...
『SQL Server 2000 Reporting Services学习笔记』(1)报表管理器的使用 与 通过角色分配配置安全性 __________________________________ ...
最新文章
- Java学习笔记十(注解)
- Python-简单优先队列
- mysql 中datetime_MySQL中Datetime与Timestamp
- 浅谈ORACLE AWR single instance 一
- python做动画视频教程_Python零基础入门动画教程
- Django:Web框架,WSGI,WSGI实现浏览器与服务器通信,路由route,WSGI实现页面访问
- 线性代数中矩阵相乘如何计算
- Java多线程之FutureTask
- sap期初导资产代码_SAP S/4固定资产导入期初科目设置
- 【Hadoop】Hadoop组件 -之 HDFS组件
- 普元的ajax,普元EOS平台介绍
- 透明图片怎么发给别人_怎么用秀米写公众号文章
- 性能测试职业发展方向
- 计算机类部分核心期刊说明
- AHRS简要说明及使用例程(外加踩坑)
- 新浪微博热搜榜“背后的男人”讲述热搜背后的秘密
- 手机H5支付和扫码支付的区别是什么?
- java打印数组的连续非空子集_求一个字符串数组所有非空子集
- JSFL 批量转化fla脚本文件
- 二十四节气(历法)_The 24 Solar Terms