中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

keras 讀取多標簽圖像數據的方法

發布時間:2020-06-23 10:53:35 來源:億速云 閱讀:397 作者:清晨 欄目:開發技術

不懂keras 讀取多標簽圖像數據的方法?其實想解決這個問題也不難,下面讓小編帶著大家一起學習怎么去解決,希望大家閱讀完這篇文章后大所收獲。

我所接觸的多標簽數據,主要包括兩類:

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 讀取多標簽圖像數據的方法內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西乌珠穆沁旗| 当涂县| 祁连县| 砚山县| 旌德县| 宁南县| 杭锦旗| 青田县| 都昌县| 永修县| 洛阳市| 远安县| 宝应县| 武平县| 乡宁县| 汉沽区| 娄底市| 平泉县| 榕江县| 济南市| 托克逊县| 普宁市| 任丘市| 桐梓县| 衡水市| 新兴县| 措美县| 盘山县| 昌邑市| 临夏市| 武安市| 扎鲁特旗| 加查县| 岗巴县| 四会市| 大姚县| 昭通市| 沅陵县| 邹平县| 南宫市| 芦山县|