iT邦幫忙

2026 iThome 鐵人賽

DAY 7
0
AI Engineering

從 Pixel 到 AI:30 天影像辨識入門之路系列 第 7 篇

Day7 正式認識 HAM10000:開始探索皮膚病灶資料

  • 分享至 

  • xImage
  •  

前幾天我們都是從 HAM10000 中拿出其中一張圖片,練習 Pixel、RGB、Resize 和 Image Preprocessing,但如果接下來真的要拿 HAM10000 訓練模型,只看一張圖片當然不夠
在開始訓練之前,我們至少要先知道這個 Dataset 裡到底有什麼?有幾張圖片?分成哪些類別?每個類別的圖片數量一樣嗎?
所以今天先不急著建立模型,而是正式來認識接下來會一路使用的 HAM10000 Dataset


一、HAM10000 是什麼?

HAM10000 的全名是 Human Against Machine with 10000 training images,是一個皮膚病灶影像資料集,資料集中包含 10,015 張皮膚鏡(dermatoscopic)影像,並將病灶分成 7 個類別
我們這次使用的是 Kaggle 上整理好的 HAM10000:

import kagglehub

path = kagglehub.dataset_download(
    "kmader/skin-cancer-mnist-ham10000"
)
print(path)

下載完成後,除了前幾天使用的圖片資料夾之外,還會看到HAM10000_metadata.csv ,這個 CSV 就像是這 10,015 張圖片的資料表


二、先看看 Metadata 裡有什麼

在開始建立模型之前,我們要先知道自己手上的資料有哪些欄位、資料是否完整,以及資料的分布情況,我們可以使用print(df.info()),看看資料表的欄位,因為如果連自己的 Dataset 長什麼樣子都不知道,就直接開始訓練模型,即使最後得到一個很高的 Accuracy,也很難知道這個結果到底可不可信

使用 Pandas 讀取:

import pandas as pd
import os

metadata_path = os.path.join(path, "HAM10000_metadata.csv")
df = pd.read_csv(metadata_path)

df.head()

https://ithelp.ithome.com.tw/upload/images/20260920/20169251JdAnAqfRkE.png

  • lesion_id 病灶編號
  • image_id 圖片編號
  • dx 診斷/病灶類別
  • dx_type 診斷確認方式
  • age 年齡
  • sex 性別
  • localization 病灶所在部位

三、HAM10000 有哪些病灶類別?

接著可以看看 dx 到底有哪些不同的值:

print(df["dx"].unique())

得到
['bkl' 'nv' 'df' 'mel' 'vasc' 'bcc' 'akiec']
因此可以確認有7種病灶類別


四、每個類別的圖片一樣多嗎?

知道有 7 類之後,下一個需要知道的是每一類別的圖片數量有多多?
可以直接使用:

class_counts = df["dx"].value_counts() 
print(class_counts)

再將數據轉為視覺化的圖表

import matplotlib.pyplot as plt
class_counts.plot(kind="bar")
plt.title("HAM10000 Class Distribution")
plt.xlabel("Class")
plt.ylabel("Number of Images")
plt.xticks(rotation=45)
plt.show()

https://ithelp.ithome.com.tw/upload/images/20260920/201692514n5jjGjtY3.png
畫出來之後,我們很快發現每個類別的圖片數量差非常多,其中 nv 的圖片數量特別多,而有些類別的圖片則少很多,這種現象稱為**「Class Imbalance(類別不平衡)」**


五、圖片數量不平均會怎樣?

假設我們今天要教模型分辨「貓」和「狗」,但準備的資料是:
貓:9,500 張、狗:500 張

模型在訓練過程中會看到非常多貓,卻很少看到狗,這時候即使模型很常猜「貓」,整體 Accuracy 看起來可能還是不錯,但這不一定代表模型真的學得很好

HAM10000 也有類似的問題,如果某一個病灶類別的圖片非常多,而其他類別非常少,那麼只看整體正確率,就可能讓我們對模型產生錯誤的判斷,所以在開始訓練之前,我們要先知道「我的資料本身是不是平衡的?」,那麼如果不平衡的話要怎麼辦呢,我們下一篇來討論Class Imbalance


上一篇
Day6 圖片丟進 AI 前為什麼要先處理?Image Preprocessing
下一篇
Day8 資料不平衡怎麼辦?認識 Class Imbalance 的處理方式
系列文
從 Pixel 到 AI:30 天影像辨識入門之路 共 15 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言