基于VGG的图像多标签分类算法详解及实践
摘要
将深度学习与人物穿着上的服装图像分类结合是目前的研究热点之一,然而目前对服装图像分类主要是分成单个标签单独处理。在现实生活中,随着网络购物等服装商务新模式的出现、复杂决策的迫切需要,单标签服装图像分类已经不能解决问题,多标签服装图像分类成为一个重要的学习问题,展现出巨大的应用价值。多标签服装图像分类的目标是预测每张服装图像的一组服装属性标签。
1. 多标签分类定义
multi-label classification problem:多标签分类(或者叫多标记分类),是指一个样本的标签数量不止一个,即一个样本对应多个标签。
为了方便大家理解多标签,举个例子:一个女生穿个蓝色的裙子
那么黑色加粗字体的标签的可以设置为:
Black |
Blue |
Dress |
Jeans |
Red |
Shirt |
male |
famale |
.... | |
[“female' ‘red’ ’shirt’] | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | ... |
通过MultiLabelBinarizer()的fit就可以得到上述label的编码。
2. 多标签分类模型的输出问题
传统在进行实现多分类任务时,常采用softmax函数,其输出为:
z = np.array([-1.0, 5.0, -0.5, 5.0, -0.5])
print(Softmax_sim(z))
# 输出为[ 0.00123281 0.49735104 0.00203256 0.49735104 0.00203256]
通过使用softmax,我们可以清楚地选择标签2和标签4。但我们必须知道每个样本需要多少个标签,或者为概率选择一个阈值。这显然不是我们想要的,因为样本属于每个标签的概率应该是独立的。因此,在完成整个模型构建之后,最后一步中最重要的是为模型的编译选择损失函数。在多标签分类中,大多使用binary_crossentropy损失而不是在多类分类中使用categorical_crossentropy损失函数。这可能看起来不合理,但因为每个输出节点都是独立的,选择二元损失,并将网络输出建模为每个标签独立的bernoulli分布。整个多标签分类的模型为:
from keras.models import Model
from keras.layers import Input,Dense
inputs = Input(shape=(10,))
hidden = Dense(units=10,activation='relu')(inputs)
output = Dense(units=5,activation='sigmoid')(hidden)
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
3. 多标签数据集
本人的数据集有6类,在网上爬虫分类整理得到的。
女性蓝色裙子:female_bule_dress:415张
女性蓝色T袖:female_bule_shirt:311张
女性红色裙子:female_red_dress:259张
男性黑色T袖:male_black_shirt:257张
男性蓝色T袖:male_bule_shirt:247张
男性红色T袖:male_bule_shirt:194张
4. 模型实现与训练
class SmallerVGGNet:@staticmethoddef build(width, height, depth, classes, finalAct="softmax"):model = Sequential()inputShape = (height, width, depth)chanDim = -1if K.image_data_format() == "channels_first":inputShape = (depth, height, width)chanDim = 1model.add(Conv2D(32, (3, 3), padding="same",input_shape=inputShape))model.add(Activation("relu"))model.add(BatchNormalization(axis=chanDim))model.add(MaxPooling2D(pool_size=(3, 3)))model.add(Dropout(0.25))model.add(Conv2D(64, (3, 3), padding="same"))model.add(Activation("relu"))model.add(BatchNormalization(axis=chanDim))model.add(Conv2D(64, (3, 3), padding="same"))model.add(Activation("relu"))model.add(BatchNormalization(axis=chanDim))model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Dropout(0.25))model.add(Conv2D(128, (3, 3), padding="same"))model.add(Activation("relu"))model.add(BatchNormalization(axis=chanDim))model.add(Conv2D(128, (3, 3), padding="same"))model.add(Activation("relu"))model.add(BatchNormalization(axis=chanDim))model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Dropout(0.25))model.add(Flatten())model.add(Dense(1024))model.add(Activation("relu"))model.add(BatchNormalization())model.add(Dropout(0.5))model.add(Dense(classes))model.add(Activation(finalAct))# return the constructed network architecturereturn model
5.实验结果展示
从上面的损失图中,我们可以看到训练损失在 20 个 epoch 结束之前非常平稳地下降。但是验证损失图波动很大。似乎训练时间超过 20 个 epoch 会导致过度拟合。最终,我们应用测试函数进行了测试:
数据集下载链接:https://download.csdn.net/download/weixin_40651515/22284807
数据集加代码下载资源:https://download.csdn.net/download/weixin_40651515/22286694
代码运行环境配置:python3.6.5,tensorflow==1.12,keras==2.2.4
基于VGG的图像多标签分类算法详解及实践相关推荐
- NEAT(NeuroEvolution of Augmenting Topologies)算法详解与实践(基于NEAT-Python)
NEAT(NeuroEvolution of Augmenting Topologies)算法详解与实践(基于NEAT-Python) NEAT算法详解 NEAT算法概述 NEAT编码方案 结构突变 ...
- 基于多相滤波器的数字信道化算法详解(Python, Verilog代码已开源)
基于多相滤波器的数字信道化算法详解 推导过程 总结 仿真 本文详细介绍了基于多相滤波器的数字信道化算法的推导过程, 如果您在阅读的过程中发现算法推导过程中有任何错误, 请不吝指出. 此外, 进入我的G ...
- 毫米波雷达系列 | 基于前后向空间平滑的MUSIC算法详解
毫米波雷达系列 | 基于前后向空间平滑的MUSIC算法详解 文章目录 毫米波雷达系列 | 基于前后向空间平滑的MUSIC算法详解 DOA阵列模型 MUSIC算法 空间平滑算法 整体流程 仿真代码 忙了 ...
- id3算法c语言实现,从ID3到C5.0的故事:算法详解及实践应用
原标题:从ID3到C5.0的故事:算法详解及实践应用 在前面,我们分别概述性地介绍了决策树的基本知识: 1.算法概述 ID3(Iterative Dichotomiser3)算法可以说决策树算法中最著 ...
- Logistic回归分类算法详解
我们来讨论另外一种被广泛应用的分类算法- Logistic 回归.在讲解这个概念之前,我们先来聊一个题外话-"Logistic regression"的中文译法."reg ...
- NLP --- 文本分类(基于LDA的隐语意分析训练算法详解)
上一节详细介绍了什么是LDA,详细讲解了他的原理,大家应该好好理解,如果不理解,这一节就别看了,你是看不懂的,这里我在简单的叙述LDA的算法思想: 首先我们只拥有很多篇文本和一个词典,那么我们就可以在 ...
- TF-IDF算法详解与实践
TF-IDF算法 文章目录 TF-IDF算法 1.TF-IDF算法介绍 2.TF-IDF的应用 3.怎么使用TF-IDF 3.1 sklearn实现TF-IDF算法 3.2 参数介绍 4.TF-IDF ...
- 基于matlab的图像形状与分类毕业设计(含源文)
基于matlab的图像形状与分类 摘 要 数字图像处理是一门新兴技术,随着计算机硬件的发展,数字图像的实时处理已经成为可能,由于数字图像处理的各种算法的出现,使得其处理速度越来越快,能更好的为人们服务 ...
- 多标签分类算法的研究进展
1. 机器学习中的分类问题 在机器学习方向的相关研究中,分类问题可以被分为二分类问题.多分类问题及多标签分类问题.二分类问题即二元分类问题,其中某个样本只有"属于"或 &q ...
- 基于朴素贝叶斯的文本分类算法
基于朴素贝叶斯的文本分类算法 摘要:常用的文本分类方法有支持向量机.K-近邻算法和朴素贝叶斯.其中朴素贝叶斯具有容易实现,运行速度快的特点,被广泛使用.本文详细介绍了朴素贝叶斯的基本原理,讨论多项式模 ...
最新文章
- Chapter 0: 引论
- 栈与队列7——单调栈结构(进阶问题)
- Jumping Monkey 并查集,反向思维
- 【线性规划与网络流24题】孤岛营救问题 分层图
- mysql学习整理(一)
- SAP Spartacus Org Unit明细页面的设计原理
- xor和路径(codevs 2412)
- android 同步list数据,android SharedPreferences保存list数据
- NOI2003 文本编辑器
- rgba转16进制颜色
- 2022年R2移动式压力容器充装上岗证题库及在线模拟考试
- 作为非计算机专业的我,是如何拿下软考软件设计师的?
- 看点视频解析去水印原理分析过程及源码,rowkey的秘密
- 1.2 px30驱动移植-网卡驱动调试思路
- 一款简单好用的开源文档管理系统
- 关于 Win10 截图 截屏 原生截图工具 基础使用
- 使用ImageMagick对图片进行全面压缩
- oracle 把结果加上百分号_用一条sql语句显示数据百分比并加百分号
- JNDI学习总结(三)——Tomcat下使用Druid配置JNDI数据源
- MVC实现SQL多表查询并导出表格