camvid数据集介绍_fastai 官方教程之查看数据
本文為fastai官方教程編譯版本。若有錯誤,歡迎指正。
總目錄:
- 查看數據:本節為初級教程,介紹怎樣快速的查看你的數據和模型預測結果。
- 推理學習器(Inference Learner):本節為中級教程,介紹怎樣為(模型)推理創建學習器。
- 自定義類ItemList(Custom ItemList):本節為高級教程,介紹如何創建類ItemBase與類ItemList。
- 使用極小的代價實現深度學習:本節介紹如何使用較少的GPU資源實現推理,和避免重啟筆記內核的時間。
查看數據
本文目錄:
- 查看輸入與輸出
- 視覺任務
- 分類問題
- 多標簽問題
- 回歸任務示例
- 分割任務示例
- 文本任務
- 語言模型
- 文本分類
- 列表(Tabular)
查看輸入與輸出
在本節教程中,我們將介紹如何在一個API中查看視覺任務、文本任務或者列表應用中的模型輸入與輸出。我們將處理不同的任務,而且每次都在DataBunch中使用data block API來獲取數據、查看如何使用show_batch方法查看部分輸入、訓練合適地Learner后用show_results方法查看模型的實際輸出。
注意:照例,此頁面從Notebook生成,您可以在fasti git分支(https://github.com/fastai/fastai)中docs_src文件夾找到該筆記。這些示例旨在快速運行,所以我們使用部分示例數據集(且使用ResNet18作為主干網絡,不進行長時間訓練)。您可以更改任一參數來進行自己的實驗!視覺
為了快速訪問fastai內部的所有視覺函數,我們使用通用的 Import 語句:
from fastai.vision import *
分類問題
讓我們使用MINIST手寫體數據集作為示例數據集:
它是用imagenet結構建立的,因此我們使用它來加載我們的訓練和驗證數據集,然后對其進行標記、變換、將其轉換為ImageDataBunch,最終對其進行規范化。
data = (ImageList.from_folder(mnist).split_by_folder() .label_from_folder().transform(tfms, size=32).databunch().normalize(imagenet_stats))在DataBunch中正確設置好您的數據之后,我們可以調用函數 data.showbatch() 查看(可視化)數據。
data.show_batch()請注意,在顯示帶有標簽的圖像之前,圖像會自動進行歸一化處理(從文件夾名稱推斷)。如果默認值5太大,我們可以指定行數和限定圖形的大小。
data.show_batch(rows=3, figsize=(4,4))現在,讓我們創建一個 Learner 對象來訓練分類器。
learn = cnn_learner(data, models.resnet18, metrics=accuracy)learn.fit_one_cycle(1,1e-2) learn.save('mini_train')我們的模型迅速達到了91%左右的準確率,接下來讓我們看下模型在一組驗證樣本上的表現。我們使用 show_results 方法實現。
learn.show_results()由于驗證集通常是經過排序的,因此我們僅獲得了屬于同一類的圖像。然后,我們可以再次指定行數、圖形大小以及要進行預測的數據集進行查看。
learn.show_results(ds_type=DatasetType.Train, rows=4, figsize=(8,10))多標簽問題
現在讓我們使用planet數據集上進行演示,其(與其他數據集的)不同之處在于每個圖像可以具有多個標簽(而不僅僅是一個標簽)
planet = untar_data(URLs.PLANET_TINY) planet_tfms = get_transforms(flip_vert=True, max_lighting=0.1, max_zoom=1.05, max_warp=0.)這里每張圖片的標簽都存儲在labels.csv文件中。我們需要在文件名中添加前綴'train'和后綴'.jpg',并設定每個標簽之間用空格分開。
data = (ImageList.from_csv(planet, 'labels.csv', folder='train', suffix='.jpg').split_by_rand_pct().label_from_df(label_delim=' ').transform(planet_tfms, size=128).databunch().normalize(imagenet_stats))我們可以通過函數data.show_batch來查看數據。
data.show_batch(rows=2, figsize=(9,7))然后我們可以相當輕松的創建Learner對象和進行嘗試性訓練。
learn = cnn_learner(data, models.resnet18) learn.fit_one_cycle(5,1e-2) learn.save('mini_train')要查看實際的預測結果,我們只需要運行方法learn.show_results()即可。
learn.show_results(rows=3, figsize=(12,15))回歸問題
對于接下來這個示例,我們使用BIWI頭部姿態(https://data.vision.ee.ethz.ch/cvl/gfanelli/head_pose/head_forest.html#db)數據集。在人物圖像中,我們要找出人臉的中心。在fastai文檔中,我們已經建立了一個包含有200張圖像數據的BIWI數據集子樣本集,同時將每個圖像中的中心坐標對應文件名以字典的形式進行存儲。
為了獲取數據,我們使用這個字典去標記我們的項目。我們同樣使用PointsItemList使目標類型為ImagePoints(用于確保可以正確的應用數據增強)。當調用函數transform時我們確保設置tfm_y=True.
data = (PointsItemList.from_folder(biwi).split_by_rand_pct(seed=42).label_from_func(lambda o:fn2ctr[o.name]).transform(get_transforms(), tfm_y=True, size=(120,160)).databunch().normalize(imagenet_stats))接著,我們可以使用data.show_batch()可視化我們的數據.
data.show_batch(row=3, figsize=(9,6))我們在使用函數learn.show_results()之前先嘗試性訓練下我們的模型。
learn = cnn_learner(data, models.resnet18, lin_ftrs=[100], ps=0.05) learn.fit_one_cycle(5, 5e-2) learn.save('mini_train') learn.show_results(rows=3)分割示例
本節我們將使用camvid數據集(至少是其中的一部分數據),我們需要預測數據圖像中的每一個像素點的類別。在“images”子文件夾中的每一幅圖像都相當于對應的圖像“labels”,也就是圖像的分割掩碼。
我們從'codes.txt'文件中讀取類別信息和每個圖像與其相關掩碼名稱的映射關系。
codes = np.loadtxt(camvid/'codes.txt', dtype=str) get_y_fn = lambda x: path_lbl/f'{x.stem}_P{x.suffix}'數據模塊API允許我們快速獲取 DataBunch中的任何內容,同時我們可以通過函數show_batch查看。
data = (SegmentationItemList.from_folder(path_img).split_by_rand_pct().label_from_func(get_y_fn, classes=codes).transform(get_transforms(), tfm_y=True, size=128).databunch(bs=16, path=camvid).normalize(imagenet_stats))data.show_batch(rows=2, figsize=(7,5))接下來,我們訓練Unet網絡幾個輪次(epochs)。
注意:本次訓練是相當不穩定的,使用更多地訓練輪次與更全的數據集可以獲得更好的結果。learn = unet_learner(data, models.resnet18)learn.fit_one_cycle(3,1e-2)learn.save('mini_train')總耗時(00:23)
learn.show_results()文本
本節介紹在文本上的應用,同樣地讓我們從導入所有需要函數開始。
from fastai.text import *語言模型
首先我們在imdb子數據集上微調(fine-tune)一個預訓練模型。
函數data.show_batch()同樣也可以在這里使用。對于語言模型來說,它向我們展示了沿著批處理維度每個文本序列的開頭(目標是猜下一個單詞)。
data_lm.show_batch()現在讓我們定義一個語言模型學習器。
總耗時(Total time):00:25
然后我們可以查看結果。它會顯示確定數量的單詞(默認20),以及之后的20個目標單詞和預測的單詞。
learn.show_results()文本分類
本節介紹一個關于文本分類的例子。如果使用保存的編碼器,我們要使用與語言模型相同的詞匯表。
這里通過函數 show_batch 顯示了每次評審(review)的開始(信息)以及其目標(target)。
data_clas.show_batch()然后我們可以使用之前的編碼器訓練一個分類器。
learn = text_classifier_learner(data_clas, AWD_LSTM) learn.load_encoder('mini_train_encoder') learn.fit_one_cycle(2, slice(1e-3,1e-2))learn.save('mini_train_clas')總耗時(Total time):00:25
learn.show_results()列表
本節介紹列表數據中的應用范例。首先讓我們導入全部所需要的函數。
from fastai.tabular import *我們使用adult數據集(https://archive.ics.uci.edu/ml/datasets/adult)中的一部分數據。當我們讀取csv文件時,我們需要指定相關變量、類別變量、連續變量和要使用的處理器。
adult = untar_data(URLs.ADULT_SAMPLE)df = pd.read_csv(adult/'adult.csv') dep_var = 'salary' cat_names = ['workclass', 'education', 'marital-status', 'occupation', 'relationship', 'race', 'sex', 'native-country'] cont_names = ['education-num', 'hours-per-week', 'age', 'capital-loss', 'fnlwgt', 'capital-gain'] procs = [FillMissing, Categorify, Normalize]然后,我們可以使用數據塊API在使用data.show_batch()之前獲取所有內容。
data = (TabularList.from_df(df, path=adult, cat_names=cat_names, cont_names=cont_names, procs=procs).split_by_idx(valid_idx=range(800,1000)).label_from_df(cols=dep_var).databunch())data.show_batch()
這里我們可以得到嘗試性訓練后的tabular_learner。
learn = tabular_learner(data, layers=[200,100], metrics=accuracy) learn.fit(5, 1e-2) learn.save('mini_train')總耗時(Total time):00:19
我們可以使用learn.show_results()(查看結果)。
learn.show_results()總結
以上是生活随笔為你收集整理的camvid数据集介绍_fastai 官方教程之查看数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python接口测试第二期_python
- 下一篇: python开发web运维工具_Pyth