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 相关文章推荐
python转换摩斯密码示例
Feb 16 Python
tensorflow实现简单的卷积网络
May 24 Python
解决csv.writer写入文件有多余的空行问题
Jul 06 Python
Win8.1下安装Python3.6提示0x80240017错误的解决方法
Jul 31 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
Dec 12 Python
Python常用模块之requests模块用法分析
May 15 Python
解决python3 安装不了PIL的问题
Aug 16 Python
Python代码一键转Jar包及Java调用Python新姿势
Mar 10 Python
Python 统计位数为偶数的数字代码详解
Mar 15 Python
解决Jupyter因卸载重装导致的问题修复
Apr 10 Python
Django修改app名称和数据表迁移方案实现
Sep 17 Python
用Python selenium实现淘宝抢单机器人
Jun 18 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
jQuery向下滚动即时加载内容实现的瀑布流效果
2016/01/07 PHP
静态的动态续篇之来点XML
2006/08/15 Javascript
动态创建的表格单元格中的事件实现代码
2008/12/30 Javascript
模仿jQuery each函数的链式调用
2009/07/22 Javascript
js操作ajax返回的json的注意问题!
2010/02/23 Javascript
JQUERY简单按钮轮换选中效果实现方法
2015/05/07 Javascript
react-native使用react-navigation进行页面跳转导航的示例
2017/09/07 Javascript
详解JS构造函数中this和return
2017/09/16 Javascript
详解如何在Angular优雅编写HTTP请求
2018/12/05 Javascript
JS闭包经典实例详解
2018/12/20 Javascript
angularjs自定义过滤器demo示例
2019/08/24 Javascript
JS实现可用滑块滑动的缓动图代码
2019/09/01 Javascript
js正则匹配多个全部数据问题
2019/12/20 Javascript
原生js实现自定义难度的扫雷游戏
2021/01/22 Javascript
[05:08]DOTA2-DPC中国联赛3月6日Recap集锦
2021/03/11 DOTA
Python深入学习之特殊方法与多范式
2014/08/31 Python
简单介绍Python的轻便web框架Bottle
2015/04/08 Python
python类装饰器用法实例
2015/06/04 Python
python并发2之使用asyncio处理并发
2017/12/21 Python
Python如何实现转换URL详解
2019/07/02 Python
pytorch使用 to 进行类型转换方式
2020/01/08 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
2020/02/28 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
2020/07/01 Python
分享一个H5原生form表单的checkbox特效代码
2018/02/26 HTML / CSS
《九色鹿》教学反思
2014/02/27 职场文书
读书伴我成长演讲稿
2014/05/07 职场文书
运动会广播稿150字(9篇)
2014/09/20 职场文书
2014普法依法治理工作总结
2014/12/18 职场文书
教师党员承诺书2015
2015/01/21 职场文书
综合测评个人总结
2015/03/03 职场文书
观后感的写法
2015/06/19 职场文书
小学体育组工作总结
2015/08/13 职场文书
趣味运动会广播稿
2015/08/19 职场文书
爱岗敬业事迹材料
2019/06/20 职场文书
年会邀请函的格式及范文五篇
2019/11/02 职场文书
Python import模块的缓存问题解决方案
2021/06/02 Python