本日會開始進入最主體的Classification的部份,首先就從資料集開始介紹吧!這次會使用的是MedMNIST這個資料集,差不多就是Medical版的MNIST的意思。
MedMNIST基本上是個包含了各種不同類型的醫療影像的資料集,分別由12個不同的2D醫療影像集與6個不同的3D醫療影像集所組成。所對應的Task基本上也都是Classification問題,其中的RetinaMNIST雖說是Ordinal Regression,但其實本質上也是一種Classification。影像的解析度部份則都壓縮到了28x28(x28),都非常小,所以非常適合新手作為練習使用。目前已經出到第二版,所以才會加個v2,主要差異是新增3D的6個資料集。
簡單看這張來自官網的Overview其實應該就可以理解整個資料集的概況:
其餘詳細的部份,有興趣建議直接參考官網,本日的文章則會著重講解實際抓取下來使用的部份。
pip install medmnist
或是先前透過我提供的docker-compose.yml
安裝環境的朋友們應該也都已經有了(請參考requirements.txt)。
MedMNIST的函式庫內提供不少東西可以使用,尤其是還可以直接使用PyTorch的DataLoader,基本上直接套用再加上常見的訓練框架就可以開始做模型,可說是十分方便。
但實務上其實真正耗費大量時間的,往往是資料的準備及處理,撇除不太可能在這裡進行的標注,本系列文希望盡量模擬實際資料獲得的情形。
現在讓我們模擬較接近真實的情況,因此我們後續會採用一大筆影像檔再加上一個對照的csv檔案,這樣的形式開始。
所幸只要利用靈活的MedMNIST,以取得chestmnist
為例,輸入以下的程式碼
import medmnist
from medmnist.info import INFO, DEFAULT_ROOT
DATASET = 'chestmnist'
TEMP = '/tmp'
FOLDER = 'data'
POSTFIX = 'png'
def make_dataset() -> None:
for split in ["train", "val", "test"]:
print(f"Saving {DATASET} {split}...")
dataset = getattr(medmnist, INFO[DATASET]['python_class'])(
split=split, root=TEMP, download=True)
dataset.save(FOLDER, POSTFIX)
也可以直接在workspace
底下執行檔案
python src/make_dataset.py
等待片刻,執行好以後,就可以獲得像這樣的結構
如此一來,就準備好資料了!