不懂keras 讀取多標簽圖像數(shù)據(jù)的方法?其實想解決這個問題也不難,下面讓小編帶著大家一起學習怎么去解決,希望大家閱讀完這篇文章后大所收獲。
我所接觸的多標簽數(shù)據(jù),主要包括兩類:
1、一張圖片屬于多個標簽,比如,data:一件藍色的上衣圖片.jpg,label:藍色,上衣。其中l(wèi)abel包括兩類標簽,label1第一類:上衣,褲子,外套。label2第二類,藍色,黑色,紅色。這樣兩個輸出label1,label2都是是分類,我們可以直接把label1和label2整合為一個label,直接編碼,比如[藍色,上衣]編碼為[011011]。這樣模型的輸出也只需要一個輸出。實現(xiàn)了多分類。
2、一張圖片屬于多個標簽,但是幾個標簽不全是分類。比如data:一張結(jié)婚現(xiàn)場的圖片.jpg,label:高興,3(表示高興程度)。這時label1是分類,label2時回歸。這種情況就需要多個標簽,模型需要多個輸出。【其實最好的例子,就是目標檢測,不但檢測什么物體(分類),還要檢測到物體的坐標(回歸)】
在這里我主要針對第二種情況加以說明:
keras的ImageDataGenerator.flow_from_directory 只能簡單的讀取單標簽數(shù)據(jù)。所以我自己寫了個data_generate,來生成bathsize多標簽數(shù)據(jù)
#此模塊主要用來讀取數(shù)據(jù)集,返回一個數(shù)據(jù)可迭代對象 #重點是,此模塊分批次的把圖像讀入內(nèi)存的,而不是一次全讀入,有效的減少了內(nèi)存溢出 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): # 中間數(shù)組 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)) #處理圖片數(shù)據(jù)集 all_picture_name = os.listdir(data_path) #打亂數(shù)據(jù)集 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: # 若是灰度圖則轉(zhuǎn)為三通道 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,一個單獨數(shù)組,batch_score一個單獨的數(shù)組 ''' 注釋掉的這段代碼生成的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讀取多標簽圖像數(shù)據(jù)的方法-創(chuàng)新互聯(lián)
當前網(wǎng)址:http://www.chinadenli.net/article28/dpiejp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供ChatGPT、全網(wǎng)營銷推廣、品牌網(wǎng)站建設、網(wǎng)站維護、面包屑導航、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容