首先,自己在之前安装opencv时已经安装好了Anaconda3(对应4.6.11版本)以及python3.7版本。(安装教程参考博客https://blog.csdn.net/iracer/article/details/90746292 亲测非常实用)
接着自己开始安装tensorflow,因为查了很多资料,没有特别实用的,踩了很多坑,所以就把自己踩过的坑总结一下,呈现给大家。
参考的比较实用的博客(https://blog.csdn.net/weixin_42555080/article/details/100704078)
安装过程(windows+CPU下):
1.检查Anaconda是否成功安装:conda --version
2.检测目前安装了哪些环境:conda info --envs
3.检查目前有哪些版本的python可以安装:conda search --full-name python
4.安装不同版本的python:conda create --name tensorflow python=3.7
5.激活路径:activate tensorflow
6.确保名叫tensorflow的环境已经被成功添加:conda info --envs
7.检查新环境中的python版本:python --version
8.退出当前环境:deactivate
9.安装tensorflow(这里我安装的是tensorflow2.0)
pip install tensorflow==2.0.0(不标明版本则pip自动安装最新版本2.6,版本太高导致不匹配)
10.检查是否安装成功:
在CMD中输入python,
接着输入import tensorflow as tf
最后进行输出:print(tf.version)
大功告成啦。
Original: https://blog.csdn.net/weixin_53386162/article/details/119912712
Author: 科研小白的学习之路
Title: python3.7对应的tensorflow2.0版本安装历程
相关阅读1
Title: Linux服务器安装Anaconda和搭建tensorflow-gpu环境
一、下载并安装Anaconda3
①:下载Anaconda3
(注意!!!Anaconda5.3版本以后是python3.7版本,一定注意避免,防止后续出错,因为这个错误导致耗费了一整天时间,如果需要 Python3.6一定不要下载5.3以后的Anaconda!!!"引自网络")
; ②:安装Anaconda3
将 Anaconda3-5.2.0-Linux-x86_64.sh上传到服务器上:
然后shell跳转到所放 Anaconda3-5.2.0-Linux-x86_64.sh的目录,执行下列命令:
bash Anaconda3-5.2.0-Linux-x86_64.sh
之后便是一路的Enter,直到输入yes/no,输入yes选择安装目录,我的是/home/face/Anaconda,之后便是安装。
再之后询问是否加入配置文件,输入yes。
之后会出现是否安装VScode,我选择了no。
配置环境变量:vim /etc/profile,
输入i进入编辑状态,在文件末尾添加 : **PATH=/XXX/anaconda3/bin:$PATH**
("XXX"是你的根目录名字,注意vim的使用,按ESC再输入i进入编辑模式)
完毕之后,按下ESC,输入":wq",完成保存退出vim
输入 source /etc/profile
,激活环境
可以输入 **python --version**
或 **conda --version**
进行验证。
二、搭建tensorflow-gpu环境
①:创建虚拟环境
conda create -n tf-gpu python=3.6
记得换清华源:
在安装anaconda后,如果执行 conda create -n tf-gpu python=3.6
出现下列问题时,要把镜像源中链接的https修改成http就可以了。
镜像创建好好如下图输入: conda info --envs
查看输出如下图所示结果则为正确:
②:tensorflow相关库的安装
使用 source activate tf-gpu
进入刚刚创建好的环境:
先更新一下pip:
pip install --upgrade pip
安装tensorflow gpu版本:
pip install tensorflow-gpu==1.13.2
pip install keras==2.1.5
pip install h5py==2.10.0
pip install scikit-image
pip install pillow==8.2.0
升级一下apt-get
安装screen(一定要先升级一下apt-get)
apt-get install screen
screen 的相关命令:
创建screen: screen -S name
退出: Ctrl A D
列出: screen -ls
进入: screen -r xxxx
关闭: screen -X -S 122128 quit
以下库全部安装:
当遇到"ImportError: cannot import name '_validate_lengths'"这个问题时,不要相信很多博客中写到的说是"numpy更新过之后_validate_lengths被移除或者改名了"的说法,而是应当安装scikit-image这个库,即可解决问题。
pip install --upgrade scikit-image
pip install opencv-python
Q: ImportError: libGL.so.1: cannot open shared object file: No such file or directory
A:
apt install libgl1-mesa-glx
Q: AttributeError: module 'yaml' has no attribute 'FullLoader'
A:
pip install --ignore-installed PyYAML
.
.
.
.
.
.
(先码到这,未完待续...)
Original: https://blog.csdn.net/Su_Del/article/details/122176817
Author: Minaldo7
Title: Linux服务器安装Anaconda和搭建tensorflow-gpu环境
相关阅读2
Title: Darknet卷积层算力评估
darknet是用C语言开发的一款非常精简高效的推理框架,它的开发者也是YOLO的作者,关于darknet推理环境的介绍网上有很多,不再过多介绍,这里只是尝试解读darknet推理过程中的一些细节知识点,就从推理输出的算力来源开始。
一张经典的输出:
推理过程中的LOG显示中,BF是BFOPS的缩写,它表示什么意思呢?BFLOPS 有两个不同场景下的解释。 第一种是描述硬件运算性能的单位,这时其全称是 Billion Float Operations Per Second,即每秒能进行多少个十亿次浮点运算; 第二种是描述某次卷积运算需要的多少个十亿次浮点运算,其全称是 Billion FLoat OPeration S,将多次卷积等运算所耗费的BLOPS加起来就可以来表示 某个算法模型的复杂度。
在标准的单位中,BFOPS叫做GFOPS,表示每秒10亿次的浮点计算。它和TFOPS有个简单的换算关系,那就是: 1TFOPS=1000GFOPS=1000BFOPS.
现在我们看一下推理输出的BFOPS是如何计算出来的,以第一层输入层为例:
可以看到这一层需要的总共算例为:0.299 BF,怎么计算得来的呢?
下面这篇博客有详细的理论分析:
卷积层的算力评估(MACC和FOPS)_papaofdoudou的博客-CSDN博客
这里我们只把结论搬过来:
也就是说,完成卷积需要的总的浮点计算次数为:卷集核长卷集核宽2输出图长输出图宽卷集核个数每个卷集核的通道数。
其中, 卷集核长卷集核宽每个卷集核的通道数*卷集核个数也表示本层需要的权重参数的个数。
所以以上公式可以简化为: 卷集层总算力=本层需要的权重参数的个数输出图长输出图宽*2。
而且,卷集核长卷集核宽每个卷集核的通道数,多么像一个卷集核的"体积"?
对应于darknet中的l.bflops的实现,l代表当前层,是面向对象的写法。
接下来,我们就验证一下上面的输出结果,对于第一层来说,如下图:
根据以上公式,总的算力计算为:
332416416323=299040768≈0.299 billion float operations = 0.299BF
理论计算和实际结果符合,证明我们的计算方法是正确的。
总算力是多少?
darknet推理结束后,得到的总算力值是65.879 bflops,按照前面介绍的关系进行单位换算,也就是0.065879TFOPS,所以如果以在1T算力的NPU上跑,帧率应为 1/0.065879 = 15.1793439488 FPS. 和VIP的仿真输出差不多。
VIP仿真数据13帧多一点:
pegasus算力评估输出
可以看到,pegasus measure --model yolov3.cfg输出的算力评估结果如下,大头在 macc,单位达到了GFOPS, GFOPS=BFOPS,都是十亿的单位。
pegasus计算出来的yolov3网络算力是32.99G mac 数,转换成浮点,需要再乘以2,所以总的算力是32.992= 65.98GFOPS.和上面darknet得出的 65.879GOPS*的误差几乎可以忽略不计。
再次证明,网络的结构决定了算力的大小,和其它的因素无关。
用同样的方式,分析第二层:
总算力=2082086433322=1594884096 FOPS = 1594884096/1000000000 BFOPS(GFOPS) = 1.59488 BFOPS算力,理论计算和实际输出符合。
另外,根据
darknet pad默认为1,这一层的步长为2,所以,输出尺寸计算公式为:
之所以出现小数,可能是因为实际的填充情况是左边和右边只填充了一边把,dialation 和 stride是同一个意思,都是步长吧,默认为1。
shortcut层算力评估:
以第四层为例:
在网络结构图中,它的结构如下,两个shape为20820864的tensor合并为一个20820864的tensor.
在darknet实现中,它的算力计算公式为:
所以以为上面的shortcut为例,它的总算力需求为:
20820864=2768896FOPS = 2768896/1000000 BFLOPS(GFLOPS) = 0.002768896 ≈0.3BF.
算法逻辑如下,两个TENSOR对应维度相同的成员相加,TENSOR 形状保持不变。
影响算力的因素
根据前面计算算力的公式:
卷集核长卷集核宽2 输出图长输出图宽**卷集核个数每个卷集核的通道数。
我们可以知道,卷积层的算力和输出图长和宽都成正比关系,又根据:
输出feature map尺寸和输入图的尺寸也成线性关系,所以追究下来,卷积层的总算里和输入图的尺寸成正相关,输入图尺寸越大,所需总算力越大。
darknet支持三种格式的图像输入尺寸供我们验证,分别是320x320,416x416和608x608,我们分别验证,将尺寸修改为上面另外的两种,各层算力需求发生什么变化:
首先是608x608,修改很简单,直接修改yolov3.cfg文件net层的参数即可:
推理输出:
可以看到,输入图尺寸变大后,各层算力出现了明显增大,以前两层为例,前后变化比例为:
0.639/0.299=2.1371237458193979933110367892977
3.407/1.595=2.1360501567398119122257053291536
误差很小近似成正比关系,我们在对比以下输入从416x416变到608x608,图像的尺寸变化比例:
所以,算力和图形的面积尺寸成正比,图形越大,算力越大,和图形的二维面积成正比。
推理效果,貌似图像尺寸变大后,推理效果更好了:
如果换成320x320,算力变化也是一样的:
1.595/0.944=1.6896186440677966101694915254237
也是完美符合尺寸正比的规律。来看一下320x320推理的效果:
总结:
320x320,416x416,608x608,推理效果上随着推理输入图尺寸增加也增加,看来高算力不白给,精度也高啊。
结束!
Original: https://blog.csdn.net/tugouxp/article/details/123515298
Author: papaofdoudou
Title: Darknet卷积层算力评估
相关阅读3
Title: iNeuOS工业互联网操作系统,顺利从NetCore3.1升级到Net6的过程汇报
目 录
1..... 概述... 1
2..... 升级的工程... 3
3..... 升级的代码差异... 4
4..... 系统运行... 5
1. 概述
我们团队一直在工业领域从事实时系统和业务系统的开发与集成工作,开发语言使用过C51/C++/VB/VC++/C#(Net Framework)/C#(Netcore3.1)/C#(NET6)。前几天微软发布:.NET 诞生 20 周年,确实挺感慨。记得大概是2002在大学上学的时候,就开始自学C#,这么多年来一直存在使用开发语言优劣的激烈辩论,但是我们只是吃瓜群众。
积累了多年的行业和技术经验,2015年开始规划开发iNeuOS工业互联网平台,尽管由于各种原因,进度比较慢,但是这个方向是正确的。从2019年10月发布1.0版本到2022年2月发布3.6.5版本,全部使用netcore3.1开发。NET5是一个集成的整合版本,没有考虑升级,现在NET7预览版本已经发布,另外netcore3.1今年底面临终止支持,所以现在把iNeuOS升级到NET6框架,即将发布iNeuOS的3.7版本。
NET各版本支持情况,如下图:
iNeuOS发布版本过程,如下图:
2. 升级的工程
后台服务升级项目数量: 36个项目,包括测试项目。
后台Api升级项目数据: 12个项目,包括测试项目。
整个升级及测试过程大概用了一天的时间,如下图:
NET6版本,如下图:
3. 升级的代码差异
主要是差异点是对线程的操作,其他代码涉及到安全或是算法操作,例如Md5的使用。
原来对线程退出的操作,如下:
//原来使用线程的方式
//启动线程
Thread _thread = new Thread(new ThreadStart(RunThread));
_thread.Start();
//运行线程
private void RunThread()
{
while (true)
{
try
{
//code
}
catch(Exception ex)
{
}
}
}
//退出线程
_thread.Abort();
升级后使用线程的方式,如下:
//升级后使用线程的方式
//启动线程
Thread _thread = new Thread(new ThreadStart(RunThread));
_thread.Start();
//运行线程
private void RunThread()
{
while (true)
{
try
{
//code
}
catch(ThreadInterruptedException)
{
break;
}
catch(Exception ex)
{
}
}
}
//退出线程,原来的Abort不再支持
_thread.Interrupt();
4. 系统运行
系统登陆,如下图:
进入系统,如下图:
物联网&大数据技术 QQ群:54256083
物联网&大数据项目 QQ群:727664080
QQ:504547114
微信:wxzz0151
博客:https://www.cnblogs.com/lsjwq
微信公众号:iNeuOS
Original: https://www.cnblogs.com/lsjwq/p/15927415.html
Author: iNeuOS工业互联网系统
Title: iNeuOS工业互联网操作系统,顺利从NetCore3.1升级到Net6的过程汇报