iT邦幫忙

2023 iThome 鐵人賽

DAY 28
0
AI & Data

30天把AI知識傳授給女友系列 第 28

Day28 來找找看蟲子在哪裡 Debug

  • 分享至 

  • xImage
  •  

昨天訓練資料時遇到 RuntimeError: output with shape [1, 60, 60] doesn't match the broadcast shape [3, 60, 60] 的錯誤,因此我猜測是圖片有問題,今天寫了一個程式來看看資料集哪裡出錯了,首先我們引用需要用到的模組:

import pandas as pd
import numpy as np
import os
from PIL import Image

這邊與之前相同,把所有圖片的路徑讀取進來:

fasion_df = pd.read_csv("./fashion_product_images_small/myntradataset/styles.csv", on_bad_lines='skip')
fasion_df['image'] = fasion_df.apply(lambda row: str(row['id']) + ".jpg", axis=1)
fasion_df = fasion_df.reset_index(drop=True)
image_name =  fasion_df['image'].to_numpy()
print("圖片總數: ", len(image_name))
image_path = [os.path.join("./fashion_product_images_small/myntradataset/images",i) for i in image_name ]

此處我們用到 PIL.Image中的 getbands() 方法把圖片的 Channels 顯示出來:

img_pil =  Image.open(image_path[0])
print(img_pil.getbands())
print(len(img_pil.getbands()))

輸出結果:

('R', 'G', 'B')
3

接著我寫了一個迴圈讀取所有資料集的圖片,第一個迴圈if os.path.isfile(img_path):是判斷圖片的路徑有沒有存在,第二個是判斷 channels 數是不是 RGB 長度為3 if len(img_pil.getbands()) != 3:

for img_path in image_path:
    if os.path.isfile(img_path):
        img_pil =  Image.open(img_path)
        if len(img_pil.getbands()) != 3:
            print("image channels not RGB: ", img_path)

    else:
        print("image path not exist: ", img_path)

輸出結果可以看到有很多 400 多筆圖片不是RGB,且有 5 筆圖片不存在,以下為截圖片段:

https://ithelp.ithome.com.tw/upload/images/20231003/20153503kKbQP7pV9u.png

結語

明天我們要針對這些例外來修正 DataLoader ,修正好之後再開始訓練模型。


上一篇
Day27 寫程式遇到解不掉的BUG就明天再說吧~
下一篇
Day29 使用 mobileNet 來訓練時尚資料集
系列文
30天把AI知識傳授給女友30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言