自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 Ubuntu18.04配置rc.local自启脚本方法记录

修改配置文件打开位于/lib/systemd/system/目录下的rc-local.service文件,有默认内容如下:# SPDX-License-Identifier: LGPL-2.1+## This file is part of systemd.## systemd is free software; you can redistribute it and/or modify it# under the terms of the GNU Lesser General Pub

2021-05-12 11:05:29 390 1

原创 Linux终端创建后台进程的方法记录

创建后台进程的目的在终端中创建的子进程会在终端关闭后接收到SIGHUP信号,进而随着终端进程的结束而结束。但有时候我们需要创建一些进程执行长期的任务,且在终端中创建此任务后即可关闭终端,创建的任务则不受影响,继续运行直至结束。终端创建后台进程的方法假设我们有一个Python脚本demo.py或Shell脚本demo.sh,可简单地执行如下命令使得在创建进程执行脚本命令时转为后台进程而不是前台。以执行Python脚本为例,输入以下命令:nohup python demo.py &以Shel

2021-04-05 21:02:12 1316

原创 Ubuntu18.04配置固定IP的方法记录

Desktop固定IP配置对于官方发布的Ubuntu18.04镜像,配置网卡的固定IP需要用到netplan工具,相关的配置文件位于/etc/netplan/01-network-manager-all.yaml。执行如下命令添加指定网卡配置信息到配置文件:sudo vi /etc/netplan/01-network-manager-all.yaml例如我们要对网卡eno1进行配置,则在配置文件中键入以下内容:# Let NetworkManager manage all devices on

2021-04-05 20:24:15 627

原创 PyTorch训练模型添加L1/L2正则化的两种实现方式

L1/L2正则化的作用L1正则化作用到参数会产生更稀疏的解,既能使参数在训练过程中尽量靠近最优解的同时,一些参数为0。L1正则化的稀疏性质被广泛应用于特征选择,可从特征集合中选出具有代表的特征子集,以此简化机器学习问题。L1正则化的表达式如下:f(θ)=∣∣θ∣∣1=∑i∣θi∣f(\theta) = || \theta ||_{1} = \sum_{i} | \theta_{i} |f(θ)=∣∣θ∣∣1​=i∑​∣θi​∣由于上述表达式存在绝对值形式,不能直接求导,但可以使用次梯度表示。L1正

2021-03-02 11:24:02 22175 11

原创 简单易懂的PyTorch版VGG19复现代码

VGG19网络结构VGG的创新点包括使用3x3小核替换传统的5x5或7x7大核卷积,其整个网络除全连接层外,均采用步长为 1 填充为 1 的 3x3 卷积 + ReLU 和步长为 2 填充为 0 的 2x2 最大池化,网络结构非常简洁。VGG网络的输入维度为 3x224x224,在全连接层之前没有使用全局平均值池化压缩特征图的空间维度,而是直接将特征图的后 3 维 Flatten 后输入到全连接层中,这样导致第一个全连接层有较多的参数,且VGG包括 3 个全连接层,在训练时需要使用Dropout等正则化方

2021-02-10 15:43:29 6770 2

原创 简单易懂的PyTorch版ResNet50复现代码

ResNet50网络架构ResNet50是卷积神经网络的代表之一,其广泛使用在包括分类、检测、分割等任务中,可以说是最为著名的深度神经网络之一。PyTorch复现代码# ResNet50.pyimport torchimport torch.nn as nnimport torch.nn.functional as Fclass Conv(nn.Module): def __init__(self, in_channels, out_channels, kernel_size=1,

2021-02-09 14:46:04 7247 2

原创 SublimeText3配置C++/Python运行环境记录

SublimeText3软件配置使用SublimeText3编写Python程序时存在明显的问题就是:默认配置下tab键与space键输入的内容不一致,容易导致Python脚本出现格式不对齐而执行报错,需要修改tab键相关的配置。点击Preferences->Settings打开设置,在Preferences.sublime-settings-User中添加如下: "expand_tabs_on_save": true, "font_face": "Consolas", "font_size"

2021-02-05 21:54:44 186

原创 Windows环境下编译TensorFlow 2.4源码记录

目录前言安装环境依赖安装过程提示编译源码结语前言最近两天重装了PC系统,时间也比较多,正好试试在Windows系统上编译TensorFlow源码。我想尝试编译最新的TensorFlow 2.4.1,搭配CUDA 11.2和cuDNN 8.1,看看在最新的版本下编译会不会出现问题。安照官方的教程走一遍后,编译过程还是比较顺利,没有遇到什么麻烦的问题,可以说不管是在Linux还是Windows下,使用最新版本的TensorFlow、CUDA和cuDNN都能顺利通过编译。下面就简单记录下编译的过程,免得以后重

2021-02-05 17:40:27 1051 3

原创 解决TensorRT does not natively support INT64的问题记录

问题描述在对使用PyTorch导出的onnx模型进行TensorRT解析时出现:Your ONNX model has been generated with INT64 weights, while TensorRT does not natively support INT64. Attempting to cast down to INT32.的错误。解决方法在网上有找到解决方案把onnx模型转TensorRT模型的trt模型报错,但由于机器上安装的onnx版本是1.8.0,pytorch版本是

2021-01-19 13:39:31 7853

原创 OpenCV视频流的C++多线程处理方式

目录为什么需要多线程处理视频流C++的多线程处理方式函数封装的实现方式类封装的实现方式可能遇到的问题为什么需要多线程处理视频流在之前有写过一篇文章Python环境下OpenCV视频流的多线程处理方式,上面简单记录了如何使用Python实现对OpenCV视频流的多线程处理。简单来说,在目标检测等任务中,如果视频流的捕获、解码以及检测都在同一个线程中,那么很可能出现目标检测器实时性不高导致的检测时延问题。使用多线程处理,将视频帧的捕获和解码放在一个线程,推理放在一个线程,可以有效缓解时延的问题,使得目标检测

2021-01-14 11:20:08 12267 9

原创 Android Studio配置OpenCV记录

前言在上一篇文章中简单记录了关于Qt配置Android开发环境的内容,也包括配置OpenCV的部分,这篇文章则是记录在Android Studio上配置OpenCV的方法。由于OpenCV提供的Android开发工具包即包括C++ API也包括Java API,同时Android Studio也支持NDK的开发,故用户可选择使用纯Java完成整个应用的开发,也可以借助JNI和NDK,使用Java和C++混合编程完成应用的开发。Android Studio配置OpenCV包含两个部分,一是OpenCV Ja

2020-12-07 11:16:47 415 1

原创 OpenCV使用DNN模块加载SDD模型Android示例

前言前两天照着OpenCV官方的How to run deep networks on Android device教程,在自己的小米手机上进行了测试,可能是由于手机的API兼容问题,使用OpenCV封装的JavaCameraView控件不能正常打开摄像头,始终是黑屏的状态,起初我以为是SELinux在作妖,直到后面使用Camera2 API才顺利捕获到摄像头帧完成测试。此外,使用OpenCV的官方代码会始终提示要安装OpenCV Manager,即使我已经加载OpenCV的动态链接库,后来直接跳过Ope

2020-12-06 18:25:45 944 2

原创 Qt环境下C++&QML交互方法记录

前言在Qt环境下QtQuick的编程中会不可避免地涉及到C++和QML之间的交互,QML是一种类似Java Script的语言,使用QML设计的UI比起传统的Qt要时髦得多,因此目前也成为Qt开发的首选。本文主要记录下前两天在Qt开发中使用到的C++和QML交互的部分,当然也是最基本的用法,仅作为一点积累。具体可参考Qt Quick 之 QML 与 C++ 混合编程详解。C++&QML交互在QtQuick的编程中,可直接用Qt封装好的QML控件完成UI的设计和控制逻辑,不过在实际开发中往往需要

2020-12-06 16:38:54 288

原创 Windows下Qt编写Android应用程序的环境搭建记录

目录前言配置开发环境安装JDK1.8安装SDK安装NDKQt配置OpenCVC++&Java混合编程结语前言由于要在手机上实现一些应用,例如部署目标检测模型、添加单目测距定位的功能等,需要编写一个示例APP。尽管安卓我并不陌生,在本科的时候自己写过一个简单的社交聊天软件,就类似低配的QQ,所以基本的东西还是懂的。但问题在于,我已经几年没碰过了。。现在Java编程几乎忘得差不多,主要的语言变成了Python和C/C++,要想立马自己编写一个Java的应用程序确实有点困难。在思考过后,我决定用Qt的

2020-12-05 19:41:52 742 1

原创 Python环境下OpenCV视频流的多线程处理方式

目录前言Python多线程编程OpenCV视屏流的多线程处理前言最近在功能性测试的过程中,需要在Python环境下用OpenCV读取网络摄像头的视频流,接着用目标检测器进行视屏帧的后续处理。在测试过程中发现如果是单线程的情况,会出现比较严重的时延,如果目标检测模型稍微大一点,像YOLOv4这类的,那么情况更加严重。后面考虑到演示效果,从单线程改为了多线程,即单独用一个线程实时捕获视频帧,主线程在需要时从子线程拷贝最近的帧使用即可。通过这样的修改,不仅时延基本消失,整个流程的实时性也有相对的提升,可以说

2020-11-24 19:52:44 15150 8

原创 OpenCV通过RTSP协议读取网络摄像头帧

前言RTSP(Real-Time Stream Protocol),即实时流传输协议,是目前市面上大多数网络摄像头都支持的协议,而OpenCV也支持通过RTSP协议读取网络摄像头捕捉的实时图像,使得获取、处理网络摄像头数据帧的复杂度大大降低。出于要求,需要通过OpenCV读取网络摄像头帧做一个目标检测Demo,做完之后记录一下OpenCV读取摄像头的Python代码。OpenCV示例使用OpenCV读取网络摄像头的代码如下所示:import cv2url = "rtsp://username:p

2020-10-27 21:09:47 2964 2

原创 使用回溯法求解N皇后问题

目录N皇后问题回溯法思路数据表示判断冲突方法方法实现N皇后问题经典的N皇后问题描述为:在一个N x N的棋盘上放置N个皇后,要求任意的两个皇后都不在同一行、同一列或同一条对角线上,问在给定N的情况下有多少种放置的方法。回溯法思路求解N皇后最典型的方法是回溯法,此方法的思路可以概括为:在第一行占据一个位置,接着在下一行占据一个位置,判断两个位置之间是否存在冲突。如果不存在冲突,则继续在下下行占据一个位置,判断与前面的两个位置之间是否存在冲突,如果不存在冲突则继续往下占据位置,当占据到最后一行,且占据的

2020-09-19 21:47:32 7640

原创 Jetson AGX Xavier设置功耗模式及风扇转速

目录设置功耗模型设置风扇转速设置最佳性能设置功耗模型Jetson AGX Xavier的功耗模式共有8种,分别编号为0-7,依次为如下:0: MAXN1: MODE 10W2: MODE 15W3: MODE 30W ALL4: MODE 30W 6CORE5: MODE 30W 4CORE6: MODE 30W 2CORE7: MODE 15W DESKTOP切换模式可使用命令如下, 如切换到MAXN模式为:sudo nvpmodel -m 0功耗模式的查询可使用命令如下:

2020-09-01 17:22:52 6714

原创 使用Anaconda / Virtualenv管理Python虚拟环境

目录使用Anaconda使用viturenvs使用Anaconda使用viturenvs

2020-08-06 22:42:27 439

原创 TensorFlow1.x/2.x配置动态显存方法

目录引言配置方法引言TensorFlow默认是占用全部的显存,不过比较BUG的是,就算模型用不了全部的显存,TensorFlow也会尽可能地多申请显存,可能是出于性能方面的考虑,并且如果满足不了它就会罢工。。比如我一块6GB显存的1660Ti或者RTX 2060,运行YOLOv4的推理程序如果不配置动态增长显存就会报错,不管是TensorFlow 1.x还是2.x的版本我都遇到了这样的问题。明明用darknet运行啥事都没有,就这货会搞事情。。下面简单记录下TensorFlow 1.x / 2.x版本的

2020-08-06 19:40:27 1331

原创 Ubuntu18.04使用Samba创建共享文件夹

目录前言创建过程Windows下访问结语前言有时候休息不想去实验室,会在住的地方用笔记本编好程序然后上传到服务器上运行,一个比较方便的做法是在服务器上创建一个共享文件夹,在本地Windows系统上使用熟悉的IDE编好程序后远程在服务器上直接运行,免去手工传输文件的繁琐过程。创建共享文件夹可使用Samba,参考Ubuntu16.04利用Samba创建共享文件夹,其创建过程也比较简单,在这里做简单的记录。创建过程首先是在服务器的Ubuntu18.04系统上安装Samba,即执行下面的指令:sudo a

2020-08-03 20:02:11 824 1

原创 在Jetson TX2开发套件上使用TensorRT7.1.0加速YOLOv4

目录前言前言

2020-07-24 12:24:32 5221 26

原创 使用NVIDIA SDK Manager刷机NVIDIA Jetson TX2开发套件记录

目录前言更换清华镜像源遇到的搞笑问题准备Host OS下载NVIDIA SDK Manager前言在最近半个月才开始接触NVIDIA Jetson TX2开发板,出于任务需要,需要把自己的SSD目标检测模型通过TensorRT部署到TX2板子上运行。刚拿到TX2的时候,板子上安装的是JetPack3.3,系统是Ubuntu16.04。我测试了一下能跑,但是系统桌面有问题。一开始是不显示任务栏,也没有应用程序的边框,搞得打开一个应用就没法关闭,只能强制kill进程。。咱当时也没见过正常的TX2长什么样子啊

2020-07-20 15:19:12 7719 3

原创 Windows下编译darknet(YOLOv4作者推荐的方式)

Windows下编译darknet前言安装环境依赖YOLOv4编译YOLOv4测试结束语前言在YOLOv4官方仓库YOLOv4的说明文件中,作者Alexey提供了一种非常简洁的Windows下编译darknet的方法,不用安装Cygwin,使用Windows系统自带的PowerShell即可完成编译,且笔者实践后发现是切实可行的。这篇文章简要介绍了该编译方法,希望能对大家有所帮助。安装环境依赖依照作者的表述,在PowerShell使用CMake进行编译的这种方式需要依次安装如下环境依赖:Visu

2020-07-01 17:44:28 3218 3

原创 遗传算法(GA)的简单理解及其示例

文章结构前言相关术语算法思想算法流程算法示例结束语前言相关术语算法思想算法流程算法示例结束语

2020-06-25 15:39:48 5923

原创 动态矩阵控制(DMC)的简单理解及其示例

文章结构前言DMC的基本思想DMC的控制流程生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入前言在学习模型预测控制的课程当中接触到了动态矩阵控制(DMC)算法,虽然不会在以后继续深入,但它的核心思想:控制、预测和校正还是可圈可点的。这里以一个简单的例子说明DMC的基本原理和控制流程,尽量做到省去复杂的数学公式而理解DMC,学

2020-06-13 12:26:02 25265 14

原创 作业涉及的MATLAB常用方法举例

文章结构前言求解常微分方程传递函数与状态方程最小二乘法模糊控制前言作为控制学科的学生,在一年级的课程当中会涉及到一些MATLAB相关的作业,会用到一些常用的方法,如求解常微分方程、传递函数与状态空间方程、最小二乘法、模糊控制、动态矩阵控制、曲线绘制等。为避免重复造轮子,还是有必要将这些简单的方法记录下来的。那么话不多说,接下来开始分部分进行叙述。求解常微分方程MATLAB内置有不少求解常微分方程的函数,如ode23、ode45、ode113、ode23t、ode15s、ode23s、ode23tb等

2020-06-10 10:06:54 1326

原创 Ubuntu18.04安装CUDA10.0+cuDNN7.6.5+Tensorflow1.15教程

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2020-06-07 11:40:24 2126 2

原创 KEIL / MDK C++编程实例说明:发掘C++的嵌入式开发活力

众所周知,KEIL / MDK是支持C++编程方式的。但是就目前来说,使用C++开发嵌入式的程序员还是比较少,就我个人认为原因是一方面KEIL / MDK对C++程序的支持还不够全面,另一方面则是C++程序的体量相较于C程序过于庞大,对于小型的应用来说没有必要,而且嵌入式开发程序员通常C++功底并不高,C才是他们的拿手好戏。但我认为随着MCU性能的逐渐提升,嵌入式C++的开发潜力将会越来越多的被发...

2017-12-29 12:21:35 22353 21

原创 实时操作系统(RTOS)REGINA的使用及说明

REGINA是一个精简并且实用性很强的实时操作系统(RTOS)。其架构灵感部分来源于FreeRTOS。REGINA的体量小到让人惊讶,但这并不代表它不能实现RTOS的基本功能,REGINA实现了一个RTOS最有用的部分,包括多任务、定时器、信号量以及消息队列等。在多任务方面它支持无限制优先级,时间片轮转以及理论上的无限个任务。在定时器方面它支持周期或单次模式,在信号量方面它支持的类型有二值、计数、...

2017-12-21 16:32:01 1384 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除