!!!全部操作均在Linux系统下,Linux为Ubuntu24.04!!!

实例网址

MNIST_Classification_MobileNetV2_0.5_Rep_32.ipynb - Colab (google.com)

环境搭建

实例需要带有CUDA核心的显卡,linux中还需要提前将显卡驱动安装完成

先安装Anaconda,具体为啥后面会提。

我一开始用python3.12的版本,但是会有报错

1
module 'pkgutil' has no attribute 'ImpImporter'. Did you mean: 'zipimporter'?

后面将版本降低为python3.11就没问题了

其次是pip的问题

由于在linux系统下,使用pip安装包会出现以下错误:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
python3-xyz, where xyz is the package you are trying to
install.

If you wish to install a non-Debian-packaged Python package,
create a virtual environment using python3 -m venv path/to/venv.
Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
sure you have python3-full installed.

If you wish to install a non-Debian packaged Python application,
it may be easiest to use `pipx` install xyz, which will manage a
virtual environment for you. Make sure you have `pipx` installed.

See /usr/share/doc/python3.11/README.venv for more information.

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.

大致意思就是推荐在虚拟环境使用pip命令,或者使用其他方法也行(创建个虚拟环境还是方便点)

所以先安装Anaconda用于构建虚拟环境,网上有很多教程,略过…….

由于案例中安装的包比较多,所以推荐pip切换到国内源,以下是全局换源的命令

1
pip config set global.index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple

操作流程(踩坑)

实例的具体操作在网址中都有,主要讲的是踩坑的部分

数据集

前面环境都搭建完成后,基本上跟着流程走没啥问题,但是在训练模型的步骤会有个坑人的地方

因为里面的数据集下载来自https://yann.lecun.com/exdb/mnist/,但是国内下载网址内的文件会被403,所以需要自己找对应的数据集,并且将网址修改为自己的数据集。

我找到的数据集放到了度盘:https://pan.baidu.com/s/16k9LrXsGVPnPGQlC5ffvrw?pwd=norl

防止以后丢了…

拿到数据集后,还要自己启动服务器,将数据集放到服务器上(因为代码中是使用的网址,直接改成文件地址不行)

这里就直接用Express创建了,方便又简单(装个nodejs,用npm装个express包,敲几行代码就行)

代码修改

然后就是修改代码部分了,只需要修改一处,文件位置在

1
$HOME/anaconda/envs/[yourEnvsName]/lib/python3.11/site-packages/mmcls/datasets/mnist.py

找到url_prefix这行,将里面的网址替换为你自己的

注意:这里的网址不能是127.0.0.1这种,要用http://localhost:端口号

下面的MD5校验码改成None就行了

导出模型

之前在另一台电脑上导出的时候没啥问题,但是换了台电脑就出了点状况

首先是

1
2
3
4
5
6
7
sscma.export configs/classification/mobnetv2_0.35_rep_1bx16_300e_mnist.py $CHECKPOINT_FILE_PATH --cfg-options  \
work_dir=MNIST_Classification_MobileNetV2_0.5_Rep_32 \
num_classes=10 \
epochs=10 \
height=32 \
width=32 \
load_from=MNIST_Classification_MobileNetV2_0.5_Rep_32/pretrain.pth

需要将里面的$CHECKPOINT_FILE_PATH替换为自己的检查点文件路径

默认是MNIST_Classification_MobileNetV2_0.5_Rep_32/best_accuracy_top1_epoch_10.pth

问题

其次,执行完命令后,我的环境出现了:version 'GLIBCXX_3.5.32' not found

解决方法

检查过后发现是虚拟环境的lib库缺少libstdc++.so.6.0.33

将系统中usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33复制到~/anaconda3/envs/myenv/lib

其次建立链接

1
ln -sf libstdc++.so.6.0.33 libstdc++.so.6

最后检查链接

1
ll | grep libstdc++.so.6.

结果中有:

1
libstdc++.6 -> libstdc++so.6.0.33

就表示完成了

重新执行导出模型命令