基于Multi-label-Inception-net实现自己的多标签分类

基于Multi-label-Inception-net实现自己的多标签分类

开源代码:multi-label-Inception-net
最近在做多标签分类的相关工作,测试了github上的开源代码:multi-label-Inception-net,代码基于tensorflow1.8.0,CUDA9的环境。
简单记录一下基于该代码进行自己的多标签分类训练以及测试方法。

算法简介

该代码较为简单,主要就是利用inceptionv3的模型,修改最后一层结构,修改后的最后一层为全连接层,该层的输入是原始incepv3中的’pool_3/_reshape:0’,输出是长度为类别个数的向量。再将输出进行sigmoid处理,最终输出为onehot形式,输出为1的位置对应的标签即为预测标签。
代码中的对应部分:

在这里插入图片描述

在这里插入图片描述
数据集制作
在github中将源码clone到本地后,首先需要针对README中的介绍修改自己的数据集格式。
首先将所有图片放到一个文件夹内,可以直接按照README中的路径命名:images/multi-label。
再将所有标签名称存放到labels.txt文件中,每行为一个类别。
最后需要为每个图像准备gt标签的文件。命名文件<image_file_name.jpg> .txt 例如图像名称为car.jpg,则标签文件是car.jpg.txt。
对于每一个标签文件,文件中只需要存放该图片的类别信息,同样是每行对应一个类别。例如:
在这里插入图片描述
模型训练
可以直接使用retrain.sh来训练,其中,训练步数–how_many_training_steps 500建议调高一点,retrain.py中的数据路径需要指定,测试和验证集比例等参数也可以根据需要调整。
在这里插入图片描述
在这里插入图片描述
模型测试
源码中,模型的测试评估是放在了训练末尾,demo的运行是使用了label_image.py脚本,命令为:python label_image.py <image_name>,脚本是针对某一张图片进行测试,输出为排好序后的类别输出以及类别得分,排序是基于得分进行从大到小的排序。
训练中,标签的正负是基于0.5的阈值进行判断的,在具体的使用过程中,也可以取topk的结果作为输出。

总之,算法效果还是不错的。

猜你喜欢

转载自blog.csdn.net/weixin_43273742/article/details/107733625
今日推荐