人工智能技术及应用 课件 张文安ch3-硬件部署与工具介绍;ch4-软件安装与部署;ch5-摄像头模糊检测_第1页
人工智能技术及应用 课件 张文安ch3-硬件部署与工具介绍;ch4-软件安装与部署;ch5-摄像头模糊检测_第2页
人工智能技术及应用 课件 张文安ch3-硬件部署与工具介绍;ch4-软件安装与部署;ch5-摄像头模糊检测_第3页
人工智能技术及应用 课件 张文安ch3-硬件部署与工具介绍;ch4-软件安装与部署;ch5-摄像头模糊检测_第4页
人工智能技术及应用 课件 张文安ch3-硬件部署与工具介绍;ch4-软件安装与部署;ch5-摄像头模糊检测_第5页
已阅读5页,还剩166页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

3硬件部署与工具介绍IntroductiontoHardwareDeploymentandToolsChapter03学习目标硬件介绍01工具介绍02模型量化和推理03课后习题043.1硬件介绍

3.1.1主机AIBOX是一款为加速视频AI(ArtificialIntelligence,人工智能)处理能力设计的硬件(如图3-1所示),内置高能效NPU(Neural-networkProcessingUnits,嵌入式神经网络处理器),适用于各类深度学习模型的加速推理。双核Cortex-A35,最高频率1.6GHz,峰值NPU算力高达3.0TOPs(TeraOperationsPerSecond,每秒钟能处理的万亿次数,1TOPs代表处理器每秒钟可进行一万亿次),支持OpenCL/OpenVX,支持INT8/INT16/FP16支持TensorFlow、Caffe、ONNX、Darknet模型。2GBDDR3内存,8GB高速eMMC4.51存储器。AIBOX主机外观图3.1硬件介绍

3.1.2RK1808K芯片简介AIBOX主要的模块是瑞芯微公司出的RK1808K:CPU:双核Cortex-A35,最高频率1.6GHzNPC:3TOPsforINT8/300GOPsforINT16/100GFLOPsforFP16支持OpenCL/OpenVX支持INT8/INT16/FP16支持TensorFlow、Caffe、ONNX、Darknet模型存储:800MHz32-bitLPDDR2/LPDDR3/DDR3/DDR3L/DDR4支持SerialSPINOR/NANDFlash,EMMC视频处理器:1080p@60FPSH.264解码1080p@30FPSH.264编码3.1硬件介绍

3.1.2RK1808K芯片简介图像处理器:支持2MP,AE/AWB/AF视频输入:4-lane,MIPI-CSI,支持VirtualChannel支持BT.601/BT.656/BT.1120显示:4-lane,MIPI-DSI,最大到1920*1080bitParallelRGBpanel,最大到1280*720其他接口:支持USB3.0/PCIe2.1内置2-ch&8-chI2S&8-chPDM,内置VAD支持千兆以太网8xUART/3xSPI/6xI2C/11xPWM/4xSARADC封装:BGA14*14,FCCSP420LDRK1808系列BlockDiagram3.1硬件介绍

3.1.3接口1)线束接口摄像头接口:3路AHD视频,支持1080p、720p分辨率。以太网接口:2路Eth网络接口,支持100Mbps传输速度。其中ETH1网线

接口用ssh访问,用ssh访问时需要一个航空转网线的接口。

显示屏接口:1路HDMI输出。线束接口显示屏及其接口2)USB接口:1路USB调试口,支持ADB调试。3)SD卡接口:1路SD卡接口,支持Fat、vFat、Ext2、

Ext3、Ext4文件系统。3.1硬件介绍

3.1.4电源连接1)电源24V供电

下图是AIBox的电源线,电源线是改造之后的电源线,两者都可使用。2)5VUSB供电,但USB供电带不动AHD摄像头,需要接AHD摄像头使用时用

电源供电。3.2工具介绍

3.2.1MobaXtermMobaxterm是一款远程管理工具,可以让用户在Windows操作系统中使用多个实用工具和远程连接功能,它结合了许多其他的网络工具,以帮助用户轻松管理远程计算机。这款软件简单易用,速度快,支持SSH、Telnet、SFTP、RDP和VNC等多种远程协议,同时还支持MSWindows系统本地X11映射。在MobaXterm官网:/下载自己所需要的版本。MobaXterm提供了两个版本,一个是HomeEdition(家庭版),另一个是ProfessionalEdition(专业版)。家庭版是免费的,而专业版需要购买。如果你只需要基本的连接功能,那么家庭版足以满足需求。3.2工具介绍

3.2.1MobaXterm选择右边的家庭版安装即可3.2工具介绍

3.2.1MobaXterm下载好Mobaxterm软件后双击打开,点击Session选项,如左图所示。然后选择ssh连接,输入主机IP地址,用户名,端口等信息,即可建立起连接,如右图所示。MobaXterm设置ssh连接3.2工具介绍

3.2.1MobaXterm创建好session后,输入密码(输入密码时并不会显示,只管输入后按确定即可,第一次登陆成功后会提示保存密码,一般选择同意),就可以连接上虚拟机了。而且连上虚拟机之后,它会自动通过FTP也连接到虚拟机,直接拖拽就可以进行文件复制了。登陆后界面主要分两块,左边的是主机的文件,右边是终端,如图所示。勾选左下角的“Followterminalfolder”可以让两个的工作路径保持一致。终端界面介绍3.2工具介绍

3.2.1MobaXterm创建一个session之后,就可以在左侧的session标签里留下它的信息,下次需要连接的时候直接双击即可,如上图所示。文件传输和下载可以采用直接拖拽的方式,或者采用鼠标右键选择相应功能,也可以点击文件的右键,选择下载或者其他功能,如右图所示。3.2工具介绍

3.2.2OpenCV移植和使用OpenCV是一个开源的计算机视觉和机器学习软件库。OpenCV主要为开发计算机视觉程序提供一组公共的底层结构(infrastructure)和加强商业产品中机器的感知能力。OpenCV使用BSD许可证(具体可参见维基百科对于BSD许可证的介绍),它可以被商用并可以修改源代码。OpenCV主要用于图像的加载和保存,图像的简单处理。3.2工具介绍

3.2.2OpenCV移植和使用3.2.2.1OpenCV移植1)下载 #下载opencv gitclone/opencv/opencv.git #下载opencv_contrib gitclone/opencv/opencv_contrib.git #得到opencv目录和opencv_contrib目录并列2)版本切换 #将opencv和opencv_contrib从master分支切换到3.4分支 gitcheckout3.43.2工具介绍

3.2.2OpenCV移植和使用3.2.2.1OpenCV移植3)编译脚本make_opencv.sh在opencv目录加入make_opencv.sh脚本,内容如下:set-x."$(dirname"$0")/config.sh"echo"${PROJECT_DIR}"OPENCV_ROOT=${PROJECT_DIR}/BUILD_DIR=$OPENCV_ROOT/platforms/build_rk1808exportINSTALL_DIR=${PROJECT_DIR}/install_rk1808rm-rf"${BUILD_DIR}"mkdir-p"${BUILD_DIR}"pushd"${BUILD_DIR}"###注意:CMAKE_TOOLCHAIN_FILE需要填写自己环境的真实位置cmake-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON\ -DCMAKE_TOOLCHAIN_FILE="/xxx/xxx/rk1808/prebuilts/gcc/linux-x86/aarch64-rk1808.toolchain.cmake"\-DWITH_CUDA=OFF\-DWITH_MATLAB=OFF\-DWITH_WEBP=OFF\-DBUILD_ANDROID_EXAMPLES=OFF\-DBUILD_DOCS=OFF\-DBUILD_PERF_TESTS=OFF\-DBUILD_TESTS=OFF\-DBUILD_ZLIB=ON\-DBUILD_PNG=ON\-DBUILD_JPEG=ON\-DBUILD_TIFF=ON\-DBUILD_opencv_world=ON\-DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}/opencv"\ -DCMAKE_MAKE_PROGRAM=make\../..make-j32makeinstall3.2工具介绍

3.2.2OpenCV移植和使用3.2.2.1OpenCV移植4)编译chmod+xmake_opencv.sh./make_opencv.sh5)编译结果在opencv/install_rk1808目录下生成了opencv目录(如右图),包括:开发中主要使用opencv的inlude头文件和lib下的libopencv_world.so动态库。3.2工具介绍

3.2.2OpenCV移植和使用CMakeLists.txt: cmake_minimum_required(VERSION2.8.11) include_directories(.) #注意:此处填写真实环境对应的opencv include位置 include_directories(/opencv/path/include) set(DEMO_SRCmain.cpp) #注意:此处填写真实环境对应的opencvlib位置 set(link_libs/opencv/path/lib/libopencv_world.so) SET(TARGETopencv_test) add_executable(${TARGET}${DEMO_SRC}) target_link_libraries(${TARGET}${link_libs}libc.so)main.cpp:#include<opencv2/opencv.hpp>intmain(intargc,constchar**argv){cv::Matimg;img=cv::imread(argv[1]);cv::imwrite("/userdata/test.jpg",img);return0;}

3.2.2.2OpenCV使用3.2工具介绍3.2.3图像格式转换和图像缩放RGA是瑞芯微提供的硬件加速的二维图像基本操作库,例如旋转、镜像、缩放、拷贝、剪裁、格式转换等。为了提高图像处理的可移植性和可用性,对图像格式转换和缩放接口进行了二次封装。3.2.3.1接口介绍1)

图像结构体:enum

Format{HQ_RK_FORMAT_RGBA_8888=0x0,HQ_RK_FORMAT_RGBX_8888=0x1,HQ_RK_FORMAT_RGB_888=0x2,HQ_RK_FORMAT_BGRA_8888=0x3,HQ_RK_FORMAT_RGB_565=0x4,HQ_RK_FORMAT_RGBA_5551=0x5,HQ_RK_FORMAT_RGBA_4444=0x6,HQ_RK_FORMAT_BGR_888=0x7,3.2工具介绍3.2.3.1接口介绍

HQ_RK_FORMAT_YCbCr_422_SP=0x8,

HQ_RK_FORMAT_YCbCr_422_P=0x9,

HQ_RK_FORMAT_YCbCr_420_SP=0xa,

HQ_RK_FORMAT_YCbCr_420_P=0xb,

HQ_RK_FORMAT_YCrCb_422_SP=0xc,

HQ_RK_FORMAT_YCrCb_422_P=0xd,

HQ_RK_FORMAT_YCrCb_420_SP=0xe,

HQ_RK_FORMAT_YCrCb_420_P=0xf,

HQ_RK_FORMAT_BPP1=0x10,

HQ_RK_FORMAT_BPP2=0x11,

HQ_RK_FORMAT_BPP4=0x12,

HQ_RK_FORMAT_BPP8=0x13,

HQ_RK_FORMAT_YCbCr_420_SP_10B=0x20,

HQ_RK_FORMAT_YCrCb_420_SP_10B=0x21,

HQ_RK_FORMAT_UNKNOWN=0x100,};structRgaCfg{

intwidth;

intheight;

intwidth_stride;

intheight_stride;

intformat;

//HAL_TRANSFORM_FLIP_H0x1

//HAL_TRANSFORM_FLIP_V0x2

//HAL_TRANSFORM_ROT_900x4

//HAL_TRANSFORM_ROT_1800x3

//HAL_TRANSFORM_ROT_2700x7

introtation;

//0xFF0100覆盖;

//0xFF0105混合src+(1-alph)*dst

//0xFF0405混合src*alph+(1-alph)*dst

intblend;

//0x00->0xFF:全透明->全不透明

intalpha;

//图像截取的位置

Rectrect;};3.2工具介绍3.2.3.1接口介绍2)

创建: RgaInterface*getRgaInstance()3)

初始化: //src:输入图像的格式和大小 //dst:输出图像的格式和大小 virtualintRgaInit(RgaCfg&src,RgaCfg&dst)4)

反初始化: virtualvoidRgaUninit()5)

图像转换://srcBuffer:输入图像的数据 //srcLen:输入图像的大小 //dstBuffer:输出图像的内存,不需要函数外申请内存,

由函数内提供 //isSrcBufferDirect:已失效,默认即可 virtualintRgaBlit(unsignedchar*srcBuffer,intsrcLen, unsignedchar**dstBuffer,boolisSrcBufferDirect=false)

在图像转换过程中,只需要一次RgaInit,告诉输入的图

像格式和大小、输出的图像格式和大小,在图像输入输

出不变的情况下循环调用RgaBlit即可得到需要的格式和

大小的图像。如图像会随时改变输入与输出的大小或者

格式,则不适合使用RGA处理。3.2工具介绍3.2.3.2转换例子从输入大小为1280×720,格式为yuv420sp的图像中截取左上角位置(100,100),大小为800×400的图像,并把800×400的输入图像转换成600×300的RGB888格式输出,代码如下所示:RgaInterface*rga=getRgaInstance();if(!rga){

printf("getrgafailed\n");

returnNULL;}RgaCfgmSrcCfg;RgaCfgmDstCfg;mSrcCfg.width=1280;mSrcCfg.height=720;mSrcCfg.format=HQ_RK_FORMAT_YCbCr_420_SP;mSrcCfg.rect.w=800;mSrcCfg.rect.h=400;mSrcCfg.rect.x=100;mSrcCfg.rect.y=100;mDstCfg.width=600;mDstCfg.height=300;mDstCfg.format=HQ_RK_FORMAT_RGB_888;if(rga->RgaInit(mSrcCfg,mDstCfg)<0){

printf("rgainitfailed\n");

deleterga;

returnNULL;}unsignedchar*rgb888Out=NULL;//data是输入图像的数据//data_size是输入图像的大小//rgb888Out得到输出图像的数据rga->RgaBlit((unsignedchar*)data,data_size,&rgb888Out);3.2工具介绍3.2.4

素材采集整合以上VideoSource、RGA模块的内容,实现素材采集保存的简单Demo。实时从摄像获取YUV图像,通过RGA转换到RGB888格式和指定的大小,使用OpenCV库保存图片。//包含RGA头文件#include"rga_interface.h"//包含视频源头文件#include"video_source_interface.h"//包含Opencv头文件#include<opencv2/opencv.hpp>#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<signal.h>intg_exit=0;staticintidx=0;usingnamespaceai;//视频源回调类classMyCallback:publicVideoSourceCallback{public:MyCallback(){ //创建一个RGA实例rgaInter=getRgaInstance();}

~MyCallback() { //销毁RGA if(rgaInter) { deletergaInter; rgaInter=NULL; } }3.2工具介绍3.2.4

素材采集 //配置RGA参数intsetCFG(constintwidth,constintheight,intsrc_type){ //源图像宽高srcCfg.width=width;srcCfg.height=height; //源图像格式if(kVideoSourceFmtYuv420sp==src_type)srcCfg.format=0xe;elseif(src_type==kVideoSourceFmtYuv420p)srcCfg.format=0xf;elseif(src_type==kVideoSourceFmtYuv422sp)srcCfg.format=0xc;//;//RK_FORMAT_YCrCb_422_SP//从源图像中截取的大小和位置

srcCfg.rect.x=0;srcCfg.rect.y=0;srcCfg.rect.w=width;srcCfg.rect.h=height;//目标图像的宽高和格式dstCfg.width=width;dstCfg.height=height;dstCfg.format=0x2;//RK_FORMAT_RGB_888; //初始化RGArgaInter->RgaInit(srcCfg,dstCfg);printf("RgaInitinitsuccess..\n");return0;}

//视频源回调函数,得到摄像头一帧图像

的数据、宽高和格式virtualvoidOnVideoSourceDataCallback(constunsignedchar*data,constintwidth,constintheight,constVideoSourceFmtsource_type){printf("videocallbackw:%d,h:%d\n",width,height);unsignedchar*bgrout=nullptr;3.2工具介绍3.2.4

素材采集//在第一帧视频源回调时,使用宽高信息来初始化RGA,只需要初始化一次if(first_frame){first_frame=false;setCFG(width,height,source_type);}

//根据图像类型进行图像转换switch(source_type){casekVideoSourceFmtYuv420p/*constant-expression*/:printf("video_type=%s\n","kVideoSourceFmtYuv420p");/*code*/break;casekVideoSourceFmtYuv420sp/*constant-expression*/://printf("video_type=%s\n","kVideoSourceFmtYuv420sp");rgaInter->RgaBlit((unsignedchar*)data,width*height*3/2,&bgrout);break;

casekVideoSourceFmtYuv422sp/*constant-expression*/:printf("video_type=%s\n","kVideoSourceFmtYuv422sp");//rgaInter->RgaBlitrgaInter->RgaBlit((unsignedchar*)data,width*height*2,&bgrout);break;casekVideoSourceFmtJpeg/*constant-expression*/:printf("video_type=%s\n","kVideoSourceFmtJpeg");break;casekVideoSourceFmtRgb888/*constant-expression*/:printf("video_type=%s\n","kVideoSourceFmtRgb888");break;casekVideoSourceFmtRgb8888/*constant-expression*/:printf("video_type=%s\n","kVideoSourceFmtRgb8888");break;casekVideoSourceFmtBgr888/*constant-expression*/:printf("video_type=%s\n","kVideoSourceFmtBgr888");break;casekVideoSourceFmtRgb565/*constant-expression*/:printf("video_type=%s\n","kVideoSourceFmtRgb565");break;default:printf("video_type=%s\n","unknown");break;}3.2工具介绍3.2.4

素材采集//将转换得到的图像转换成Opencv图像格式cv::Matbgr_img=cv::Mat(dstCfg.height,dstCfg.width,CV_8UC3,(void*)bgrout);cv::Matimg=bgr_img.clone();charname[64]={0};sprintf(name,"/userdata/image_%d.jpg",idx); //保存图像intret=cv::imwrite(name,img);printf("save%s%d\n",name,ret);idx++;}virtualvoidOnVideoSourceInitStatus(VideoSourceStatusstatus){}private:RgaInterface*rgaInter=nullptr;RgaCfgsrcCfg;RgaCfgdstCfg;boolfirst_frame=true;};voidsig_exit(intsig){g_exit=1;}intmain(intargc,char**argv){ //ctrl+c程序退出信号处理signal(SIGTERM,sig_exit);signal(SIGINT,sig_exit);

printf("usage:%s/dev/video01280720\n",argv[0]);if(argc!=4)return0;

char*dev=argv[1];intwidth=atoi(argv[2]);intheight=atoi(argv[3]);printf("dev:%s,width:%d,height:%d\n",dev,width,height); //实现VideoSource回调类MyCallbackcallback;VideoSourceInterface*video_source=VideoSourceInterface::Create(CameraTypeMipi,width,height);if(!video_source)return0;

//初始化VideoSource,内部线程开始工作,图像数据从callback中回调video_source->Init(&callback,kVideoSourceTypeCamera,dev); //等待退出信号while(!g_exit)usleep(100000); //视频源退出video_source->Uninit();return0;}对应的CMakeLists.txt:cmake_minimum_required(VERSION2.8.11)set(so_link_libsvideo_sourcerga_hq)include_directories(./)set(DEMO_SRCmain.cpp)set(EXEC_NAMEvideo_source_rga)add_executable(${EXEC_NAME}${DEMO_SRC})target_link_libraries(${EXEC_NAME}${so_link_libs}libc.so)3.3模型量化和推理

本章节将会介绍常用的四种框架的模型量化方式,并用图像分类、目标检测、语义分割来演示推理的过程。模型的转换需要用以下文件:1)和网络输入相同尺寸的实际应用场景的图片,图片尽可能覆盖所有可能出现的情况。(本章节单纯介绍转换、量化、模拟,所以仅使用1张图片进行量化,同样也采用该图片推理)2)记录图片列表的txt文件3)各类模型的文件量化的流程和接口可以直接参考Rockchip_User_Guide_RKNN_Toolkit,本章节主要是用实际的例子来向作者展示量化和推理过程。量化用到的是rknn的容器,本文中用到的是rknn-toolkit-1.4.0,docker镜像所在地址xxxxx。#将镜像文件导入到docker中dockerimportrknn-toolkit-1.4.0-docker.tar.gzrknn_toolkit:1.4.0#创建容器dockerrun-v/home:/home--namerknnrknn_toolkit:1.4.0#-v代表了磁盘的映射-v/宿主机目录:/容器目录#进入容器dockerexec-itrknn/bin/bash3.3模型量化和推理3.3.1TensorFlow量化TensorFlow的权重所需要用到的是包含了网络和权重的pb文件,一般训练过程中保存的ckpt文件,需要做一步转换的操作。首先准备需要的文件:量化图片:image.jpg图片列表:dataset.txt模型文件:frozen_inference_graph.pb推理相关文件:box_priors.txt预选框、labels_list.txt标签文件量化和推理程序:test.py(见课本58页)模型评估结果模型推理结果3.3模型量化和推理3.3.2PyTorch量化PyTorch的权重所需要用到的是包含了网络和权重的pth文件,需要做一步转换的操作,一般这一步会在训练的工程中做,因为网络的搭建必然是在训练的工程中的,用torchvision.models下载的权重演示则如下。defexport_pytorch_model():net=models.resnet18(pretrained=True)net.eval()trace_model=torch.jit.trace(net,torch.Tensor(1,3,224,224))trace_model.save('./resnet18.pt')首先准备需要的文件:量化图片:image.jpg图片列表:dataset.txt模型文件:weight.pth量化和推理程序:test.py(见书本64页)3.3模型量化和推理3.3.2PyTorch模型评估结果:模型推理结果:3.3模型量化和推理1)什么是ONNXOpenNeuralNetworkExchange(ONNX,开放神经网络交换)格式,是一个用于表示深度学习模型的标准,可使模型在不同框架之间进行转移。ONNX是一种针对机器学习所设计的开放式的文件格式,用于存储训练好的模型。它使得不同的人工智能框架(如PyTorch,MXNet)可以采用相同格式存储模型数据并交互。ONNX的规范及代码主要由微软,亚马逊,Facebook和IBM等公司共同开发,以开放源代码的方式托管在GitHub上。目前官方支持加载ONNX模型并进行推理的深度学习框架有:Caffe2,PyTorch,MXNet,ML.NET,TensorRT和MicrosoftCNTK,并且TensorFlow也非官方的支持ONNX。2)为什么使用ONNXONNX是迈向开放式生态系统的第一步,可以理解为神经网络模型保存的中间格式,它支持多种格式的模型转化为ONNX,可以让不同框架不同平台的模型在训练完成后有个共同的操作,这样可以让开发人员可以随着项目的需求及发展选择最合适的工具,同时可以让算法及模型在不同的框架之间迁移,更加方便不同场景下的部署。简而言之,ONNX的目的就是提供一个跨框架的模型中间表达框架,用于模型转换和部署。它提供的计算图是通用的,格式也是开源的。量化ONNX就不做详细介绍了,这里借用PyTorch的量化方式,将模型转换成ONNX后将rknn.load_pytorch(model='weight.pth',input_size_list=[[3,INPUT_HEIGHT,INPUT_WIDTH]])替换成rknn.load_onnx(model='weight.onnx')即可。3.3.3ONNX3.4课后习题1)简要介绍一下AIBox。2)OpenCV主要用来做什么?3)模型的转换一般需要用到哪些文件?4)什么是ONNX,它有什么作用?4软件安装与部署INSTALLATIONDEPLOYMENTChapter04学习目标环境依赖搭建01系统设置02深度学习环境搭建03深度学习网络搭建044.1环境依赖搭建4.1.1安装Ubuntu系统Ubuntu是一个以桌面应用为主的Linux操作系统,其名称来自非洲南部祖鲁语或豪萨语的“Ubuntu”一词,意思是“人性”,“我的存在是因为大家的存在”,是非洲传统的一种价值观。Ubuntu基于Debian发行版和Gnome桌面环境,而从11.04版起,Ubuntu发行版放弃了Gnome桌面环境,改为Unity。从前人们认为Linux难以安装、难以使用,在Ubuntu出现后这些都成为了历史。Ubuntu也拥有庞大的社区力量,用户可以方便地从社区获得帮助。深度学习的训练任务基本是在Ubuntu系统下进行的,所以下面介绍如何安装Ubuntu系统。在安装Ubuntu前我们需要做好以下准备:1)Ubuntu的镜像(可以去官方网站上下载:DownloadUbuntuDesktop|Download|Ubuntu)2)刻录软件,个人建议ULtralSO(可以在官方网站上下载:/)3)容量大于4G的U盘4)EasyBCD软件,设置系统引导,MBR需要EasyBCD引导,而UEFI不需要(windows双系统,如果是单系统安装请查看请转)4.1环境依赖搭建预装Windows的情况下安装Ubuntu系统的必要准备当前市面上的电脑购买回来都是预装的Windows,下面就以win11为例,如何在电脑上安装Ubuntu。首先我们需要知道自己电脑的类型:1)单个硬盘、MBR传统BIOS;2)双硬盘(固态硬盘和机械硬盘)、MBR传统BIOS;3)单个硬盘、UEFI新BIOS;4)双硬盘(固态硬盘和机械硬盘)、UEFI新BIOS;目前大部分的电脑都是UEFI新BIOS的,为了确认可以在运行界面输入“msinfo32”,再按回车查看,运行可以按住键盘上windows键+r键或者直接开始搜索“运行”。4.1.1安装Ubuntu系统预装Windows的情况下安装Ubuntu系统的必要准备在系统摘要内可以看到BIOS的模式,如果显示传统就说明是MBR传统BIOS,UEFI就是UEFI新BIOS。购买电脑的时候一般都会注明硬盘数量和类型,若不清楚可以右击我的电脑,点击管理。预装Windows的情况下安装Ubuntu系统的必要准备查看磁盘管理,看右下角有几个磁盘对应的就是几个硬盘,如果有更多可以支持鼠标滑轮下滑。若桌面没有“此电脑”你可以右击->个性化->主题->桌面图标设置->选择计算机->确认,桌面即可出现“此电脑”,此时右击查看硬盘信息。预装Windows的情况下安装Ubuntu系统的必要准备下面开始正式安装步骤:

可能网上有人说UEFI用Ubuntu作引导,当需要删除Ubuntu的时候会很烦,但其实很简单,只需要在上文中的磁盘管理中删除对应的卷,再使用DiskGenius删除UEFI创建的EFI系统分区就搞定了。下面我们以UEFI用win作引导为例:1)创建空白磁盘分区选择“此电脑”,右击选择管理->存储->磁盘管理,便可以看到自己电脑的磁盘空间。然后找到windows磁盘管理的最后一个盘,然后右击压缩卷。预装Windows的情况下安装Ubuntu系统的必要准备2)设置压缩的空间量大小,如果太小的话可以把文件移动到其他地方,保证有40G左右的空间,当然越多越好,40GB换算成MB为单位后输入对应的大小,点击压缩(如左图),等待一会后就会在这个磁盘后面多出一块未分配的黑色分区(如右图)。预装Windows的情况下安装Ubuntu系统的必要准备3)将下载好的Ubuntu镜像刻录至U盘打开ULtralSO,点击箭头处,找到镜像保存位置,然后单击该镜像后会出现框内的文件。4)再次点击“启动”,选择写入硬盘镜像预装Windows的情况下安装Ubuntu系统的必要准备点击后的界面(写入镜像过程):这个时候你需要有几点注意:

1.硬盘驱动器必须对应你自己的U盘。

2.镜像是否选对

3.U盘的文件需要备份,因为这里会格式化U盘等待写入完成后即可拔出U盘退出程序。4.1环境依赖搭建安装Ubuntu下面开始安装Ubuntu系统,计算机有很多不同的厂商,每个厂商进入BIOS的方法也不尽相同,但自行百度一般都是可以进入BIOS系统的,这里的设置坑比较多,一定要仔细,避免返工。具体安装Ubuntu系统可以在网上搜索详细教程。4.1环境依赖搭建4.1.2安装WSL开发环境不止一种,读者可以直接在Ubuntu下开发,也可以Windows下建立虚拟机,在虚拟机中安装Ubuntu系统。本节介绍的是在win10环境下,使用WSL进行开发,并附带VSCode辅助编写调试。1)在控制面板->程序中打开“适用于Linux的Windows子系统”,然后重启。4.1环境依赖搭建4.1.2安装WSL打开MicrosoftStore,搜索Ubuntu并安装如下所示,不要直接选Ubuntu,因为那会下载最新版,这里用18.04LTS。3)安装结束后,在开始菜单找到Ubuntu图标(一般就在最上方)点击打开,然后开始初始化Ubuntu并配置用户名和密码等,注意输入密码的时候是看不见的,但是已经输入进去了,后面一步是让你确认密码。4.1环境依赖搭建4.1.2安装WSL4)更换软件源为国内源,并安装必要工具#备份sudocp/etc/apt/sources.list/etc/apt/sources.list.bak#修改sudovi/etc/apt/sources.list#使用下面的源替换旧的内容。deb/ubuntu/bionicmainrestricteduniversemultiversedeb-src/ubuntu/bionicmainrestricteduniversemultiversedeb/ubuntu/bionic-securitymainrestricteduniversemultiversedeb-src/ubuntu/bionic-securitymainrestricteduniversemultiversedeb/ubuntu/bionic-updatesmainrestricteduniversemultiversedeb-src/ubuntu/bionic-updatesmainrestricteduniversemultiversedeb/ubuntu/bionic-backportsmainrestricteduniversemultiversedeb-src/ubuntu/bionic-backportsmainrestricteduniversemultiversedeb/ubuntu/bionic-proposedmainrestricteduniversemultiversedeb-src/ubuntu/bionic-proposedmainrestricteduniversemultiverse#更新系统至最新(刚安装的系统,我总是喜欢先更新到最新,然后就不怎么更新了)sudoapt-getupdate&&sudoapt-getupgrade

#安装cmake,zlib。交叉编译工具链中的gdb依赖libpython2.7-devsudoaptinstallcmakegitbuild-essentialzlib1g-devlibpython2.7-dev--no-install-recommends4.1环境依赖搭建4.1.2安装WSL5)配置环境变量rk1808所需要的交叉编译工具链可以在本教材附赠的工具包中获取,把下载好的交叉编译工具链压缩包存放在Ubuntu的根目录下:/home/用户名,然后在终端下解压tools.tar.gz。工程编译需要直接将交叉编译工具链配置到PATH中,具体的PATH路径因人而异,本处是将解压后的tools文件夹放在D盘目录下。具体操作如右图。4.1环境依赖搭建4.1.2安装WSL验证交叉编译配置是否正常。aarch64-linux-gnu-gcc--versionaarch64-linux-gnu-g++--version6)添加WSL路径映射网络驱动器选择WSL路径WSL目录4.1环境依赖搭建4.1.2安装WSL7)使用VSCodeRemote开发VSCode官网地址/,依据系统选择对应的版本下载即可。使用VSCode在WSL下编程必要的插件是Remote-WSL。点击右下角,选择WSL窗口,文件->打开文件夹->选择对应工程->确定4.1环境依赖搭建4.1.3系统设置安装好Ubuntu系统之后,需要修改系统中的某些设置和安装必要的软件,如修改时间、apt下载源等设置和安装VIM等。4.1.3

.1系统设置Ubuntu认为BIOS的时间是UTC时间,而Windows则认为是本地时间,所以如果是双系统的话,Windows和Ubuntu的时间会相差8个小时,这样就导致在切换系统时,会出现时间差。为了使双系统的时间保持一致,需要修改Ubuntu的时间。打开终端,执行如下命令。$sudotimedatectlset-local-rtc1--adjust-system-clock4.1环境依赖搭建4.1.3系统设置4.1.3

.2安装VIM在Linux下工作怎么能离开VIM?不管是后续更换apt或者Conda下载源,还是设置环境变量等操作,都需要VIM来对文件进行读写等操作。1)安装VIM$sudoaptinstallvim

2)修改VIM的配置VIM的默认配色可能不那么漂亮,但勉强能用。当然,如果想拥有更漂亮的配色方案和更多的功能、模式,使得VIM对文件的读写操作更加方便,可对.vimrc进行如下配置。4.1环境依赖搭建4.1.3系统设置4.1.3

.2安装VIM下载molokai配色方案并进行安装。

下载moloka配色方案,得到的是一个molokai文件夹,需要的molokai.vim配色插件放置在molokai/colors文件夹下。 $sudogitclone/tomasr/molokai

安装molokai,首先进入自己用户文件夹下并新建.vim/colors文件夹。

$sudocd/myuserdir $sudomkdir.vim/colors

然后将下载的molokai.vim文件放入/myuserdir/.vim/colors中。

最后按接下来的步骤在VIM中使用molokai.vim配色方案。4.1环境依赖搭建4.1.3系统设置4.1.3

.2安装VIM

在/home目录下使用vim命令自动创建.vimrc文件。$sudovim~/.vimrc在.vimrc文件中写入需要的配置(见书本80页)。3)VIM的一些基本操作VIM通常可分为四种模式,分别是普通模式、插入模式、命令模式和可视模式。下面介绍了进入各种模式的方式以及在不同的模式下可执行的操作。4.1环境依赖搭建4.1.3

.2安装VIM1.普通模式打开或者新建文件,进入普通模式,命令如下。$vimxxx.txt/.cpp/.py按Esc键可从任意模式回退到普通模式。在普通模式下,可进行移动、复制、粘贴、删除等操作,命令如下。?xxx+Enter从当前位置向上查找关键字,按n键移动到下一位置。dd删除或剪切整行D删除或剪切一行字符,保留空行2dd/2D删除或剪切多行:当前行和下一行dG删除或剪切光标所在行和之后的所有行,光标定位到首行则可删除或剪切所有内容d$删除或剪切光标位置到行尾的内容u撤销Ctrl+r恢复撤销yy复制当前行,包括换行符3yy复制光标所在行和之后的两行,包括换行符y$复制光标位置到行尾,不包括换行符y^复制光标位置到行首p小写p可将内容粘贴到光标之后P大写P可将内容粘贴到光标之前G移动到末行,查看有多少行gg移动到首行10G移动到第10行Home/0/shift+4/移动到行首End/$/shift+6/移动到行尾/xxx+Enter从当前位置向下查找关键字,按n键移动到下一位置。4.1环境依赖搭建4.1.3

.2安装VIM2.插入模式在普通模式下,通过i、a、o、I、A、O键均可进入插入模式。在命令模式下,首先按Esc键退回普通模式,再通过上述键进入插入模式。在插入模式下,可进行文本输入、删除等操作,命令如下。i在光标之前插入a在光标之后追加o在光标所在行的下一行增加新的一行I在行首处插入A在行尾处追加O在光标所在行的上一行增加新的一行4.1环境依赖搭建4.1.3

.2安装VIM3.命令模式在普通模式下,通过:(冒号)进入命令模式。在插入模式下,首先按Esc键退回普通模式,再通过上述键进入命令模式。在命令模式下,可对整个文档进行保存、退出和行号设置等操作,命令如下。:setnu设置行号:setnonu取消行号设置:setshiftwidth?查看当前文本缩进设定值:setshiftwidth=12设置文本缩进:setautoindent/ai设置自动缩进:setautowrite/aw设置自动存档:q直接退出:wq保存并退出4.1环境依赖搭建4.1.3

.2安装VIM4.可视模式在普通模式下,按小写v,大写V和Ctrl+v进入不同的可视化模式。在其它模式下,首先按Esc进入普通模式,再通过上述键进入可视化模式。在可视化模式下,可对文本进行复制、剪切、粘贴等操作,命令如下。v小写v,字符可视化模式,选择文本是以字符为单位。V大写V,行可视化模式,选择文本是以行为单位。Ctrl+v块可视化模式,选择文本是以矩形区域为单位,按下Ctrl+v为矩形的一 角,光标最终的位置为矩形的角。4.1环境依赖搭建4.1.3系统设置更换apt下载源Ubuntu默认使用的官方apt源的服务器在国外,从国内访问速度非常慢。因此,为了加快访问速度,需要把官方apt源更换为国内apt源。国内apt源有清华源、中科大源和阿里云源等,地址如下:

清华源:/ubuntu/。

中科大源:/ubuntu/。

阿里云源:/ubuntu/。更换apt源的步骤如下所示,以下所有命令均在终端执行。4.1环境依赖搭建更换apt下载源1)获取当前Ubuntu的codename$sudolsb_release-aDistributorID:UbuntuDescription:Ubuntu18.04.5LTSRelease:18.04Codename:bionic根据如上显示结果,可以看到Ubuntu18.04.5LTS的codename是bionic,更换apt源的时候需要对应该信息。2)修改源文件source.list

1.进入source.list存放目录Ubuntu的源文件source.list存放在/etc/apt目录下,按如下命令进入该目录。$sudocd/etc/apt

2.修改前备份该文件$sudocp-rsource.listsource.list.bak

3.修改source.list首先清空源文件source.list,然后打开并将如下内容复制到source.list中,可以利用vim打开文件进行复制、清空、粘贴、修改、保存并退出等操作。4.1环境依赖搭建更换apt下载源deb/ubuntu/bionicmainuniverserestrictedmultiversedeb/ubuntu/bionic-securitymainuniverserestrictedmultiversedeb/ubuntu/bionic-updatesmainuniverserestrictedmultiversedeb/ubuntu/bionic-proposedmainrestricteduniversemultiversedeb/ubuntu/bionic-backportsmainuniverserestrictedmultiversedeb-src/ubuntu/bionicmainuniverserestrictedmultiversedeb-src/ubuntu/bionic-securitymainuniverserestrictedmultiversedeb-src/ubuntu/bionic-updatesmainuniverserestrictedmultiversedeb-src/ubuntu/bionic-proposedmainrestricteduniversemultiversedeb-src/ubuntu/bionic-backportsmainuniverserestrictedmultiverse如果想将默认源更换为清华源之外的其它源,只需将/ubuntu/更换为其它镜像源的地址。另外,如果使用的Ubuntu版本不是18.04.5,则需要将bionic替换成第1步中自己的codename。3)更新软件列表和升级$sudoapt-getupdate

$sudoapt-getupgrade更改软件源后能显著提高软件下载速度,有助于后续很多软件联网下载。4.1环境依赖搭建4.1.3系统设置安装GitGit是一个开源的分布式版本管理系统,可以有效地、高速地管理项目版本。1)安装Git$sudoaptinstallgit2)Git基本命令gitclonexxx(远程仓库地址)将远程Git仓库克隆至本地仓库gitbranchdev(分支名)创建分支名devgitcheckoutdev切换到dev分支,可在此分支上修改项目文件,完成后提交主分支mastergitadd.将修改后的文件提交至暂存区gitcommit-m“修改了什么”将暂存区的文件提交至本地仓库gitpush-uorigindev将本地仓库dev分支推送到远程仓库gitcheckoutmaster切换到主分支gitpull将本地仓库更新至与远程仓库一致gitmergedev把dev分支的项目文件合并到主分支gitpush-uoriginmaster将本地仓库主分支推送至远程仓库gitdiff查看当前与上一次提交的文件修改之处gitstatus查看暂存区状态4.1环境依赖搭建安装Git3)Git密钥生成,用于本地与GitHub账户之间通信。首先,在终端使用如下命令,引号内为GitHub的邮箱注册地址,读者可根据需要修改。一路回车,在/root/.ssh下生成id_rsa和id_rsa.pub两个文件。$sudossh-keygen-trsa-C"xxx@"然后利用vim打开/root/.ssh文件夹下的rsa.pub,并复制其所有内容。最后,登录GitHub账户,进入setting/SSHKeys,将内容粘贴至addsshkey中。经过上述操作,就可以建立本地与GitHub账户之间的通信,然后推送和拉取仓库了。4.1.3系统设置4.1环境依赖搭建安装显卡驱动4.1.3系统设置在Ubuntu18.04上安装NVIDIA有三种方法(英文版):使用标准Ubuntu仓库进行自动化安装。使用PPA仓库进行自动化安装。使用官方的NVIDIA驱动进行手动安装。当前只介绍第三种安装方法,其余方法请自行搜索。第三种方法安装步骤如下:1)到官网上下载驱动首先,进入官网下载网址:/geforce/drivers/。然后,按照图4-22进行操作,在手动搜索驱动程序栏根据自己的GPU填写相关信息,然后开始搜索,搜索结果会在网页下方显示。4.1环境依赖搭建安装显卡驱动选择最新的稳定版进行下载,当前是510.54版本,下载完成后,得到一个runfile格式的驱动文件NVIDIA-Linux-x86_64-510.54.run2)如果系统是UEFI引导的话,在BIOS里面清除安全引导(secureboot)首先,使用如下命令,查看是否有输出。$sudolsmod|grepnouveau如果上述命令有输出,打开/etc/modprobe.d/blacklist.conf,在末尾添加blacklistnouveau。之后运行如下命令,使得更改生效。$sudoupdate-initramfs-u然后reboot重启系统。系统重启后,重新运行如下命令,查看是否有输出。$sudolsmod|grepnouveau如果没有输出的话接着往后进行,否则检查之前的操作是否有误。4.1环境依赖搭建安装显卡驱动3)登录系统,按下Ctrl+Alt+F2进入字符模式:首先,运行如下命令,停止界面。$sudoservicelightdmstop然后,给驱动文件赋予运行权限。$sudochmod+xNVIDIA-Linux-x86_64-410.78.run最后,安装驱动的依赖。$sudoaptinstallgccg++make$sudo./NVIDIA-Linux-x86_64-410.78.run-no-x-check-no-nouveau-check-no-opengl-files按照要求一步一步安装即可,注意-no-opengl-files一定不能省略,否则不能正常启动系统。4)重启机器,运行如下命令,测试是否安装成功。$nvidia-smi出现如图所示情况,说明驱动安装成功,否则请检查之前操作是否有误4.1环境依赖搭建安装显卡驱动5)禁止更新内核版本我们通常会选择使用sudoaptupdate来更新缓存,通过sudoaptupgrade来更新软件。但是这时如果有更新的话,之前安装过的驱动就有可能出问题,所以我们禁止更新内核版本。具体操作如下:查看正在使用的内核版本$uname-a查看已经安装的内核版本$dpkg--get-selectionsxxx(内核版本)禁止更新内核版本$sudoapt-markholdlinux-image-4.XX.X-XX-generic(内核版本名称)$sudoapt-markholdlinux-image-extra-4.XX.X-XX-generic(内核版本名称)运行结果如图所示:这样,就实现了使用aptupgrade命令,不升级hold软件包的功能。4.1环境依赖搭建4.1.3系统设置安装CUDA和cuDNNCUDA是一种通用并行计算架构,该架构使GPU能够解决复杂的计算问题,并且大幅提升计算性能,从而加速深度学习模型训练速度。安装步骤如下:1)下载CUDA进入官网下载网址:/cuda-downloads,按图所示选择对应的Linux系统相关信息,可得到对应的CUDA版本。下载CUDA,建议下载”.run”结尾的驱动文件。4.1环境依赖搭建4.1.3系统设置安装CUDA和cuDNN2)安装CUDA依赖$sudoapt-getinstallfreeglut3-devbuild-essentiallibx11-devlibxmu-devlibxi-devlibgl1-mesa-glxlibglu1-mesalibglu1-mesa-dev3)安装CUDA安装时,一开始询问是否安装显卡驱动时候一定要选择no,因为前面已经装过了。4)安装cuDNNcuDNN实际上是一个用于深度神经网络的GPU加速库。安装前需要自行注册NVIDIA官网账号,安装步骤如下:首先,进入官网下载网址:然后,解压cuDNN压缩包。$sudotar-zxvfcudnn-10.0-linux-x64-v7.6.24.tar最后,将解压后的cuda文件夹拷贝到cuda的安装目录即可。$sudocp-rcudnn-10.0-linux-x64-v7.6.24/cuda/*/usr/local/cuda/通常还会配置下环境变量,比如在~/.bashrc文件末尾添加了如下内容:#cudaexportPATH=/usr/local/cuda-10.0/bin:$PATHexportLD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:$LD_LIBRARY_PATH找到与CUDA版本对应的cuDNN压缩包,如图所示,并下载(实际上里面就是单纯的头文件以及库)。/rdp/cudnn-archive#a-collapse742-104.1环境依赖搭建4.1.3系统设置安装Docker以及NVIDIA-DockerDocker是什么,通常的回答是:一个轻量级的虚拟机。Docker最大的好处就是打包很复杂的编译环境,深度学习训练环境等。而在Docker中配置的环境不会对主机的物理环境产生任何影响。但是,Docker有一个致命的缺点就是不能直接使用物理机上的GPU,而我们却又需要使用GPU,那该怎么办呢?有需求就有人满足需求,于是就有了NVIDIA-Docker的横空出世。NVIDIA-Docker本质上是docker的一个扩展插件。有了这个神器就能在Docker中使用GPU了。1)安装Docker全新安装时,无需执行第一行。sudoaptremovedockerdocker-enginedocker.iosudoaptupdate添加依赖sudoaptinstallapt-transport-httpsca-certificatescurlsoftware-properties-common添加docker仓库curl-fsSL/docker-ce/lin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论