From 00610e04641a25095eb7ed7ea31a86db02c2ac39 Mon Sep 17 00:00:00 2001 From: Y-keven Date: Fri, 27 Jun 2025 13:08:09 +0800 Subject: [PATCH 1/8] =?UTF-8?q?add=20data=C3=A3=20and=20model=20dir?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../1_classification/resnet50_firstapp/data/.keep | 0 .../1_classification/resnet50_firstapp/model/.keep | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 python/level2_simple_inference/1_classification/resnet50_firstapp/data/.keep create mode 100644 python/level2_simple_inference/1_classification/resnet50_firstapp/model/.keep diff --git a/python/level2_simple_inference/1_classification/resnet50_firstapp/data/.keep b/python/level2_simple_inference/1_classification/resnet50_firstapp/data/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/python/level2_simple_inference/1_classification/resnet50_firstapp/model/.keep b/python/level2_simple_inference/1_classification/resnet50_firstapp/model/.keep new file mode 100644 index 000000000..e69de29bb -- Gitee From a45fa634dfecf19a6689a650ba10761194c7620c Mon Sep 17 00:00:00 2001 From: Y-keven Date: Fri, 27 Jun 2025 13:09:21 +0800 Subject: [PATCH 2/8] add src dir and python file --- .../resnet50_firstapp/src/constant.py | 8 + .../resnet50_firstapp/src/firstapp.py | 150 ++++++++++++++++++ 2 files changed, 158 insertions(+) create mode 100644 python/level2_simple_inference/1_classification/resnet50_firstapp/src/constant.py create mode 100644 python/level2_simple_inference/1_classification/resnet50_firstapp/src/firstapp.py diff --git a/python/level2_simple_inference/1_classification/resnet50_firstapp/src/constant.py b/python/level2_simple_inference/1_classification/resnet50_firstapp/src/constant.py new file mode 100644 index 000000000..5db1d43b2 --- /dev/null +++ b/python/level2_simple_inference/1_classification/resnet50_firstapp/src/constant.py @@ -0,0 +1,8 @@ +# rule for mem +ACL_MEM_MALLOC_HUGE_FIRST = 0 + +# rule for memory copy +ACL_MEMCPY_HOST_TO_HOST = 0 +ACL_MEMCPY_HOST_TO_DEVICE = 1 +ACL_MEMCPY_DEVICE_TO_HOST = 2 +ACL_MEMCPY_DEVICE_TO_DEVICE = 3 diff --git a/python/level2_simple_inference/1_classification/resnet50_firstapp/src/firstapp.py b/python/level2_simple_inference/1_classification/resnet50_firstapp/src/firstapp.py new file mode 100644 index 000000000..a6f3fcfca --- /dev/null +++ b/python/level2_simple_inference/1_classification/resnet50_firstapp/src/firstapp.py @@ -0,0 +1,150 @@ +import os +import acl +import numpy as np +from PIL import Image +from constant import ACL_MEM_MALLOC_HUGE_FIRST, \ + ACL_MEMCPY_HOST_TO_DEVICE, ACL_MEMCPY_DEVICE_TO_HOST + + +class Net: + def __init__(self, model_path): + # 初始化函数 + self.device_id = 0 + # step1: 初始化 + ret = acl.init() + # 指定运算的Device + ret = acl.rt.set_device(self.device_id) + # step2: 加载模型,本示例为ResNet-50模型 + # 加载离线模型文件,返回标识模型的ID + self.model_id, ret = acl.mdl.load_from_file(model_path) + # 创建空白模型描述信息,获取模型描述信息的指针地址 + self.model_desc = acl.mdl.create_desc() + # 通过模型的ID,将模型的描述信息填充到model_desc + ret = acl.mdl.get_desc(self.model_desc, self.model_id) + # step3:创建输入输出数据集 + # 创建输入数据集 + self.input_dataset, self.input_data = self.prepare_dataset('input') + # 创建输出数据集 + self.output_dataset, self.output_data = self.prepare_dataset('output') + + def prepare_dataset(self, io_type): + # 准备数据集 + if io_type == "input": + # 获得模型输入的个数 + io_num = acl.mdl.get_num_inputs(self.model_desc) + acl_mdl_get_size_by_index = acl.mdl.get_input_size_by_index + else: + # 获得模型输出的个数 + io_num = acl.mdl.get_num_outputs(self.model_desc) + acl_mdl_get_size_by_index = acl.mdl.get_output_size_by_index + # 创建aclmdlDataset类型的数据,描述模型推理的输入。 + dataset = acl.mdl.create_dataset() + datas = [] + for i in range(io_num): + # 获取所需的buffer内存大小 + buffer_size = acl_mdl_get_size_by_index(self.model_desc, i) + # 申请buffer内存 + buffer, ret = acl.rt.malloc(buffer_size, ACL_MEM_MALLOC_HUGE_FIRST) + # 从内存创建buffer数据 + data_buffer = acl.create_data_buffer(buffer, buffer_size) + # 将buffer数据添加到数据集 + _, ret = acl.mdl.add_dataset_buffer(dataset, data_buffer) + datas.append({"buffer": buffer, "data": data_buffer, "size": buffer_size}) + return dataset, datas + + def forward(self, inputs): + # 执行推理任务 + # 遍历所有输入,拷贝到对应的buffer内存中 + input_num = len(inputs) + for i in range(input_num): + bytes_data = inputs[i].tobytes() + bytes_ptr = acl.util.bytes_to_ptr(bytes_data) + # 将图片数据从Host传输到Device。 + ret = acl.rt.memcpy(self.input_data[i]["buffer"], # 目标地址 device + self.input_data[i]["size"], # 目标地址大小 + bytes_ptr, # 源地址 host + len(bytes_data), # 源地址大小 + ACL_MEMCPY_HOST_TO_DEVICE) # 模式:从host到device + # 执行模型推理。 + ret = acl.mdl.execute(self.model_id, self.input_dataset, self.output_dataset) + # 处理模型推理的输出数据,输出top5置信度的类别编号。 + inference_result = [] + for i, item in enumerate(self.output_data): + buffer_host, ret = acl.rt.malloc_host(self.output_data[i]["size"]) + # 将推理输出数据从Device传输到Host。 + ret = acl.rt.memcpy(buffer_host, # 目标地址 host + self.output_data[i]["size"], # 目标地址大小 + self.output_data[i]["buffer"], # 源地址 device + self.output_data[i]["size"], # 源地址大小 + ACL_MEMCPY_DEVICE_TO_HOST) # 模式:从device到host + # 从内存地址获取bytes对象 + bytes_out = acl.util.ptr_to_bytes(buffer_host, self.output_data[i]["size"]) + # 按照float32格式将数据转为numpy数组 + data = np.frombuffer(bytes_out, dtype=np.float32) + inference_result.append(data) + # 释放内存 + ret = acl.rt.free_host(buffer_host) + vals = np.array(inference_result).flatten() + # 对结果进行softmax转换 + vals = np.exp(vals) + vals = vals / np.sum(vals) + + return vals + + def __del__(self): + # 析构函数 按照初始化资源的相反顺序释放资源。 + # 销毁输入输出数据集 + for dataset in [self.input_data, self.output_data]: + while dataset: + item = dataset.pop() + ret = acl.destroy_data_buffer(item["data"]) # 销毁buffer数据 + ret = acl.rt.free(item["buffer"]) # 释放buffer内存 + ret = acl.mdl.destroy_dataset(self.input_dataset) # 销毁输入数据集 + ret = acl.mdl.destroy_dataset(self.output_dataset) # 销毁输出数据集 + # 销毁模型描述 + ret = acl.mdl.destroy_desc(self.model_desc) + # 卸载模型 + ret = acl.mdl.unload(self.model_id) + # 释放device + ret = acl.rt.reset_device(self.device_id) + # acl去初始化 + ret = acl.finalize() + +def transfer_pic(input_path): + # 图像预处理 + input_path = os.path.abspath(input_path) + with Image.open(input_path) as image_file: + # 缩放为224*224 + img = image_file.resize((224, 224)) + # 转换为float32类型ndarray + img = np.array(img).astype(np.float32) + # 根据imageNet图片的均值和方差对图片像素进行归一化 + img -= [123.675, 116.28, 103.53] + img /= [58.395, 57.12, 57.375] + # RGB通道交换顺序为BGR + img = img[:, :, ::-1] + # resnet50为色彩通道在前 + img = img.transpose((2, 0, 1)) + # 返回并添加batch通道 + return np.array([img]) + +def print_top_5(data): + top_5 = data.argsort()[::-1][:5] + print("======== top5 inference results: =============") + for j in top_5: + print("[%d]: %f" % (j, data[j])) + +if __name__ == "__main__": + image_paths = ["./data/dog1_1024_683.jpg", "./data/dog2_1024_683.jpg"] + model_path = './model/resnet50.om' + resnet50 = Net(model_path) + + for path in image_paths: + # 图像预处理,此处仅供参考,用户按照自己需求进行预处理 + image = transfer_pic(path) + # 将数据按照每个输入的顺序构造list传入,当前示例的ResNet-50模型只有一个输入 + result = resnet50.forward([image]) + # 输出top_5 + print_top_5(result) + + del resnet50 \ No newline at end of file -- Gitee From 9f0012ad75df4e0fb0189ac4dab7c2face645728 Mon Sep 17 00:00:00 2001 From: Y-keven Date: Fri, 27 Jun 2025 13:10:39 +0800 Subject: [PATCH 3/8] add README file --- .../resnet50_firstapp/README.md | 156 ++++++++++++++++++ .../resnet50_firstapp/README_fig.png | Bin 0 -> 52109 bytes 2 files changed, 156 insertions(+) create mode 100644 python/level2_simple_inference/1_classification/resnet50_firstapp/README.md create mode 100644 python/level2_simple_inference/1_classification/resnet50_firstapp/README_fig.png diff --git a/python/level2_simple_inference/1_classification/resnet50_firstapp/README.md b/python/level2_simple_inference/1_classification/resnet50_firstapp/README.md new file mode 100644 index 000000000..9984f2639 --- /dev/null +++ b/python/level2_simple_inference/1_classification/resnet50_firstapp/README.md @@ -0,0 +1,156 @@ +# 快速入门 +在本节中,您可以通过一个简单的图片分类应用了解使用AscendCL接口开发应用的基本过程以及开发过程中涉及的关键概念。 + +## 什么是图片分类应用? + +“图片分类应用”,从名称上,我们也能直观地看出它的作用:按图片所属的类别来区分图片。 + +![输入图片说明](README_fig.png) + +但“图片分类应用”是怎么做到这一点的呢?当然得先有一个能做到图片分类的模型,我们可以直接使用一些训练好的开源模型,也可以基于开源模型的源码进行修改、重新训练,还可以自己基于算法、框架构建适合自己的模型。 + +鉴于当前我们是入门内容,此处我们直接获取已训练好的开源模型,毕竟这种最简单、最快。此处我们选择的是ONNX框架的ResNet-50模型。 + +ResNet-50模型的基本介绍如下: + +- 输入数据:RGB格式、224\*224分辨率的输入图片 +- 输出数据:图片的类别标签及其对应置信度 + +> **说明:** +> - 置信度是指图片所属某个类别可能性。 +> - 类别标签和类别的对应关系与训练模型时使用的数据集有关,需要查阅对应数据集的标签及类别的对应关系。 + +## 环境要求 + +- 操作系统及架构:CentOS 7.6 x86\_64、CentOS aarch64、Ubuntu 18.04 x86\_64、EulerOS x86、EulerOS aarch64 +- 芯片:Atlas 200/300/500 推理产品、Atlas 推理系列产品、Atlas 训练系列产品 +- python及依赖的库:python3.7.5、Pillow库 +- 已在环境上部署昇腾AI软件栈,并配置对应的的环境变量,请参见[Link](https://www.hiascend.com/document/redirect/CannCommunityInstSoftware)中对应版本的CANN安装指南。 + + 以下步骤中,开发环境指开发代码的环境,运行环境指运行算子、推理或训练等程序的环境,运行环境上必须带昇腾AI处理器。开发环境和运行环境可以合设在同一台服务器上,也可以分设。 + +## 下载样例 + +请选择其中一种样例下载方式: + +- 压缩包方式下载(下载时间较短,但步骤稍微复杂) + + ``` + # 1. samples仓右上角选择 【克隆/下载】 下拉框并选择 【下载ZIP】。 + # 2. 将ZIP包上传到开发环境中的普通用户家目录中,【例如:${HOME}/ascend-samples-master.zip】。 + # 3. 开发环境中,执行以下命令,解压zip包。 + cd ${HOME} + unzip ascend-samples-master.zip + ``` + + 注:如果需要下载其它版本代码,请先请根据前置条件说明进行samples仓分支切换。 + +- 命令行方式下载(下载时间较长,但步骤简单) + + ``` + # 开发环境,非root用户命令行中执行以下命令下载源码仓。 + cd ${HOME} + git clone https://gitee.com/ascend/samples.git + ``` + + 注:如果需要切换到其它tag版本,以v0.5.0为例,可执行以下命令。 + + ``` + git checkout v0.5.0 + ``` + +下载成功后,切换到“ /python/level2_simple_inference/1_classification/resnet50_firstapp”目录下,查看该样例的目录结构,**下文所有的操作步骤均需先切换到resnet50_firstapp目录**: + +``` +resnet50_firstapp +├── data // 用于存放测试图片的目录 +├── model // 用于存放模型文件的目录 +├── src +│ ├── constant.py // 常量定义文件 +│ └── firstapp.py // 图片分类样例的运行文件 +``` + +## 准备模型 + +1. 以运行用户登录开发环境。 + +2. 下载模型数据。 + + 执行以下命令,将ONNX模型下载至“model”目录下,命令中的“******”请根据实际样例包的存放目录替换 + ``` + cd /python/level2_simple_inference/1_classification/resnet50_firstapp/model + wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/resnet50/resnet50.onnx + ``` + +3. 执行模型转换。 + + 执行以下命令(以 Atlas 推理系列产品为例),将原始模型转换为昇腾AI处理器能识别的\*.om模型文件。请注意,执行命令的用户需具有命令中相关路径的可读、可写权限。以下命令中的“******”请根据实际昇腾AI处理器版本替换。 + + ``` + atc --model=resnet50.onnx --framework=5 --output=resnet50 --input_shape="actual_input_1:1,3,224,224" --soc_version= + ``` + + - --model:ResNet-50网络的模型文件路径。 + - --framework:原始框架类型。5表示ONNX。 + - --output:resnet50.om模型文件的路径。若此处修改模型文件名及存储路径,则需要同步修改src/firstapp.py中模型加载处的模型文件名及存储路径,即model_path变量值。 + - --soc\_version:昇腾AI处理器的版本。 + + 关于各参数的详细解释,请参见[《ATC工具使用指南》](https://www.hiascend.com/document/redirect/CannCommunityAtc)。 + +## 准备测试图片 + +本次样例需要使用两张动物图片,请执行以下命令将图片下载至“data”目录,或通过以下链接下载到本地后上传至“data”目录。若此处修改测试图片文件名,则需要同步修改src/firstapp.py中读取图片处的文件名,即image_paths变量值。 + +- [测试图片1](https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog1_1024_683.jpg) + + ``` + cd $HOME/first_app/data + wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog1_1024_683.jpg + ``` + +- [测试图片2](https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog2_1024_683.jpg) + + ``` + cd $HOME/first_app/data + wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog2_1024_683.jpg + ``` + +## 运行应用 +以运行用户将resnet50_firstapp目录上传至运行环境,以运行用户登录运行环境,切换到resnet50_firstapp目录下,检查环境变量配置是否正确,执行以下命令。 + +``` +python3 src/firstapp.py +``` +可以得到如下输出,分别为两张测试图片的top5分类信息。 + +其中[161]: 0.810220表示的是类别标识索引“161”的置信度为“0.810220”。 + +``` +======== top5 inference results: ============= +[161]: 0.810220 +[162]: 0.103008 +[178]: 0.017485 +[166]: 0.013941 +[212]: 0.009581 +======== top5 inference results: ============= +[267]: 0.728255 +[266]: 0.101687 +[265]: 0.100111 +[151]: 0.004214 +[160]: 0.002731 +``` + +>**说明:** +>类别标签和类别的对应关系与训练模型时使用的数据集有关,本样例使用的模型是基于imagenet数据集进行训练的,您可以在互联网上查阅对应数据集的标签及类别的对应关系。 +> +>当前屏显信息中的类别标识与类别的对应关系如下: +> +>"161": ["basset", "basset hound"] +> +>"162": ["beagle"] +> +>"163": ["bloodhound", "sleuthhound"] +> +>"166": ["Walker hound", "Walker foxhound"] +> +>"167": ["English foxhound"] \ No newline at end of file diff --git a/python/level2_simple_inference/1_classification/resnet50_firstapp/README_fig.png b/python/level2_simple_inference/1_classification/resnet50_firstapp/README_fig.png new file mode 100644 index 0000000000000000000000000000000000000000..37a7d6271d80c3a746ecc6b9a6df0607da352b73 GIT binary patch literal 52109 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 Date: Fri, 27 Jun 2025 14:42:37 +0800 Subject: [PATCH 4/8] update README file --- .../1_classification/resnet50_firstapp/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/level2_simple_inference/1_classification/resnet50_firstapp/README.md b/python/level2_simple_inference/1_classification/resnet50_firstapp/README.md index 9984f2639..79f2fa37f 100644 --- a/python/level2_simple_inference/1_classification/resnet50_firstapp/README.md +++ b/python/level2_simple_inference/1_classification/resnet50_firstapp/README.md @@ -24,7 +24,7 @@ ResNet-50模型的基本介绍如下: - 操作系统及架构:CentOS 7.6 x86\_64、CentOS aarch64、Ubuntu 18.04 x86\_64、EulerOS x86、EulerOS aarch64 - 芯片:Atlas 200/300/500 推理产品、Atlas 推理系列产品、Atlas 训练系列产品 -- python及依赖的库:python3.7.5、Pillow库 +- python及依赖的库:python3.7.5以上,Pillow、Numpy库 - 已在环境上部署昇腾AI软件栈,并配置对应的的环境变量,请参见[Link](https://www.hiascend.com/document/redirect/CannCommunityInstSoftware)中对应版本的CANN安装指南。 以下步骤中,开发环境指开发代码的环境,运行环境指运行算子、推理或训练等程序的环境,运行环境上必须带昇腾AI处理器。开发环境和运行环境可以合设在同一台服务器上,也可以分设。 @@ -95,7 +95,7 @@ resnet50_firstapp - --output:resnet50.om模型文件的路径。若此处修改模型文件名及存储路径,则需要同步修改src/firstapp.py中模型加载处的模型文件名及存储路径,即model_path变量值。 - --soc\_version:昇腾AI处理器的版本。 - 关于各参数的详细解释,请参见[《ATC工具使用指南》](https://www.hiascend.com/document/redirect/CannCommunityAtc)。 + 关于各参数的详细解释,请参见[《ATC离线模型编译工具》](https://www.hiascend.com/document/redirect/AscendTensorCompiler)。 ## 准备测试图片 -- Gitee From 07e9773b2b451a21a1de0c4ca7bb3efc9a7ad789 Mon Sep 17 00:00:00 2001 From: Y-keven Date: Fri, 27 Jun 2025 17:01:02 +0800 Subject: [PATCH 5/8] update README file --- .../resnet50_firstapp/README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/python/level2_simple_inference/1_classification/resnet50_firstapp/README.md b/python/level2_simple_inference/1_classification/resnet50_firstapp/README.md index 79f2fa37f..a33ce4506 100644 --- a/python/level2_simple_inference/1_classification/resnet50_firstapp/README.md +++ b/python/level2_simple_inference/1_classification/resnet50_firstapp/README.md @@ -1,7 +1,7 @@ -# 快速入门 +# 快速入门 在本节中,您可以通过一个简单的图片分类应用了解使用AscendCL接口开发应用的基本过程以及开发过程中涉及的关键概念。 -## 什么是图片分类应用? +## 什么是图片分类应用? “图片分类应用”,从名称上,我们也能直观地看出它的作用:按图片所属的类别来区分图片。 @@ -20,7 +20,7 @@ ResNet-50模型的基本介绍如下: > - 置信度是指图片所属某个类别可能性。 > - 类别标签和类别的对应关系与训练模型时使用的数据集有关,需要查阅对应数据集的标签及类别的对应关系。 -## 环境要求 +## 环境要求 - 操作系统及架构:CentOS 7.6 x86\_64、CentOS aarch64、Ubuntu 18.04 x86\_64、EulerOS x86、EulerOS aarch64 - 芯片:Atlas 200/300/500 推理产品、Atlas 推理系列产品、Atlas 训练系列产品 @@ -29,7 +29,7 @@ ResNet-50模型的基本介绍如下: 以下步骤中,开发环境指开发代码的环境,运行环境指运行算子、推理或训练等程序的环境,运行环境上必须带昇腾AI处理器。开发环境和运行环境可以合设在同一台服务器上,也可以分设。 -## 下载样例 +## 下载样例 请选择其中一种样例下载方式: @@ -70,7 +70,7 @@ resnet50_firstapp │ └── firstapp.py // 图片分类样例的运行文件 ``` -## 准备模型 +## 准备模型 1. 以运行用户登录开发环境。 @@ -97,9 +97,9 @@ resnet50_firstapp 关于各参数的详细解释,请参见[《ATC离线模型编译工具》](https://www.hiascend.com/document/redirect/AscendTensorCompiler)。 -## 准备测试图片 +## 准备测试图片 -本次样例需要使用两张动物图片,请执行以下命令将图片下载至“data”目录,或通过以下链接下载到本地后上传至“data”目录。若此处修改测试图片文件名,则需要同步修改src/firstapp.py中读取图片处的文件名,即image_paths变量值。 +本次样例需要使用两张动物图片,请执行以下命令将图片下载至“data”目录,或通过以下链接获取后放至“data”目录。若此处修改测试图片文件名,则需要同步修改src/firstapp.py中读取图片处的文件名,即image_paths变量值。 - [测试图片1](https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog1_1024_683.jpg) @@ -115,8 +115,8 @@ resnet50_firstapp wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog2_1024_683.jpg ``` -## 运行应用 -以运行用户将resnet50_firstapp目录上传至运行环境,以运行用户登录运行环境,切换到resnet50_firstapp目录下,检查环境变量配置是否正确,执行以下命令。 +## 运行应用 +以运行用户将resnet50_firstapp目录放至运行环境,以运行用户登录运行环境,切换到resnet50_firstapp目录下,检查环境变量配置是否正确,执行以下命令。 ``` python3 src/firstapp.py -- Gitee From 860242cb1d4099eb6954c76d671a8325ea62b40d Mon Sep 17 00:00:00 2001 From: Y-keven Date: Fri, 27 Jun 2025 17:02:04 +0800 Subject: [PATCH 6/8] update python files, add LICENSE HEADER --- .../resnet50_firstapp/src/constant.py | 14 ++++++++++++++ .../resnet50_firstapp/src/firstapp.py | 16 +++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/python/level2_simple_inference/1_classification/resnet50_firstapp/src/constant.py b/python/level2_simple_inference/1_classification/resnet50_firstapp/src/constant.py index 5db1d43b2..6b389277f 100644 --- a/python/level2_simple_inference/1_classification/resnet50_firstapp/src/constant.py +++ b/python/level2_simple_inference/1_classification/resnet50_firstapp/src/constant.py @@ -1,3 +1,17 @@ +# Copyright 2025 Huawei Technologies Co., Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + # rule for mem ACL_MEM_MALLOC_HUGE_FIRST = 0 diff --git a/python/level2_simple_inference/1_classification/resnet50_firstapp/src/firstapp.py b/python/level2_simple_inference/1_classification/resnet50_firstapp/src/firstapp.py index a6f3fcfca..363becfb5 100644 --- a/python/level2_simple_inference/1_classification/resnet50_firstapp/src/firstapp.py +++ b/python/level2_simple_inference/1_classification/resnet50_firstapp/src/firstapp.py @@ -1,3 +1,17 @@ +# Copyright 2025 Huawei Technologies Co., Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + import os import acl import numpy as np @@ -147,4 +161,4 @@ if __name__ == "__main__": # 输出top_5 print_top_5(result) - del resnet50 \ No newline at end of file + del resnet50 -- Gitee From a8fc99560bbd21686bead35adafaacdd7fc21738 Mon Sep 17 00:00:00 2001 From: Y-keven Date: Mon, 30 Jun 2025 14:32:00 +0800 Subject: [PATCH 7/8] update README file, change PNG image url --- .../resnet50_firstapp/README.md | 2 +- .../resnet50_firstapp/README_fig.png | Bin 52109 -> 0 bytes 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 python/level2_simple_inference/1_classification/resnet50_firstapp/README_fig.png diff --git a/python/level2_simple_inference/1_classification/resnet50_firstapp/README.md b/python/level2_simple_inference/1_classification/resnet50_firstapp/README.md index a33ce4506..466780ba3 100644 --- a/python/level2_simple_inference/1_classification/resnet50_firstapp/README.md +++ b/python/level2_simple_inference/1_classification/resnet50_firstapp/README.md @@ -5,7 +5,7 @@ “图片分类应用”,从名称上,我们也能直观地看出它的作用:按图片所属的类别来区分图片。 -![输入图片说明](README_fig.png) +![输入图片说明](https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/resource/pyacl_resnet50_firstapp.png) 但“图片分类应用”是怎么做到这一点的呢?当然得先有一个能做到图片分类的模型,我们可以直接使用一些训练好的开源模型,也可以基于开源模型的源码进行修改、重新训练,还可以自己基于算法、框架构建适合自己的模型。 diff --git a/python/level2_simple_inference/1_classification/resnet50_firstapp/README_fig.png b/python/level2_simple_inference/1_classification/resnet50_firstapp/README_fig.png deleted file mode 100644 index 37a7d6271d80c3a746ecc6b9a6df0607da352b73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52109 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 Date: Mon, 30 Jun 2025 15:17:29 +0800 Subject: [PATCH 8/8] change .keep file --- .../1_classification/resnet50_firstapp/data/.keep | 1 + .../1_classification/resnet50_firstapp/model/.keep | 1 + 2 files changed, 2 insertions(+) diff --git a/python/level2_simple_inference/1_classification/resnet50_firstapp/data/.keep b/python/level2_simple_inference/1_classification/resnet50_firstapp/data/.keep index e69de29bb..8d1c8b69c 100644 --- a/python/level2_simple_inference/1_classification/resnet50_firstapp/data/.keep +++ b/python/level2_simple_inference/1_classification/resnet50_firstapp/data/.keep @@ -0,0 +1 @@ + diff --git a/python/level2_simple_inference/1_classification/resnet50_firstapp/model/.keep b/python/level2_simple_inference/1_classification/resnet50_firstapp/model/.keep index e69de29bb..8d1c8b69c 100644 --- a/python/level2_simple_inference/1_classification/resnet50_firstapp/model/.keep +++ b/python/level2_simple_inference/1_classification/resnet50_firstapp/model/.keep @@ -0,0 +1 @@ + -- Gitee