iT邦幫忙

2022 iThome 鐵人賽

DAY 5
0
AI & Data

了解AI多一點點系列 第 5

【Day 5】影像辨識 -- 資料預處理

  • 分享至 

  • xImage
  •  

統一圖片大小

在我們開始進行模型訓練前還有一步要先做處理,由於我們所獲得的資料集可能大小不一而影響訓練模型,因此我們要先將所有照片統一大小。

import os
import cv2
import glob
import numpy as np

images = []
labels = []
size = (40, 40)

# load all pictures into list and give them labels
for folders in glob.glob("PetImages/*"):
   for filename in os.listdir(folders):
       type = folders[-3: len(folders)]
       img = cv2.imread(os.path.join(folders, filename))
       
       if img is not None:
           img = cv2.resize(img, dsize = size)
           images.append(img)
           
       if (type == "Cat"):
           labels.append(0)
       elif (type == "Dog"):
           labels.append(1)

執行如上述的程式碼,最終可以將所有貓狗的照片在調整成統一尺寸後,儲存在images這個list之中,而他們對應的label也會存在labels這個list之中。兩個list當中index相同的資料即為對應資料。

程式碼說明:
一開始先宣告images list儲存修改好尺寸的照片、labels list儲存對應的貓狗類別。以glob.glob獲得Dog資料夾和Cat資料夾位址,接著分別遍歷兩個資料夾,type變數紀錄該照片為貓還是狗(type變數只會是Cat或者是Dog,因為type變數所取的值為先前glob.glob獲得的位址末三字元,即兩資料夾名稱)。利用cv2套件中的resize將照片大小調整為40 x 40,調整完後就丟至images list之中。接著判斷type變數為Cat或是Dog,若為Cat,我們給予標籤為0;Dog則給予標籤1。

資料量不足時的小撇步

若是讀者的資料集為自己進行搜集,而導致資料筆數可能不夠時,筆者這邊推薦一個方法可能可以幫助資料筆數的提升,但若是能夠用更好的方法收集到更多不同的資料還是建議不要使用。

首先是原圖的展示,我們先將大小設定為100 x 100,方便觀察。

from PIL import Image

img = Image.open("cat.jpg")
img = img.resize((100, 100))
display(img)

https://ithelp.ithome.com.tw/upload/images/20220831/20150784o6a0yHF7nw.png

接著執行如下圖程式碼,分別裁切左上、右上、右下以及左上區塊,如此產生位置稍微不同的相片。(crop函式的前兩個參數為新圖片左上頂點於原圖片的x座標以及y座標,而後兩個參數參數為新圖片右下頂點於原圖片的x坐標以及y座標)

newImg1 = img.crop((10, 10, 100, 100))
newImg1 = newImg1.resize((100, 100))
newImg2 = img.crop((0, 10, 90, 100))
newImg2 = newImg2.resize((100, 100))
newImg3 = img.crop((0, 0, 90, 90))
newImg3 = newImg3.resize((100, 100))
newImg4 = img.crop((10, 0, 100, 90))
newImg4 = newImg4.resize((100, 100))
display(newImg1)
display(newImg2)
display(newImg3)
display(newImg4)

結果如下圖,此種方法增加的圖片會導致圖片集內容相似可能導致訓練出的模型,對於外來圖片的辨識度降低,因此筆者認為可以的話盡量不用,在此只是提出此一辦法,接下來所使用的資料並未使用此方法進行資料擴充。
https://ithelp.ithome.com.tw/upload/images/20220831/20150784Dst40CLIPY.png


上一篇
【Day 4】影像辨識 -- 資料集取得
下一篇
【Day 6】影像辨識 -- 區分訓練集、測試集 轉換型態
系列文
了解AI多一點點30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言