飞桨作为国内第一个开源的深度学习框架,对没有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”,预测正确😅