PaddleClas高效实现口红检测&识别

简介: PaddleClas高效实现口红检测&识别

暑假收集了口红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中用于测试的图片路径


6d013ab187f046f2aad659edd393ba4e.png


下面的!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 


最后的结果为空


996a6d105daa42d59326ed400b60242e.png


口红识别训练



数据处理


路径 \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] == '':
            break
        if 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')

fcd2829214954c8e86bd18626660b372.png


训练数据效果查询

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


0c6dcfcd2c4149888f972164cad8cac0.png


外部数据测试


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

!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')


a6b927280cfa4b84b6dde4985b19babc.png


测试结果1


f3b9d6f8980a4bec98f410b54acdf389.png


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

!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')


378282965feb461ebc2d9a517c13f507.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套件的使用解决了困扰。

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

大家好!这里是三岁!

让我们下次再见吧~~~

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

嘤嘤嘤~~~


目录
相关文章
|
7月前
|
算法
请教视觉智能平台:同图检测到底是同一张图不同内容做检测是否相同?
请教视觉智能平台:同图检测到底是同一张图不同内容做检测是否相同?
84 0
|
存储 算法 生物认证
活体检测的几种手段分析
活体检测的手段比较多,目前比较通用的是人脸活体检测,但是实际应用中的还有指纹识别、虹膜识别、静脉识别,通过这些手段来增加安全性,活体检测在金融领域、军事管理中最先使用,目前也在渐渐的普及到各个民用行业。
657 0
活体检测的几种手段分析
|
25天前
|
传感器 机器学习/深度学习 算法
车速检测
车速检测是现代交通管理和自动驾驶的关键技术,通过雷达、激光和计算机视觉等手段,实现对车辆速度的精准测量。本文重点介绍了利用计算机视觉中的目标检测(如YOLO)与跟踪算法(如CSRT)进行车速检测的方法,包括目标检测、跟踪及速度计算的具体步骤,展示了该技术在智能交通系统中的应用价值。
|
5月前
|
TensorFlow 算法框架/工具 计算机视觉
识别
【7月更文挑战第29天】识别
54 8
|
7月前
|
文字识别 负载均衡 安全
文字识别OCR常见问题之通用识别和手写体识别直接合并调用如何解决
文字识别OCR(Optical Character Recognition)技术能够将图片或者扫描件中的文字转换为电子文本。以下是阿里云OCR技术使用中的一些常见问题以及相应的解答。
201 4
|
7月前
|
机器学习/深度学习 自然语言处理
代码识别模型有哪些
代码识别模型有哪些
121 1
|
计算机视觉
hyperlpr车牌检测使用报错解决方案
hyperlpr车牌检测使用报错解决方案
166 0
|
数据采集 JSON 前端开发
基于Cssom的暗链检测技术
网络安全开发-数据分析技术
141 0
|
机器学习/深度学习
FOTS:自然场景的文本检测与识别(上)
FOTS:自然场景的文本检测与识别
180 0
FOTS:自然场景的文本检测与识别(上)