pytorch如何在離線或者不翻牆的情況下調用efficientNet網絡

前言

efficientNet確實很牛逼,而pytorch也已經在第一時間上線了調用efficientNet的方法。但是其調用的方法對於非科學上網的開發者來說很不友好(因爲調用該模型需要在pytorch的終端當中進行模型的下載,而訪問pytorch的終端對於國內用戶來說太慢了,和訪問stackoverflow速度差不多。)而一個模型例如b4,b5則要幾十上百mb的大小。

efficientnet_pytorch模塊安裝
pip install efficientnet_pytorch
下面是正常情況下對efficientNet的調用
//以加載efficientNet-b5預訓練模型爲例子
from efficientnet_pytorch import EfficientNet 
model = EfficientNet.from_pretrained('efficientNet-b5')
//其通常需要訪問遠程終端下載,速度非常慢
當然,不通過終端調efficientNet預訓練模型的前提是本地已經有efficientNet的預訓練模型,不用擔心,我已經把b3-b6保存在了百度雲,百度雲的鏈接在此:百度網盤 ,提取碼爲:3bpc
//現在則是在本地調用efficientNet的預訓練模型了,還是以efficientNet-b5爲例子
//首先我們需要pytorch提供好的網絡結構
model = EfficientNet.from_name('efficientnet-b5')
//而後需要通過pytorch來加載本地的pth權重文件
state_dict = torch.load('xxx/xxx/efficientnet-b5.pth')
//把effcientnet-b5的權重load到efficientnet-b5的網絡結構中
model.load_state_dict(state_dict)
一般情況下,efficientNet因其分類數爲1000,若使用還需要修改分類數爲我們需要的,如下
import torch
from efficientnet_pytorch import EfficientNet
from torch import nn

model = EfficientNet.from_name('efficientnet-b4')
state_dict = torch.load('efficientnet-b4.pth')
model.load_state_dict(state_dict)
//前三步照常
in_fea = model._fc.in_features //讀取全連接層的in_features
//要改的是最終輸出的特徵維度out_features(假設分類數爲40)
model._fc = nn.Linear(in_features=in_fea, out_features= 40,bias=True)
//Finish!
發佈了25 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章