PaddleClas助力口红检测&识别

    • 数据说明
    • 查看Paddle版本
    • 安装PaddleClas
    • 下载通用场景检测模型和识别模型
    • 解压文件
  • 测试Gucci口红是否存在
  • 口红识别训练
    • 数据处理
    • 建立新的索引库
    • 初步测试(训练数据测试)
      • 训练数据效果查询
    • 外部数据测试
    • 测试结果1
    • 测试结果2
    • 基于文件夹的批量识别
    • 批量识别结果说明
    • 总结

暑假收集了口红53分类的数据集,但是由于数据量不大,效果不好……

听说PaddleClas套件有一个神奇的工具可以实现检测和识别

这就去看看,尝试一下,然后暴力解析——『抽丝剥茧』

参考文献:图像识别快速开始

项目地址:https://aistudio.baidu.com/aistudio/projectdetail/2363428

数据说明

数据来源自网络,收集人为三岁,目录结构为

rouge----------------
|----口红牌子
|    |-----种类+类别
|-----Gucci
|    |----hh05
|    |----hw03
…………………………

查看Paddle版本

import paddle
print(paddle.__version__)
2.1.2

安装PaddleClas

# !git clone https://github.com/PaddlePaddle/PaddleClas.git
# !git clone https://gitee.com/PaddlePaddle/PaddleClas.git
# %cd ./PaddleClas/
# !pip install --upgrade pip
# !pip3 install --upgrade -r requirements.txt -i https://mirror.baidu.com/pypi/simple
# %cd ./deploy
/home/aistudio/PaddleClas
/home/aistudio/PaddleClas/deploy

下载通用场景检测模型和识别模型

下载的位置为:PaddleClas/deploy

# !mkdir models
# %cd ./models
# !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
# !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 ../
# !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

解压文件

将文件解压至PaddleClas/deploy/recognition_demo_data_v1.0/gallery_product

!unzip  -d ./recognition_demo_data_v1.0/gallery_product /home/aistudio/data/data103228/rouge.zip

测试Gucci口红是否存在

对原始数据进行测试,查看对没有数据的展示效果。

这里修改了配置文件PaddleClas/deploy/configs/inference_product.yaml中用于测试的图片路径

下面的!python python/predict_system.py -c configs/inference_product.yaml默认为GPU模式

若是CPU需要添加-o Global.use_gpu=False或者修改配置文件中的use_gpu改成False

!python python/predict_system.py -c configs/inference_product.yaml

最后的结果为空

口红识别训练

数据处理

路径 \t 标签 \n的顺序

例如:

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键分隔开

import os
# import
data_path = './recognition_demo_data_v1.0/gallery_product/rouge/'  # 设置初始文件地址
character_folders = os.listdir(data_path)  # 查看地址下文件夹namelist = './recognition_demo_data_v1.0/gallery_product/rouge/name.txt'  # 文件地址
lablelist = {}
with open(namelist)as f:'''读取文件后处理成字典'''while True:line = f.readline().strip().split('\t')if line[0] == '':breakif line[0] == '\ufeff0':lablelist[0] = line[1]else:lablelist[eval(line[0])] = line[1]print(lablelist)if(os.path.exists('./recognition_demo_data_v1.0/gallery_product/data_file_update.txt')):  # 判断有误文件os.remove('./recognition_demo_data_v1.0/gallery_product/data_file_update.txt')  # 删除文件# count = 0
train_list = []
train_count = {}
for character_folder in character_folders:  # 循环列表if character_folder not in 'name.txt':new_character_folders = os.listdir(data_path+character_folder)  # 生成地址for new_character_folder in new_character_folders:photo_name = os.listdir(os.path.join(data_path,character_folder,new_character_folder))  # 获得3级目录for photo_names in photo_name:name_path = os.path.join(character_folder,new_character_folder,photo_names)path_list ='rouge/' + name_path + '\t' + lablelist[int(new_character_folder[-2:])] + '\n'  # 生成图片地址及标签train_list.append(path_list)  # 添加到列表
print(f'共有数据{len(train_list)}张')# train_ = os.listdir(os.path.join(data_path,character_folder))# train_count[character_folder] = len(train_)print(train_list[0])
count = len(train_list)
for data in train_list:with open('./recognition_demo_data_v1.0/gallery_product/data_file_update.txt', 'a')as f:f.write(data)print("数据写入完毕!")
{0: '古驰倾色柔纱润唇膏', 1: '古驰倾色丝润唇膏', 2: '古驰倾色琉光唇膏', 3: '古驰倾色华缎唇膏', 4: '古驰倾色绒雾唇膏', 5: '古驰倾色星辉唇膏', 6: '爱马仕唇妆系列缎光唇膏', 7: '阿玛尼红管臻致丝传奇绒哑光唇釉', 8: '阿玛尼红黑管哑光唇膏', 9: '阿玛尼小胖丁持色凝彩哑光染唇液', 10: '阿玛尼5G黑管', 11: '阿玛尼黑漆光迷情唇釉', 12: '迪奥烈艳蓝金唇膏', 13: 'Dior红管花芯唇膏', 14: 'Dior迪奥魅惑釉唇膏', 15: '烈艳蓝金锁色唇釉', 16: '圣罗兰纯口红', 17: '圣罗兰细管纯口红(小金条)', 18: '圣罗兰莹亮纯魅唇膏', 19: '圣罗兰细管纯口红(小黑条)', 20: '娇兰臻彩宝石唇膏', 21: '娇兰亲亲唇膏', 22: '娇兰唇蜜', 23: 'CHILI 小辣椒', 24: '魅可清新漆光唇釉', 25: '完美日记小细跟口红', 26: '完美日记唇彩', 27: '完美日记口红', 28: '兰蔻唇釉', 29: '兰蔻唇膏', 30: '娇韵诗丰盈唇膏', 31: '香奈儿可可小姐唇膏', 32: 'CL路铂廷女王权杖(萝卜丁口红)', 33: 'CL路铂廷女王权杖黑管(萝卜丁口红)', 34: '纪梵希小羊皮', 35: '纪梵希羊皮唇釉', 36: '纪梵希禁忌之吻星云唇膏', 37: '3CE细管唇膏', 38: '3CE哑光口红', 39: '3CE唇泥', 40: '3CE三熹玉云朵唇釉', 41: 'UNNY唇泥', 42: 'UNNY雾面雪雾花园唇釉', 43: '植村秀小黑方唇膏口红', 44: '植村秀无色限方管漆光唇釉口红', 45: 'TOM FORD唇膏', 46: '雅诗兰黛口红金管', 47: '橘朵哑光唇釉', 48: '橘朵小花管唇膏', 49: '稚优泉口红', 50: '稚优泉无惧幻想绒雾唇釉', 51: '稚优泉琉光之镜水光唇釉', 52: '稚优泉 绒情迷雾哑光唇釉'}
共有数据784张
rouge/Armani/cy07/12.jpg    阿玛尼红管臻致丝传奇绒哑光唇釉数据写入完毕!

建立新的索引库

构建index索引,加速识别后的检索过程。

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

!python 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"

初步测试(训练数据测试)

这里采用了之前的训练数据进行先期测试

!python python/predict_system.py -c configs/inference_product.yaml -o \Global.infer_imgs="./recognition_demo_data_v1.0/gallery_product/rouge/YSL/xjt17/11.jpg" -o \IndexProcess.index_path="./recognition_demo_data_v1.0/gallery_product/index_update"
from PIL import Image
Image.open('./recognition_demo_data_v1.0/gallery_product/rouge/YSL/xjt17/11.jpg')

训练数据效果查询

类别17 内容:圣罗兰细管纯口红(小金条)

外部数据测试

使用了网络图片(非数据集)进行测试

!python python/predict_system.py -c configs/inference_product.yaml -o\Global.infer_imgs="/home/aistudio/YSL.png" -o\IndexProcess.index_path="./recognition_demo_data_v1.0/gallery_product/index_update"
from PIL import Image
Image.open('/home/aistudio/YSL.png')

测试结果1

应该没有什么大的问题(我也不知道是什么细分的但是圣罗兰没有问题)

!python python/predict_system.py -c configs/inference_product.yaml -o\Global.infer_imgs="/home/aistudio/Dior.png" -o\IndexProcess.index_path="./recognition_demo_data_v1.0/gallery_product/index_update"
Inference: 21.724224090576172 ms per batch image
[{'bbox': [0, 0, 700, 700], 'rec_docs': '迪奥烈艳蓝金唇膏', 'rec_scores': 0.6667188405990601}]
Image.open('/home/aistudio/Dior.png')

测试结果2

Dior没有问题!在原始数据中属于第12类

基于文件夹的批量识别

!python python/predict_system.py -c configs/inference_product.yaml -o\Global.infer_imgs="/home/aistudio/batch_map" -o\-o\Global.infer_imgs="/home/aistudio/batch_map" -o\IndexProcess.index_path="./recognition_demo_data_v1.0/gallery_product/index_update"
Inference: 21.574020385742188 ms per batch image
[]
Inference: 19.788503646850586 ms per batch image
[]
Inference: 19.628524780273438 ms per batch image
[{'bbox': [0, 0, 459, 603], 'rec_docs': 'TOM FORD唇膏', 'rec_scores': 0.5707532167434692}, {'bbox': [261, 228, 346, 350], 'rec_docs': '圣罗兰纯口红', 'rec_scores': 0.566393256187439}]
Inference: 19.90532875061035 ms per batch image
[{'bbox': [238, 150, 350, 307], 'rec_docs': '3CE哑光口红', 'rec_scores': 0.5311368703842163}]
Inference: 19.890308380126953 ms per batch image
[{'bbox': [0, 0, 523, 589], 'rec_docs': '圣罗兰莹亮纯魅唇膏', 'rec_scores': 0.5979276299476624}]
Inference: 19.647836685180664 ms per batch image
[{'bbox': [0, 0, 570, 470], 'rec_docs': 'Dior迪奥魅惑釉唇膏', 'rec_scores': 0.6497770547866821}]

批量识别结果说明

batch_map中前面的英文为牌子,后面的数字为上面对应的类型。

经过测试:只有两支M.A.C测试失败(其中Unny是原始数据中不存在所以无法识别)

经过对原始数据的查看发现M.A.C原始数据有点小问题

建议该方向的数据精度要高效果会更加的好!

总结

通过PaddleClas完成了少量样本的检测和识别,少样本问题是分类等的一个巨大困扰。

通过对Clas套件的使用解决了困扰。

使用中发现对数据集的精度要求较高。所以数据可以少但是精度要高!

大家好!这里是三岁!

让我们下次再见吧~~~

今天三岁口红分类的任务终于结束了!

嘤嘤嘤~~~

PaddleClas高效实现口红检测识别相关推荐

  1. 卷积神经网络必读的100篇经典论文,包含检测/识别/分类/分割多个领域

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 参考|学术头条 编辑|极市平台 作为深度学习的代表算法之一,卷积神经 ...

  2. 论文大盘点|卷积神经网络必读的100篇经典论文,包含检测/识别/分类/分割多个领域...

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 转载自:极市平台 作为深度学习的代表算法之一,卷积神经网络(Convolution ...

  3. 大盘点|卷积神经网络必读的 100 篇经典论文,包含检测 / 识别 / 分类 / 分割多个领域

    关注极市平台公众号(ID:extrememart),获取计算机视觉前沿资讯/技术干货/招聘面经等 原文链接:大盘点|卷积神经网络必读的 100 篇经典论文,包含检测 / 识别 / 分类 / 分割多个领 ...

  4. 两种简单高效的“反人脸识别”方法

    Bakunov开始在工作时间,研究如何防止被人脸识别.日前,他公开表示自己已经与其他几个黑客一起,开发出了一种"反人脸识别算法". Grigory Bakunov是俄罗斯搜索巨头Y ...

  5. # 经典目标检测识别方法概述RCNN/FAST/FASTER RCNN/MASK RCNN/SSD/DSSD/YOLO V1/YOLO V2等

    经典目标检测识别方法概述@陈子逸 经典目标检测识别方法概述 由于水硕期间自学了一些目标探测的方法,这里做一个概述,肯定有不完美的地方,还请指正一起进步. 综述 1.分别简单描述一下RCNN系列: 在我 ...

  6. Spiking-YOLO:脉冲神经网络高效的目标检测

    Spiking-YOLO: Spiking Neural Network for Energy-Efficient Object Detection |AAAI 2020 Spiking-YOLO:脉 ...

  7. 摆平各类目标检测识别AI应用,有它就够了

    本文分享自华为云社区<摆平各类目标检测识别AI应用,有它就够了!>,作者:昇腾CANN. 很难想象突然有一天,开门不能刷指纹了.超速抓拍不到了.不认识的花草也扫不出来了,我们的生活会不会比 ...

  8. 字符检测识别机器视觉系统方案设计——东莞康耐德

    字符识别机器视觉系统概述 系统功能 可以自动搜索定位视野中的字符位置 可以自动识别出其中的字符值 可以自动校验字符是否正确并且标记出不正确的字符位置 可以进行在线检测. 系统稳定.高效,成本低. 应用 ...

  9. AI视觉分析技术在路面裂缝坑洞检测识别中应用

    1.        简介 伴随髙速发展的道路交通建设,普通公路及高速公路的养护及管理任务也随之而来.道路养护及管理已经愈发重视道路路面病害的监测和病害数据的釆集工作.近年来AI机器视觉检测识别算法的发 ...

最新文章

  1. DeepCut及DeeperCut:基于Tensorflow的人体姿态估计
  2. Android去掉顶部的阴影
  3. Quartz整合Spring
  4. 统计学习:基本常用公式(1)
  5. 四十四、Python中的statsmodels模块
  6. android build.time,Android SDK中的恒定Build.TIME
  7. linux分区概念理解,在linux安装中的分区概念(转)
  8. VC++中文件类型小结
  9. 苹果发布 2017 年度应用榜单,你的 App 榜上有名吗?
  10. Python全栈开发记录_第六篇(生成器和迭代器)
  11. 边沿检测电路设计verilog
  12. Backup Exec 在Windows平台下安装、设置及对Oracle数据库备份详细说明
  13. 谷粒商城笔记 + 完整代码 + 课件资料(基础篇)(学习记录)
  14. 孟德尔随机化——如何选择工具变量
  15. Jackson转换java对象与json对象
  16. 华为matex搭载鸿蒙系统,华为 MateX 推迟至 9 月上市,或预装鸿蒙系统
  17. CentOS7搭建个人站点
  18. Neocities 免费HTML 网站空间,每月200 GB 流量托管静态网页超简单
  19. Unity计算着色器 01
  20. matlab图注的上标和下标,关于matlab中特殊字符, 上标和下标

热门文章

  1. 精益和敏捷的较量:你知道敏捷开发有 Scrum 和 Kanban 两种管理模式吗?
  2. 二进制、八进制、十六进制的写法
  3. SSDT Hook技术详解与应用
  4. PS如何修改gif动图 播放速度 - 本地方法篇
  5. dw建站404问题,dw 404
  6. html地图周边搜索,高德地图API实现定位、地点搜索和周边搜索(H5/Vue/微信小程序)...
  7. 主观意义上第一个基于DEFI的DAM平台DIPPER,年关崛起的黑马究竟是否能在新年创造区块链新纪元?而DIPPER的意义和价值又是什么?
  8. python高德地图api调用实例_Python调用高德地图API实现经纬度换算、地图可视化
  9. mac升级mysql_Mac如何升级Mysql数据库 Mac升级Mysql数据库步骤
  10. JUnit测试提示 java.lang.Exception: No public static parameters method on class