CPP基础
编译
编译过程
c++代码的编译过程大致可以分为编译和链接两个部分。编译是指将源代码翻译成机器语言,并形成目标文件;链接是指把目标文件与操作系统的启动代码和库文件组织起来形成可执行文件。
编译阶段可以细分为三个步骤:
预编译
预编译步骤,编译器执行预处理指令,得到不包含#指令的.i文件,这个过程会拷贝#include包含的文件代码、进行#define宏定义的替换、处理条件编译指令#ifndef、#ifdef等
编译
通过预编译输出的.i文件中,只有常量:数字、字符串、变量的定义,以及c语言的关键字:main、if、else、for、while等。这阶段要做的工作主要是,通过语法分析和词法分析,确定所有指令是否符合规则,之后翻译成汇编代码。
汇编
编译步骤是把汇编语言翻译成目标机器指令的过程,生成目标文件(.obj、.o等)。目标文件中存放的也就是与源程序等效的目标的机器语言代码。
链接阶段:
链接阶段是将有关的目标文件连接起来,如调用了某个库文件中的函数、调用了其他源文件中的函数或常量等,最终生成可执行文件。
c++程序编译过程
C++的编译过程及原理
gcc与g+ ...
linux-随手记
解压缩分卷
解压缩zip分卷
先合并,在解压缩
12cat train.zip* > train.zipunzip train.zip
解压缩到指定目录
1unzip -d train/ train.zip
强制覆盖
1unzip -o train.zip
不覆盖已经存在的文件
1unzip -n train.zip
压缩
压缩文件夹
1zip -r train.zip train/
目录结构
1234567891011121314/bin # 每个用户使用的可执行文件/sbin # 系统的可执行文件/lib # 库文件 /boot # 启动/dev # 设备/etc # 配置文件/home # 家文件/root # root的家/tmp # 临时文件/proc # 一个包含内核信息和进程信息的虚目录/sys # 虚目录,包含设备和文件系统信息/usr # 用户程序/var # 包含日志文件或者其他应用生成的文件/opt # 相当于program files
ls
123 ...
Python-魔法方法
python中以__xxx__存在的方法被称为魔法方法。下面记录几个常用的。
__name__
当python文件被直接运行时,__name__的值为__main__,而当python文件以模块的形式被导入时,__name__的值为模块名。
可以利用__name__ == __main__隐藏不希望被作为导入模块执行的代码块。
__file__
在python模块中使用__file__来获取脚本所在的相对路径,如果希望得到绝对路径可以使用os.path.realpath(__file__)。
__module__
当前操作的对象在哪个模块。
__all__
当文件被以import *方式导入时,哪些成员(变量、函数或类)会被导入进来。
__init__和__new__
__init__初始化方法,负责对实例化对象进行属性值初始化,此方法必须返回None。
__new__是类构造方法,用于产生实例化对象,必须返回一个对象。
__new__ 是在一个对象实例化的时候所调用的第一个方法
它的第一个参数是这个类,其他的参数是用来直接传递给 __init__ 方法
__new__ 决定是否要使 ...
Python-移动文件
需求说明
在跑模型实验时,由于经常会对网络结构进行修改并且多程序并行训练,这就容易造成训练结果与网络模型无法匹配的问题,所以就需要将当前的网络模型代码与训练代码一同移入到日志文件夹中。
解决方法
根据模型对象确定模型所在文件,利用shutil.copy()方法复制文件
123456789101112import sysimport shutilfrom pathlib import Pathmodel = modelClass()trainer = trainerClass()model_path = Path(sys.modules[model.__module__].__file__)shutil.copy(model_path, log_path / model_path.name)trainer_path = Path(sys.modules[model.__module__].__file__)shutil.copy(trainer_path, log_path / trainer_path.name)
说明
__module__
返回当前操作的对象在哪个模块,返回值是字符串 ...
Python-可迭代对象、迭代器、生成器
关系
首先从概念上来说,生成器都是迭代器,迭代器都是可迭代对象。
从另一个角度,可迭代对象包含迭代器、序列(字符串、列表和元组)以及字典。
如果一个对象拥有__iter__方法,其就是可迭代对象;再次基础上添加__next__方法,就是迭代器。
可迭代对象
如何自定义可迭代对象?
首先定义一个普通类,利用iter()方法调用,看会出现什么情况?
123456class MyIterable: def __str__(self): return "example class"ex = MyIterable()print(iter(ex))
此时运行会输出TypeError: 'MyIterable' object is not iterable,可知MyIterable是不可迭代的。
在上面的基础上添加__iter__方法
12345class MyIterable: def __str__(self): return "example class" def __iter__(self): ...
【Transformers】 Tokenizer
Tokenizer
Tokenizer即分词器,主要任务是将文本输入转化为模型可以接受的输入,即数值索引。
不同的Tokenizer策略可以不同的结果,常用的策略有:word base(按照词进行分词),character base(按照单词进行分词),subword tokenization(按照subword进行分词)
Word-based
word base进行分词的话,有两种方式,一种是根据whitespace进行分割,一种是根据标点符号进行分割,然后再做数字的映射。
每个 word 都被赋予一个ID,这个 ID 的范围是从0到 vocabulary size,这种方式有一种问题,就是很容易出现例如,dog 和 dogs,虽然是相近的词,但是被分配了完全不同的无关的id。对于不在vocabulary 库里面的词,我们会分配 [UNK],代表未知词。
Character base
Char base的 tokenization 方式,就是用char,而不是word。 这种方式的好处在于:vocabulary size 很小;比较少机会出现 out of vocabulary 的 ...
【MindStudio训练营第一季】综合应用
本次利用MindStudio实现图片上色,并对模型进行分析。参考代码为colorization
模型介绍
背景
论文发表在2016年ECCV,在当时图像着色方面取得了进步,主要体现在损失函数的设计维持了色彩的多样性;同时引入了一种新的着色算法评估框架;采用自监督学习在基准上取得了较好的效果。
值得注意的是,本文并不是恢复灰度图的真实颜色,而是利用灰度图中物体的纹理、语义等信息作为线索来预测图片可能的颜色,上色的结果只要合理即可,这样降低了上色的难度,同时也符合预期。
动机
本文主要解决2015年时图像着色饱和度较低的问题。因此,本文为每个像素预测一个颜色分布,鼓励探索颜色的多样性。
模型
本文模型较为简单,采用Lab色彩空间,输入图片的L通道,使用卷积神经网络预测对应的ab通道取值的概率分布,最后转为RGB图像。
123Lab颜色模型由三个要素组成,一个要素是亮度(L),a和b是两个颜色通道。a包括的颜色是从深绿色(低亮度值)到灰色(中亮度值)再到亮粉红色(高亮度值);b是从亮蓝色(低亮度值)到灰色(中亮度值)再到黄色(高亮度值)。因此,这种颜色混合后将产生具有明亮效果的色彩。
推理 ...
【MindStudio训练营第一季】MindStudio AscendCL开发应用篇
本文使用YOLOV3进行目标检测,同时使用DVPP进行JPEG解码和缩放,使用AIPP进行色域转换和归一化。
操作过程
下载模型并同步文件
首先根据README中的链接下载模型文件和权重文件,放置在model文件夹下,同时配置远程服务器ssh链接,同步工程文件。
模型转换
利用ATC转为om模型。
编译文件
在编译之前,需要配置环境,可参考昇腾AI设备安装开发环境修改.bashrc和安装opencv等。
添加构建配置,进行构建:
执行
配置并执行
实验结果
输入
输出
代码分析
文件目录
1234567891011121314151617181920212223242526.├── CMakeLists.txt├── data │ └── dog1_1024_683.jpg # 测试图片├── inc # 头文件│ ├── dvpp_process.h│ ├── model_process.h│ ├── sample_process.h│ └── util ...
【MindStudio训练营第一季】MindX SDK 应用
前言
本次使用MindX SDK实现航拍地图风格转换
操作过程
下载工程代码文件
从gitee仓库中下载工程文件,工程目录为
1234567891011StyleTransfer.├── README.md├── README_img │ └── pic.png //README图片├── models │ └── aipp_CycleGAN_pth.config //aipp配置文件 ├── pipeline│ └── styletransfer.pipeline //流程编排文件└── src └── main.py //程序主入口
准备模型文件
从ModelZoo中下载CycleGAN模型,其中提供了ONNX格式的模型,需要利用ATC转换为昇腾支持的om模型。
CycleGAN中有两个生成器实现两个域之间的相互转换,但本次实验中仅需要使用由航拍图到卫星图的转换,仅此仅对model_Ga.onnx文件进行转换,ATC转换前配置AIPP文件aipp_CycleGA ...
【MindStudio训练营第一季】专家系统
专家系统简介
专家系统(Advisor)是用于聚焦模型和算子的性能调优TOP问题,识别性能瓶颈Pattern,重点构建模型和算子瓶颈分析并提供优化推荐,支撑开发效率提升的工具。当前提供的功能有:基于Roofline模型的算子瓶颈识别与优化建议、算子优化分析、基于Timeline的AI CPU算子优化、算子融合推荐、TransData算子识别和基于训练场景的优化推荐。
基础特性
IDE可视化、命令行
生态知识库开发插件
知识库管理
知识库执行引擎
生态知识库市场
关键特性
模型优化知识库
算子优化知识库
训练优化知识库
生态知识库
模型分析
针对推理流程,模型分析涉及计算图分析、模型运行分析和Roofline算子瓶颈分析。
计算图分析
UB融合:识别潜在可融合的cube算子和vertor算子
Transdata:识别可以合理插入traindata算子
AIPP分析:判断模型是否具备首层融合条件,减少算子的调用
模型运行分析
AICore与AICpu算子是否并行
算子瓶颈分析
计算Roofline模型计算算子在算力——带宽图中的位置,判断算子运行情况,以便优化
...