keras 读取多标签图像数据方式


Posted in Python onJune 12, 2020

我所接触的多标签数据,主要包括两类:

1、一张图片属于多个标签,比如,data:一件蓝色的上衣图片.jpg,label:蓝色,上衣。其中label包括两类标签,label1第一类:上衣,裤子,外套。label2第二类,蓝色,黑色,红色。这样两个输出label1,label2都是是分类,我们可以直接把label1和label2整合为一个label,直接编码,比如[蓝色,上衣]编码为[011011]。这样模型的输出也只需要一个输出。实现了多分类。

2、一张图片属于多个标签,但是几个标签不全是分类。比如data:一张结婚现场的图片.jpg,label:高兴,3(表示高兴程度)。这时label1是分类,label2时回归。这种情况就需要多个标签,模型需要多个输出。【其实最好的例子,就是目标检测,不但检测什么物体(分类),还要检测到物体的坐标(回归)】

在这里我主要针对第二种情况加以说明:

keras的ImageDataGenerator.flow_from_directory 只能简单的读取单标签数据。所以我自己写了个data_generate,来生成bathsize多标签数据

keras 读取多标签图像数据方式

#此模块主要用来读取数据集,返回一个数据可迭代对象
#重点是,此模块分批次的把图像读入内存的,而不是一次全读入,有效的减少了内存溢出
import os
import cv2
import numpy as np
import keras
from random import shuffle

#目标图像大小
image_size= (229, 229, 3)
#类别编码
class_dict=dict(zip(['neg','pos','neu'],[0,1,2]))
#处理.txt文件,并加载图片文件夹里的图片名
#txt_path,txt文件路径,data_path,图片文件夹路径

def read_txt(txt_path,data_path):
 # 中间数组
 labels_class = []
 labels_score = []
 with open(txt_path) as f:
 lines_list = f.readlines()
 for lines in lines_list:
  line = lines.split(' ')
  labels_class.append(line[0].rstrip(".jpg"))
  labels_score.append(line[2])
 labels_dict=dict(zip(labels_class,labels_score))
 #处理图片数据集
 all_picture_name = os.listdir(data_path)
 #打乱数据集
 shuffle(all_picture_name)
 all_picture_path=[os.path.join(data_path,one)for one in all_picture_name]
 return all_picture_name,all_picture_path,labels_dict

class data_generate:
 def __init__(self,all_piture_name,all_picture_path,labels_dict,batch_size):
 self.index=0
 self.all_picture_name=all_piture_name
 self.all_picture_path=all_picture_path
 self.labels_dict=labels_dict
 self.batch_size = batch_size
 def get_mini_batch(self):
  while True:
  batch_images=[]
  batch_labels=[]
  batch_class=[]
  batch_score=[]
  for i in range(self.batch_size):
  if(self.index==len(self.all_picture_name)):
   self.index=0

  bgr_image = cv2.imread(self.all_picture_path[self.index])
  if len(bgr_image.shape) == 2: # 若是灰度图则转为三通道
   bgr_image = cv2.cvtColor(bgr_image, cv2.COLOR_GRAY2BGR)
  rgb_image = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2RGB)
  rgb_image=cv2.resize(rgb_image,(image_size[0], image_size[1]))
  img = np.array(rgb_image)
  img=keras.applications.inception_v3.preprocess_input(img)
  batch_images.append(img)
  #label=[]
  label1=self.all_picture_name[self.index].rstrip(".jpg")
  batch_class.append(keras.utils.to_categorical(class_dict[label1[:3]], 3))
  batch_score.append(np.array(self.labels_dict[label1]))
  #batch_labels.append(label)
  self.index+=1
  batch_images=np.array(batch_images)
  batch_class = np.array(batch_class)
  batch_score = np.array(batch_score)
  #注意label的生成batch_class,一个单独数组,batch_score一个单独的数组
  '''
  注释掉的这段代码生成的label是错误的。
  batch_images=[]
  batch_labels=[]
  for i in range(self.batch_size):
  if(self.index==len(self.images)):
   self.index=0
  batch_images.append(self.images[self.index])
  batch_labels.append(self.labels[self.index])
  self.index+=1
  batch_images=np.array(batch_images)
  batch_labels=np.array(batch_labels)
  yield batch_images,batch_labels
  '''
  yield batch_images,[batch_class,batch_score]

接下来就是放入keras.fit_generate中了

history=model.fit_generator(generator=train_data.get_mini_batch(),
   steps_per_epoch=146,
   epochs=300,
   validation_data=test_data.get_mini_batch(),
   validation_steps=34,
   )

以上这篇keras 读取多标签图像数据方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
打开电脑上的QQ的python代码
Feb 10 Python
python操作MySQL 模拟简单银行转账操作
Sep 27 Python
python中Apriori算法实现讲解
Dec 10 Python
基于python 处理中文路径的终极解决方法
Apr 12 Python
python验证码识别教程之利用投影法、连通域法分割图片
Jun 04 Python
对python生成业务报表的实例详解
Feb 03 Python
简单了解python中的与或非运算
Sep 18 Python
python验证码图片处理(二值化)
Nov 01 Python
python多项式拟合之np.polyfit 和 np.polyld详解
Feb 18 Python
Django微信小程序后台开发教程的实现
Jun 03 Python
Python中用xlwt制作表格实例讲解
Nov 05 Python
详解Python 3.10 中的新功能和变化
Apr 28 Python
Python数据可视化图实现过程详解
Jun 12 #Python
浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
Jun 12 #Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
Jun 12 #Python
解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
Jun 12 #Python
python + selenium 刷B站播放量的实例代码
Jun 12 #Python
解决Keras自带数据集与预训练model下载太慢问题
Jun 12 #Python
keras导入weights方式
Jun 12 #Python
You might like
叶罗丽:为什么大家对颜冰这对CP非常关心,却对金茉两人十分冷漠
2020/03/17 国漫
分页详解 从此分页无忧(PHP+mysql)
2007/11/23 PHP
PHP 年龄计算函数(精确到天)
2012/06/07 PHP
ThinkPHP中URL路径访问与模块控制器之间的关系
2014/08/23 PHP
JTrackBar水平拖动效果
2007/07/15 Javascript
JavaScript对象链式操作代码(jquery)
2010/07/04 Javascript
扩展javascript的Date方法实现代码(prototype)
2010/11/20 Javascript
JS 如果改变span标签的是否隐藏属性
2011/10/06 Javascript
javascript工具库代码
2012/03/29 Javascript
捕获浏览器关闭、刷新事件不同情况下的处理方法
2013/06/02 Javascript
jquery事件与函数的使用介绍
2013/09/29 Javascript
脚本合并提升javascript性能示例
2014/02/24 Javascript
JS制作图形验证码实现代码
2020/10/19 Javascript
JS给Array添加是否包含字符串的简单方法
2016/10/29 Javascript
jQuery插件FusionCharts实现的3D柱状图效果实例【附demo源码下载】
2017/03/03 Javascript
JavaScript数据结构之数组的表示方法示例
2017/04/12 Javascript
jQuery实现手势解锁密码特效
2017/08/14 jQuery
Vue项目pdf(base64)转图片遇到的问题及解决方法
2018/10/19 Javascript
详解小程序用户登录状态检查与更新实例
2019/05/15 Javascript
[46:28]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
解决Python 遍历字典时删除元素报异常的问题
2016/09/11 Python
Django中Forms的使用代码解析
2018/02/10 Python
Python如何发布程序的详细教程
2018/10/09 Python
python django生成迁移文件的实例
2019/08/31 Python
python3 实现函数写文件路径的正确方法
2019/11/27 Python
tensorflow之读取jpg图像长和宽实例
2020/06/18 Python
HTML5拖放功能_动力节点Java学院整理
2017/07/13 HTML / CSS
巴西最大的体育用品商城:Netshoes巴西
2016/11/29 全球购物
New Balance波兰官方商城:始于1906年,百年慢跑品牌
2017/08/15 全球购物
Hotels.com英国:全球领先的酒店住宿提供商
2019/01/24 全球购物
英国第一的市场和亚马逊替代品:OnBuy
2019/03/16 全球购物
大三自我鉴定范文
2013/10/05 职场文书
医学检验专业大学生求职信
2013/11/18 职场文书
责任担保书范文
2014/05/21 职场文书
小学校园文化建设汇报材料
2014/08/19 职场文书
毕业欢送晚会主持词
2019/06/25 职场文书