【CANN训练营第三季】AI目标属性编辑应用

news2025/1/8 18:11:01

文章目录

      • 1、参考样例进行运行stargan
      • 2、dvpp媒体数据处理
  • 结业考核
    • 题目1、
    • 题目2、
    • 题目3

1、参考样例进行运行stargan

下载stargan后,查看readme,进行复现。

# 为了方便下载,在这里直接给出原始模型下载及模型转换命令,可以直接拷贝执行。
cd $HOME/samples/cplusplus/level2_simple_inference/6_other/StarGAN/model/

总是报错找不到这个文件,那我们直接上传到家目录也很方便。
在这里插入图片描述

wget https://sharedata.obs.cn-north-4.myhuaweicloud.com/StarGAN.zip
unzip StarGAN.zip
cd $HOME/StarGAN/StarGAN/StarGAN/model/
wget https://sharedata.obs.cn-north-4.myhuaweicloud.com/StarGAN.onnx
wget https://sharedata.obs.cn-north-4.myhuaweicloud.com/aipp_nv12.cfg
atc --framework=5 --model=StarGAN.onnx --output=StarGAN_aipp --input_format=NCHW --input_shape="real_img:1,3,128,128;attr:1,5" --soc_version=Ascend310 --insert_op_conf=aipp_nv12.cfg

cd $HOME/StarGAN/StarGAN/StarGAN/scripts/
bash sample_build.sh

bash sample_run.sh

在这里插入图片描述
遇到了这样一个报错
在这里插入图片描述
我猜想是不是对目录项有所依赖呢?
于是,我选择了把这个文件复制到level2下。

cp -r $HOME/StarGAN/StarGAN/StarGAN/ $HOME/samples/cplusplus/level2_simple_inference/6_other/StarGAN/

看来倒不是这个原因
在这里插入图片描述
那参考一下配置环境变量的文件:
https://gitee.com/ascend/samples/blob/master/cplusplus/environment/environment_variable_configuration_CN.md

我以为是DDK和NPU_HOST的问题,结果却不是。
我又研究了一番代码补全,终于使得编译通过了。
在这里插入图片描述
遇到不会的地方,完全可以看下B站Ascend主讲老师的代码,然后和自己的代码进行对比调试,特别是TODO的部分,要仔细研究错误代码和错误原因。
在这里插入图片描述

2、dvpp媒体数据处理

jpegd参考:https://gitee.com/ascend/samples/tree/master/cplusplus/level2_simple_inference/0_data_process/jpegd
resize参考:
https://gitee.com/ascend/samples/tree/master/cplusplus/level2_simple_inference/0_data_process/resize
这里就不再赘述过程。
只需要注意jpegd是图片编码
在这里插入图片描述

resize可以通过命令修改有关参数,输入和得到的必须是yuv
在这里插入图片描述

同步推理参考:https://gitee.com/ascend/samples/tree/master/cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification
在这里插入图片描述
在这里插入图片描述

export DDK_PATH=$HOME/Ascend/ascend-toolkit/latest
export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub

在这里插入图片描述
在这里插入图片描述
**参考:**https://blog.csdn.net/weixin_44676081/article/details/106755135
得到对应标签

结业考核

题目1、

目标:

让学员根据讲师讲解的内容、在样例代码基础上补充关键步骤的代码,以便学员了解整体开发流程、掌握关键代码逻辑。

实战场景:

单击Link获取AI目标属性编辑应用的源码包,补充缺失步骤的代码。

评分细则:

使用atc工具转换模型,提供转换命令及转换成功的截图。(5分)

cd model/
wget https://sharedata.obs.cn-north-4.myhuaweicloud.com/StarGAN.onnx
wget https://sharedata.obs.cn-north-4.myhuaweicloud.com/aipp_nv12.cfg
atc --framework=5 --model=StarGAN.onnx --output=StarGAN_aipp --input_format=NCHW --input_shape="real_img:1,3,128,128;attr:1,5" --soc_version=Ascend310 --insert_op_conf=aipp_nv12.cfg

在这里插入图片描述

完成样例代码补充,提供提交成功编译应用源码以及成功运行应用的截图。(15分)
参考VPC的整个流程代码。
参考:https://gitee.com/ascend/samples/tree/master/cplusplus/level1_single_api/7_dvpp

cd $HOME/StarGAN/StarGAN/StarGAN/data/
wget https://sharedata.obs.cn-north-4.myhuaweicloud.com/input_1.jpg
wget https://sharedata.obs.cn-north-4.myhuaweicloud.com/input_2.jpg
cd $HOME/StarGAN/StarGAN/StarGAN/scripts/
bash sample_build.sh
bash sample_run.sh

看来最后对loadmodel的迁移还有一部分问题。
提个issue看看。
终于编译成功。
在这里插入图片描述
代码提交:https://gitee.com/qmckw/star-gan-ascend

总结实战过程中遇到的问题及解决方法,并提交总结。(5分)
只需要在有关的案例中找到类似的例子,适配即可,同时认真看视频,对比不同之处。

题目2、

目标:

让学员掌握DVPP图片处理的开发流程,便于在应用中对图片数据进行预处理或后处理。

实战场景:

开发一个图片数据处理的应用,支持对JPEG、PNG格式的图片进行解码,再对解码后的图片进行缩放,使得输入和输出图片的分辨率不同。

JPEG图片解码、PNG图片解码、图片缩放等处理后的输出图片,由于图片宽、高的对齐约束,可能存在绿边,该实战中学员可以不关注绿边。

开发应用时,可从Sample仓查找更多样例源码。

评分细则:

开发一个“JPEG图片解码+图片缩放”功能串联的图片处理应用,提交成功编译应用源码以及成功运行应用的截图。(10分)

开发一个“PNG图片解码+图片缩放”功能串联的图片处理应用,提交成功编译应用源码以及成功运行应用的截图。(10分)

开发图片处理应用时,在一个应用中,实现既支持“JPEG图片解码+图片缩放”,又支持“PNG图片解码+图片缩放”,根据用户输入的图片格式(JPEG或PNG)来判断走哪个分支,提交成功编译应用源码以及成功运行应用的截图。(10分)

串联功能时,如果实现内存复用,例如,JPEG图片的输出可以作为图片缩放的输入、图片缩放的输出可以作为JPEG图片编码的输入,提交成功编译应用源码以及成功运行应用的截图。(5分)

总结实战过程中遇到的问题及解决方法,或优化Sample仓中的样例源码(包括优化代码逻辑、优化代码注释、补充代码注释等),并提交问题总结、优化后的源码、优化思路说明、优化位置说明。(5分)

PNG+JPEG解码缩放:https://gitee.com/qmckw/png-jpeg-decoding-scaling
PNG图片解码+图片缩放:https://gitee.com/qmckw/PNGD-resize
JPEG图片解码+图片缩放:https://gitee.com/qmckw/JPEGD-resize

主要问题是串联时可以有一个内存复用,以JPEG图片解码+图片缩放为例:
JPEG图片的输出可以作为图片缩放的输入、图片缩放的输出可以作为JPEG图片编码的输入。
如果不内存复用,就copy_data
在这里插入图片描述
如果内存复用,直接用decodeData作为resize的输入,直接在后续过程使用decodeOutDevBuffer_,不用aclrtMemcpy.
在这里插入图片描述

  • JPEGD-resize运行成功截图:

  • 在这里插入图片描述

  • PNGD-resize运行成功截图:

  • 在这里插入图片描述

  • 混合png、jpeg判断逻辑截图-运行成功截图(包括png、jpeg由输入自动判断):

  • 在这里插入图片描述
    在这里插入图片描述

题目3

3、目标:

让学员掌握图片数据预处理+模型推理的完整开发流程,便于根据实际场景开发更多AI应用。

实战场景:

下载ResNet18模型或从ModelZoo仓中自选模型,开发一个包含图像数据预处理的推理应用。

开发应用时,可从Sample仓查找更多样例源码。

评分细则:

根据所下载的模型,提交应用的整体分析、设计思路,包含模型的输入和输出数据情况、需要什么样的数据预处理功能、关键代码逻辑是什么等。(5分)
具体的预处理功能我写了个markdown到gitee:

我选择的模型是ATC SSD-Resnet34(FP16)
https://www.hiascend.com/zh/software/modelzoo/models/detail/1/324b0ca450184da99130d5d9c56baf4a/1
在这里插入图片描述

使用atc工具转换模型,提供转换命令及转换成功的截图。(5分)

atc --model=caffe_model/ssdresnet34_1batch_tf.pb --framework=3 --output=model/resnet34_tf --output_type=FP32 --soc_version=Ascend310 --input_shape="input:1,300,300,3" --log=info

根据所选模型,开发对应的图像数据预处理功能,代码能成功编译运行,输出处理后的图片,提交成功编译应用源码以及成功运行应用的截图。(10分)

import numpy as np
import os
from PIL import Image

def process(input_path):
    try:
        input_image = Image.open(input_path)
        #resnet34 输入大小为224*224
        input_image = input_image.resize((300,300))
        # 默认h为0, w为1,
        # hwc
        img = np.array(input_image)
        height = img.shape[0]
        width = img.shape[1]
        h_off = int((height-300)/2)
        w_off = int((width-300)/2)
        crop_img = img[h_off:height-h_off, w_off:width-w_off, :]
        # rgb to bgr 不需要,直接用rgb在resnet101
        # img = crop_img[:, :, ::-1]
        # shape = img.shape
        img = crop_img
        shape = img.shape
        #数据类型为RGB_FP32	
        img = img.astype("float32")
        img[:, :, 0] -= 104
        img[:, :, 1] -= 117
        img[:, :, 2] -= 123
        img = img.reshape([1] + list(shape))
        # nhwc PIL默认就是NHWC
        result = img
        # nchw
        # result = img.transpose([0, 3, 1, 2])
        output_name = input_path.split('.')[0] + ".bin"
        result.tofile(output_name)
    except Exception as except_err:
        print(except_err)
        return 1
    else:
        return 0
if __name__ == "__main__":
    count_ok = 0
    count_ng = 0
    images = os.listdir(r'./')
    for image_name in images:
        if not image_name.endswith("jpg"):
            continue
        print("start to process image {}....".format(image_name))
        ret = process(image_name)
        if ret == 0:
            print("process image {} successfully".format(image_name))
            count_ok = count_ok + 1
        elif ret == 1:
            print("failed to process image {}".format(image_name))
            count_ng = count_ng + 1
    if count_ng == 0:
        print("{} images in total, {} images process successfully" .format(count_ok + count_ng, count_ok))
    else:
        print("{} images in total, {} images process successfully, {} images process failed"
            .format(count_ok + count_ng, count_ok, count_ng))

在这里插入图片描述

在第3步开发的代码中,根据所选模型,串接模型推理的代码,提交成功编译应用源码以及成功运行应用的截图。(10分)
在这里插入图片描述
在这里插入图片描述
运行成功

总结实战过程中遇到的问题及解决方法,并提交总结。(5分)
这个题和之前做过的resnet101很相似,有几个修改点:

  • 修改预处理,转换为模型需要的输入格式
  • 修改载入模型的步骤,因为均为resnet系列模型,大部分可以复用
  • 修改模型转换命令

代码链接:https://gitee.com/qmckw/resnet34-ascend310

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/146529.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Tic-Tac-Toe:基于Minimax算法的人机对弈程序(python实现)

目录 1. 前言 2. Minimax算法介绍 2.1 博弈树 2.2 估值函数 2.3 基本算法思想 2.4 实例1 ​​​​​​​2.5 实例2—棋类游戏 2.6 小结 3. Tic-Tac-Toe minimax AI实现 3.1 函数说明 3.2 处理流程 3.3 代码 4. 小结 1. 前言 在上一篇中实现一个简单的Tic-Tac-Toe人…

【07】概率图推断之信念传播

概率图推断之信念传播 文章目录将变量消除视为信息传递信息传递算法加总乘积信息传递因子树上的加总乘积信息传递最大乘积信息传递总结在《概率图推断之变量消除算法》中,我们讲了变量消除算法如何对有向图和无向图求P(Y∣Ee)P(Y \mid E e)P(Y∣Ee)的边缘概率。 …

java 微服务之MQ 异步通信

初识MQ 同步调用存在的问题 异步调用常见实现就是事件驱动模式 事件驱动模式优势: 优势1:服务解耦 一旦有新业务只需要订阅或者减少事件就行了 优势2:性能提升,吞吐量提高 优势3:服务没有强依赖,不用担…

【自学C++】C++注释

C注释 C注释教程 用于注解说明解释程序的文字就是注释,注释提高了代码的阅读性。同时,注释也是一个程序员必须要具有的良好编程习惯。我们应该首先将自己的思想通过注释先整理出来,再用代码去体现。 在 C 中,一旦程序中某部分内…

数据结构和算法-计数排序

1.算法描述 技术排序是一个基于比较的排序算法,该算法于1954由Harold H. Seward 提出。它的优势在于对 一定范围内的整数排序时,它的复杂度为O(nk)(其中k是整数的范围),快于任何比较排序算 法…

JavaEE高阶---Spring事务和事务传播机制

一:什么是事务? 事务定义:将⼀组操作封装成⼀个执⾏单元(封装到⼀起),要么全部成功,要么全部失败。 二:Spring中事务的实现 编程式事务(⼿动写代码操作事务&#xff09…

使用 Flink CDC 实现 MySQL 数据实时入 Apache Doris

简介 主要内容如下: MySQL 安装和开启binogFlink环境准备Apache Doris 环境准备启动Flink CDC作业 1. MySQL 安装和开启binog 参考文章:Ubuntu 安装 Mysql server, 这篇文章介绍了MySQL的安装,用户创建,Binlog开启等内容。 M…

Linux基础入门和常用命令

Linux基础入门和常用命令一. Linux介绍1.1 Linux的发行版本二. Linux环境搭建三. Linux的常用指令3.1 Linux下的目录结构3.2 ls命令3.3 pwd命令3.4 cd指令3.5 touch指令3.6 mkdir指令3.7 rmdir指令和 rm 指令3.8 man指令3.9 mv指令3.10 cp指令3.11 cat3.12 more指令3.13 less指…

基于机器学习组合模型的个人信用评估

《基于机器学习组合模型的个人信用评估》课程报告 摘要 个人信用评估在信用经济市场发挥着及其重要的基础作用,促进信用经济的发展,稳定经济市场。个人信用信息主要有个人基本信息、还款能力和还款意愿;个人基本信息主要由年龄、性别、地区等特征构成&…

C语言灵魂核心——指针深度修炼

🐒个人主页:平凡的小苏📚学习格言:别人可以拷贝我的模式,但不能拷贝我不断往前的激情目录 1. 字符指针 2. 指针数组 3. 数组指针 3.1 数组指针的定义 3.2 &数组名VS数组名 3.3 数组指针的使用 4. 数组参数、…

【读论文】TCPMFNet

【读论文】TCPMFNet简单介绍网络结构编码器图像融合网络Vision Transformer特征融合网络网格连接解码器损失函数总结参考论文:https://www.sciencedirect.com/science/article/pii/S1350449522003863 如有侵权请联系博主 简单介绍 今天要介绍的是TCPMFNet&#xf…

六大排序算法

1. 插入排序步骤:1.从第一个元素开始,该元素可以认为已经被排序2.取下一个元素tem,从已排序的元素序列从后往前扫描3.如果该元素大于tem,则将该元素移到下一位4.重复步骤3,直到找到已排序元素中小于等于tem的元素5.tem…

如何使用 Pandas 清洗二手房数据并存储文件

目录 一、实战场景 二、知识点 python 基础语法 python 文件读写 pandas 数据清洗 三、菜鸟实战 清洗前的文件 读取源文件 对二手房数据进行清洗 清洗完成后保存到文件 运行结果 运行截图 结果文件 一、实战场景 如何使用 Pandas 清洗的二手房数据并存储文件 二…

初识结构体(详细版)

目录 一、结构体的声明 1、结构的基础知识 2、结构的声明 3、结构成员的类型 4、结构体变量的定义和初始化 二、结构体成员的访问 1、点操作符访问 2、->操作符访问 3、解引用访问 三、结构体嵌套 四、结构体传参 1、传值调用 2、传址调用 一、结构体的声明 1、结构的基…

Vue2前端路由(vue-router的使用)

一、vue2axiosExpressMySQL实现前后端交互1、后台:(1)确定MySQL的表格:明确数据库 (mvc) —- 数据表(ssm_book)(2)创建Express项目:mysql2、cors、Sequelize(ORM)、nodem…

imx6ull Linux sdk下载验证

本文章是基于整点原子的imx6ull alpha开发板一.Linux SDK源码以及image1.环境准备其他的工具我们就不做介绍了,比如ubuntu ftp,ssh等等,我们主要来介绍下编译链1.1 交叉编译链背景:因为在原子的教程中有强调最新的Linaro gcc编译完uboot后无法…

备受认可!中睿天下荣登“2022创业邦100未来独角兽”年度榜单

近日,由创业邦、复旦大学管理学院主办的2022创业邦100未来独角兽峰会暨创业邦年会在上海举办。在峰会现场,2022创业邦100未来独角兽榜单正式揭晓,中睿天下凭借出众的综合实力荣登榜单。作为一家以“实战对抗”为特点的能力价值型网络安全厂商…

Java版设计模式/设计模式的作用是什么/类之间有哪些关系?又怎么表示

继续整理记录这段时间来的收获,详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用! 1. 设计模式概述 1.1 设计模式创始“4人组” ErichGamma–艾瑞克伽马Richard Helm—理查德赫尔码Ralph Johnson----拉尔夫约翰逊John Vlissides—约翰威力斯蒂斯…

【Linux】Linux编译器-gcc/g++的使用和程序执行的基础底层原理

Linux编译器1.gcc/g 的使用2. 程序的基本翻译过程3.预处理3.1验证预处理的功能(gcc -E)4.编译(变成汇编语言)4.1验证编译过程(gcc -S)5.汇编(生成机器可识别代码)5.1验证汇编过程&am…

K_A11_002 基于STM32等单片机驱动DS18B20串口与OLED0.96双显示

K_A11_002 基于STM32等单片机驱动DS18B20 串口与OLED0.96双显示一、资源说明二、基本参数1.参数2.引脚说明三、驱动说明时序对应程序:四、部分代码说明1、接线说明1.1、STC89C52RCDHT11模块1.2、STM32F103C8T6DHT11模块五、基础知识学习与相关资料下载六、视频效果展示与程序资…