切换用户
su - HwHiAiUser
下载sample仓库
# 进入目录/home/HwHiAiUser
cd ~
# 命令行下载master代码
git clone https://gitee.com/ascend/samples.git
# 切换到历史tag,以v0.6.0举例
git checkout v0.6.0
准备模型
# 进入样例目录
cd samples/cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification
# 创建并进入caffe_model目录
mkdir caffe_model && cd caffe_model
# 官网下载ResNet-101网络的模型文件(压缩包ATC Resnet101(FP16) from TensorFlow - Ascend310.zip)
# 解压后将其中的resnet101_tf.pb从本地上传到云服务器上
# 切换到样例目录
cd ..
# 将ResNet-101原始模型转换为适配昇腾AI处理器的离线模型(*.om文件)
atc --model=caffe_model/resnet101_tf.pb --framework=3 --output=model/resnet101_tf --output_type=FP32 --soc_version=Ascend310 --input_shape="input:1,224,224,3" --log=info
进入resnet50_imagenet_classification样例的script目录,修改transferPic.py脚本中的如下内容,将float16改为float32:
修改前
img = img.astype("float16")
修改后:
img = img.astype("float32")
切换到“resnet50_imagenet_classification样例目录/data“目录下,执行transferPic.py脚本,将*.jpg转换为*.bin,同时将图片从1024683的分辨率缩放为224224。在“resnet50_imagenet_classification样例目录/data“目录下生成2个*.bin测试文件。
python3 ../script/transferPic.py
在src/sample_process.cpp文件中定制代码(用新生成的模型替换旧的模型)
Result SampleProcess::Process()
{
// model init
ModelProcess modelProcess;
// const char* omModelPath = "../model/resnet50.om";
const char* omModelPath = "../model/resnet101_tf.om";
Result ret = modelProcess.LoadModel(omModelPath);
if (ret != SUCCESS) {
ERROR_LOG("execute LoadModel failed");
return FAILED;
}
ret = modelProcess.CreateModelDesc();
if (ret != SUCCESS) {
ERROR_LOG("execute CreateModelDesc failed");
return FAILED;
}
string testFile[] = {
"../data/dog1_1024_683.bin",
"../data/dog2_1024_683.bin"
};
模型转换成功的截图
编译运行代码
# 配置环境变量
export DDK_PATH=$HOME/Ascend/ascend-toolkit/latest/arm64-linux
export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub
# 创建并进入build/intermediates/host目录,用于存放编译文件
mkdir -p build/intermediates/host && cd build/intermediates/host
# 交叉编译
cmake ../../../src -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_SKIP_RPATH=TRUE
# 执行如下命令,生成的可执行文件main在“样例目录/out“目录下
make
# 切换到可执行文件main所在的目录
cd $HOME/cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification/out
# 运行可执行文件
./main
编译成功应用测试截图