120種小狗影像傻傻分不清?用fastai訓練一個分類器
作者:一杯奶茶的功夫
連結:https://www.jianshu.com/p/ab35ed21df87
程式設計師轉行學什麼語言?
https://edu.csdn.net/topic/ai30?utm_source=csdn_bw
這篇文章會講解如何製作能夠分類120種小狗的影像分類器。
這篇文章中所講述的內容都是基於colab notebook和fastai技術的深度學習的應用。
為什麼使用colab?
-
使用colab的好處是,你不需要有任何顯示卡GPU,colab中提供了一塊免費的k80帶12G視訊記憶體的GPU
-
colab是google提供的一個免費的Jupyter notebook的環境,可以省去安裝它的功夫
為什麼使用fastai?
-
fastai是一種超級簡潔的深度學習工具,程式碼上甚至比當前Keras還要簡潔。
-
底層是pytorch,能夠提供高速的處理效能。
和之前文章中的兩個物種(貓和狗)的分類略有不同,這次使用的資料集全部是狗,需要把這些狗分到不同的類別中。也就是說,圖片之間特徵的區別的差異要比之前貓和狗分類的來的更加細微。
好吧,接下來我們看看如何動手製作。
1.在colab的作業本中配置fastai的環境
!curl https://course.fast.ai/setup/colab | bash
2.匯入fastai包
from fastai import *
from fastai.vision import *
3.載入kaggle.json
這裡我們準備從kaggle下載所需要的狗的資料集,如果你可以從其他地方得到資料集,那麼可以省略步驟3和4,按照自己的方法在環境中匯入資料集即可。
!mkdir /content/.kaggle/
!mkdir /content/data/dogsbreed/
PATH = "/content/data/dogsbreed/"
from google.colab import files
# load from upload dialog
uploaded = files.upload()
for fn in uploaded.keys():
with open(f'/content/.kaggle/{fn}', 'wb') as f:
f.write(uploaded[fn])
4.安裝kaggle環境
!chmod 600 /content/.kaggle/kaggle.json
!pip install kaggle
!cp /content/.kaggle/kaggle.json ~/.kaggle/kaggle.json
!kaggle config set -n path -v{/content}
import kaggle
!kaggle competitions download -p /content/data/dogsbreed/ dog-breed-identification
從結果中可以看到,我們已經從kaggle成功的下載了資料集檔案。
5.驗證GPU
torch.cuda.is_available()
#True
torch.backends.cudnn.enabled
#True
6.解壓縮檔案
! cd /content/data/dogsbreed && unzip labels.csv.zip
! cd /content/data/dogsbreed && unzip sample_submission.csv.zip
! cd /content/data/dogsbreed && unzip test.zip
! cd /content/data/dogsbreed && unzip train.zip
7.讀取label.csv
labels_df=pd.read_csv(f'{PATH}labels.csv')
labels_df.head()
這裡我們可以看到labels.csv中的前五條資料
8.檢視狗的類別
labels_df.pivot_table(index='breed',aggfunc=len).sort_values('id',ascending=False)
這裡可以看到一共有120行資料,也就是120種狗的類別,以及每種類別裡面有多少條資料。
9.載入資料集並顯示
data = ImageDataBunch.from_csv(
PATH,
folder='train',
valid_pct=0.2,
ds_tfms=get_transforms(),
size=224,
test='test',
suffix='.jpg',
bs=64).normalize(imagenet_stats)
data.show_batch(rows=3, figsize=(10,12))
如果一切順利,這裡會顯示出9張狗的圖片,並且圖片上方會顯示相應的狗的類別。
如果只顯示了圖片,而圖片上的標籤不是類別的話,那說明資料匯入部分存在問題。
OK,我們繼續下一步。
10.下載與訓練模型並微調
learner = create_cnn(data,models.resnet101,metrics=[accuracy])
learner.fit_one_cycle(10)
這裡我們設定了10個epoch,會稍微花費點時間大約40分鐘。
可以看到,在最後一個epoch時候,我們的精度在89%。當然我們還可以繼續調優:)
或者直接從零開始對每一層權重的訓練,這都是可以的。
到這裡我們就已經成功的完成了一個120種狗狗的圖片分類器的製作啦,怎麼樣?是不是很簡單?希望這篇文章可以給每一個前來閱讀的朋友帶來收穫,對深度學習,影像分類有一個直接的體會。
如果有問題,歡迎來評論區留言討論^^
(本文為AI科技大本營轉載文章,轉載請聯絡原作者)
.
人工智慧的現狀及今後發展趨勢如何?
https://edu.csdn.net/topic/ai30?utm_source=csdn_bw
群招募
掃碼新增小助手微信,回覆:公司+研究方向(學校+研究方向),邀你加入技術交流群。技術群稽核較嚴,敬請諒解。
推薦閱讀:
點選“閱讀原文”,檢視歷史精彩文章。
相關文章
- 訓練一個影像分類器demo in PyTorch【學習筆記】PyTorch筆記
- 用神經網路訓練一個文字分類器神經網路文字分類
- 視覺化影像處理 | 視覺化訓練器 | 影像分類視覺化
- CSS中+ , > , ~ 傻傻分不清CSS
- Post,Get介面傻傻分不清?
- 實踐篇:使用Spark和Scala來訓練您的第一個分類器!Spark
- 使用 PyTorch 構建和訓練一個卷積神經網路進行影像分類任務PyTorch卷積神經網路
- OpenCV訓練自己的衣服探測分類器OpenCV
- 基於飛槳PaddlePaddle的多種影像分類預訓練模型強勢釋出模型
- 過濾器 和 攔截器 6 個區別,別再傻傻分不清了過濾器
- 過濾器 和 攔截器 6個區別,別再傻傻分不清了過濾器
- Java SPI 和 API,傻傻分不清?JavaAPI
- 不再傻傻分不清:atoi, itoa, iota
- 使用Pytorch訓練分類器詳解(附python演練)PyTorchPython
- 雲渲染技術的兩種場景還在傻傻分不清?
- 自己訓練SVM分類器進行HOG行人檢測HOG
- golang 佔位符還傻傻分不清?Golang
- ACM訓練方案-POJ題目分類ACM
- Token ,Cookie、Session傻傻分不清楚?CookieSession
- 傻傻分不清的javascript執行機制JavaScript
- 訓練PaddleOCR文字方向分類模型模型
- 運用預訓練 Keras 模型來處理影像分類請求,學習如何使用從 Keras 建立 SavedModelKeras模型
- 用初次訓練的SVM+HOG分類器在負樣本原圖上檢測HardExampleHOG
- Java 泛型 T,E,K,V,?,傻傻分不清?Java泛型
- 機器學習?人工智慧?傻傻分不清楚?機器學習人工智慧
- 用Python實現一個SVM分類器策略Python
- Python排序傻傻分不清?一文看透sorted與sort用法Python排序
- 120萬美元機器24分鐘訓練ImageNet,UC Berkeley展示全新並行處理方法並行
- 學習SVM(一) SVM模型訓練與分類的OpenCV實現模型OpenCV
- opencv中的SVM影像分類(一)OpenCV
- JavaScript陣列之傻傻分不清系列(split,splice,slice)JavaScript陣列
- MVP、原型、概念驗證,傻傻分不清楚?MVP原型
- OKR與影響地圖,別再傻傻分不清OKR地圖
- set,env,export,source,exec傻傻分不清楚?Export
- nor flash 和nand flash 傻傻分不清楚NaN
- Opencv 用SVM訓練檢測器OpenCV
- URL URI傻傻分不清楚,dart告訴你該怎麼用Dart
- 「影像分類」 實戰影像分類網路的視覺化視覺化