【CANN训练营第三季】基于Caffe ResNet-101网络实现图片分类在昇腾310服务器的推理过程

切换用户

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

编译成功应用测试截图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值