飛槳作為國內第一個開源的深度學習框架,對沒有GPU的小伙伴來說,最有吸引力的地方就是百度提供了免費算力。所以在百度AIStudio上訓練,在自己的電腦上跑應用是個不錯的選擇。飛槳開源的Paddlex集成了很多模塊,使用起來非常方便,不過在電腦上安裝的坑也不少。安裝成功后記錄一下,免得時間長忘記,又掉進坑里。
參考AIStudio服務器上的配置,用Python3.7.4、Paddlepaddle2.1.2、Paddlex2.0.0。
一、安裝Anaconda和Pycharm,配置環境
1、安裝Anaconda
進入官方網址,下載安裝程序:
https://www.anaconda.com/products/individual#Downloads
注意:不要安裝到C盤,后面建虛擬環境要下載不少包,占用空間較大。安裝過程就是下一步...下一步...完成。
2、安裝Pycharm
到官網下載Pycharm安裝程序,社區版免費,專業版試用1個月:
https://www.jetbrains.com/pycharm/download/#section=windows
安裝簡單,過程省略。如果想使用專業版,可以找個工具,無限次試用😁
3、配置環境
在Anaconda工具集中,打開終端,創建環境“paddle”,命令為:
conda create -n paddlex python=3.7.4
待環境安裝完成后(在anaconda安裝目錄的envs文件夾中能看到“paddle”文件夾),激活環境:
conda activate paddle
操作完成。
記錄一下常用conda命令:
1 conda update -n base conda #update最新版本的conda
2 conda create -n xxxx python=3.9 #基於python3.9創建名為xxxx的虛擬環境
3 conda activate xxxx #開啟xxxx虛擬環境
4 conda deactivate #關閉當前虛擬環境
5 conda info -e #顯示所有的虛擬環境
6 conda remove -n xxxx --all #刪除XXXX虛擬環境
二、安裝Paddlepaddle和Paddlex
1、Paddlepaddle
打開官方網址,選擇配置:
https://www.paddlepaddle.org.cn/
復制安裝命令(版本修改為2.1.2),在終端運行,靜待paddlepaddle安裝完成。
conda install paddlepaddle==2.1.2 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/
2、Paddlex
PaddleX依賴的pycocotools包,需要用Microsoft Visual C++ 14.0
以上的build工具,如果系統里沒有,要先裝好VC build tools再執行下面的操作。
打開官方提供的源碼網址,下載Paddlex2.0.0,保存到自己的源碼文件夾里:
https://gitee.com/paddlepaddle/PaddleX
注意:咱沒有GPU,所以在下載的文件里,打開requirements.txt,刪除里面的paddlepaddle-gpu==2.1.2
在終端進入requirements.txt所在路徑,安裝所需的包(用清華的源),命令為:
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
注意:批量安裝出錯時,可以單獨安裝所需的包,然后再批量安裝。可能需要重復幾次,此處需要些耐心😵。
最后一步不要忘了:
python setup.py install
三、跑個極簡例程
在Pycharm新建一個項目,選剛才建好的環境“paddle”。
1、准備數據集
下載蔬菜數據集並解壓:
https://bj.bcebos.com/paddlex/datasets/vegetables_cls.tar.gz
把蔬菜數據集文件夾“vegetables_cls”放到項目的根目錄下。
2、三步完成訓練
經過圖像預處理、數據集加載和選擇模型三步,實現一個簡單的圖像分類訓練,訓練程序train.py代碼如下:
from paddlex import transforms as T
import paddlex as pdx
#定義訓練/驗證圖像處理流程transforms
train_transforms = T.Compose([
T.RandomCrop(crop_size=224),
T.RandomHorizontalFlip(),
T.Normalize()])
eval_transforms = T.Compose([
T.ResizeByShort(short_size=256),
T.CenterCrop(crop_size=224),
T.Normalize()
])
#加載圖像分類數據集
train_dataset = pdx.datasets.ImageNet(
data_dir='vegetables_cls',
file_list='vegetables_cls/train_list.txt',
label_list='vegetables_cls/labels.txt',
transforms=train_transforms,
shuffle=True)
eval_dataset = pdx.datasets.ImageNet(
data_dir='vegetables_cls',
file_list='vegetables_cls/val_list.txt',
label_list='vegetables_cls/labels.txt',
transforms=eval_transforms)
#使用MobileNetV3_small模型開始訓練
num_classes = len(train_dataset.labels)
model = pdx.cls.MobileNetV3_small(num_classes=num_classes)
model.train(num_epochs=10,
train_dataset=train_dataset,
train_batch_size=32,
eval_dataset=eval_dataset,
lr_decay_epochs=[4, 6, 8],
save_dir='output/mobilenetv3_small',
use_vdl=True)
我的四核十代i5筆記本,訓練10輪用了半個小時😂,不過終於有結果了。訓練的時候,可以在終端輸入如下命令,可以啟動服務查看訓練情況:
visualdl --logdir output/mobilenetv3_small --port 8001
在瀏覽器里,通過本地的8001端口看圖形化訓練數據:
https://localhost:8001
3、用訓練的模型預測一下
從網上隨便找了張胡蘿卜圖片,命名為hlb1.jpeg,放到vegetables_cls文件夾下。
運行預測程序predict.py試試,代碼如下:
import paddlex as pdx
model = pdx.load_model('output/mobilenetv3_small/best_model')
result = model.predict('vegetables_cls/hlb1.jpeg')
print("Predict Result: ", result)
不管程序的UserWarning,沒辦法,咱沒有GPU,等5秒出結果了,是“huluobo”,預測正確😅