120種小狗影像傻傻分不清?用fastai訓練一個分類器

AI科技大本營發表於2019-02-25

640?wx_fmt=jpeg

 

作者:一杯奶茶的功夫

連結: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

640?wx_fmt=png

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
 

640?wx_fmt=png

從結果中可以看到,我們已經從kaggle成功的下載了資料集檔案。

5.驗證GPU


 
torch.cuda.is_available()
#True
torch.backends.cudnn.enabled
#True

640?wx_fmt=png

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()

640?wx_fmt=png

這裡我們可以看到labels.csv中的前五條資料

8.檢視狗的類別

labels_df.pivot_table(index='breed',aggfunc=len).sort_values('id',ascending=False)

640?wx_fmt=png

這裡可以看到一共有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))

640?wx_fmt=png

如果一切順利,這裡會顯示出9張狗的圖片,並且圖片上方會顯示相應的狗的類別。

如果只顯示了圖片,而圖片上的標籤不是類別的話,那說明資料匯入部分存在問題。

OK,我們繼續下一步。

10.下載與訓練模型並微調

learner = create_cnn(data,models.resnet101,metrics=[accuracy])
learner.fit_one_cycle(10)

640?wx_fmt=png

這裡我們設定了10個epoch,會稍微花費點時間大約40分鐘。

可以看到,在最後一個epoch時候,我們的精度在89%。當然我們還可以繼續調優:)

或者直接從零開始對每一層權重的訓練,這都是可以的。

到這裡我們就已經成功的完成了一個120種狗狗的圖片分類器的製作啦,怎麼樣?是不是很簡單?希望這篇文章可以給每一個前來閱讀的朋友帶來收穫,對深度學習,影像分類有一個直接的體會。

如果有問題,歡迎來評論區留言討論^^

 

(本文為AI科技大本營轉載文章,轉載請聯絡原作者)

.

人工智慧的現狀及今後發展趨勢如何? 

https://edu.csdn.net/topic/ai30?utm_source=csdn_bw

 

群招募

 

掃碼新增小助手微信,回覆:公司+研究方向(學校+研究方向),邀你加入技術交流群。技術群稽核較嚴,敬請諒解。

640?wx_fmt=jpeg

推薦閱讀:

                         640?wx_fmt=png

點選“閱讀原文”,檢視歷史精彩文章。

相關文章