基于gazebo的无人机事件相机探测
仿真配置
仿真环境基于Gazebo引擎,在ROS系统下配置,使用PX4飞控拓展和XTDrone无人机,首先请参照以下方式完成环境构建:
环境安装
与ros安装与使用心得相同,安装ROS和PX4,然后安装Gazebo。推荐在docker容器中安装以保护系统环境,可参考博客。然后在构建容器前,注意为容器开启GPU的支持和图形界面支持,请仔细参考上述博客。这里提供一个拉取自ros官方的镜像ros:noetic,使用其构建了一个自定义的镜像,如下所示:
12345678910111213141516171819202122232425FROM ros:noeticRUN echo "deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse" > /etc/apt/sources.listRUN echo "deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates mai ...
月球表面三维环境构建
本文主要从两个方向介绍,一种是基于射影变换的月球表面环境构建;另一种是基于高度图的三维仿真环境构建,目前两种方式都已经实现。本文将引导读者从获取数据集开始完成对月球表面的三维环境构建仿真。
构建仿真文件
在构建三维表面环境的配置中,需要加入一系列的模型文件、配置文件以及发布文件,整个过程对于ROS新手而言是非常晦涩的,我反正一开始就弄糊涂了,不知道文件与文件之间的层级关系。在这里首先给一个大概的概念。ROS的发布文件.launch是相当于可执行文件一样的存在,即是可以直接运行的程序,类比于Linux系统下的.sh文件。发布文件中将包含一系列的配置文件以及配置参数,相当于.sh中的一系列参数与函数,因此配置文件相当于不完整的.sh文件,而模型文件只存在于配置文件的调用中,通常不通过发布文件直接调用它。
获取原始数据
无论是三维仿真环境抑或是二维的射影变换仿真,都需要获取较高精度的月球表面遥感图像,目前能够获取到的、开源且较为完整的月球表面数据集是NASA的月球表面数字高程图和月球表面去除阴影的地形照片,分别从对应的路径下载即可,推荐使用IDM或者XDM等并发下载器下载,源文件较大,单点下 ...
图像检测模型详解
前言
图像检测领域是一个较大的分支,目前主流的方法是YOLO,但是R-CNN系列也是非常经典的方法,有必要对这两种类型的方法 作深入的了解,才方便 后续的方法 创新。之前一直不理解YOLO模型的Anchor机制的具体含义,直到4月17号才突然明白,原来指的是一种耦合关系。
R-CNN系列
文献
Rich feature hierarchies for accurate object detection and semantic segmentation
Fast R-CNN
解决的问题
检测Detection一词的定义,在文献Regionlets for Generic Object Detection提到过一嘴,本意是从一大堆候选的子区域中,选出来带有物体的区域(也可以是超像素),进一步延伸到了对这个子区域按标签分类,这就是当前深度学习领域检测任务的由来。
这两篇文献,归为同一个类,都是R-CNN检测网络的祖宗之法,是最早提出基于区域的CNN检测方法的文献,其主要解决了CNN不能直接用于检测任务的问题,可谓是开检测领域 深度学习之先河。
主要内容
基于区域的检测方法 ,是这两篇文献 ...
C++学习心得
学习目标
争取熟练掌握C++,达到能够在查看标准库手册、不引入第三方库的情况下独立完成某一个项目的能力,能有python的60%功力就已经足够了,为后续的研究、项目打下基础就好。
学习体会
项目文件夹命名风格:一个文件夹放一个项目,里面有一个include文件夹放头文件,一个src文件夹放源文件,main.cpp文件也需要放在这个文件夹里面。一个项目文件夹内配置一个CMakeLists.txt文件以供Cmake配置。如项目内包括了多个子项目,则另起一个文件夹,将所有子项目放在该文件夹内,并配置一个顶层的CMakeLists.txt文件。
在C语言的变量初始化的基础上,C++增加了更丰富的初始化方法,可以使用默认初始化(按如下语句声明某个类的变量:classname CN),或者使用自定义初始化方法,初始化可以引入参数(类似于python的init函数),初始化方法在类的声明中直接定义,感觉这种语法,更加面向对象,接近于python的风格了。
lambda函数与python一样,没有必要在迭代器的外部单独定义,只需要在使用的时候定义好就行,放在头文件中不合理(因为它是一个对象,头文件中 ...
CUDA为Torch编写自定义算子
前言
坑啊坑!在小小的工位上坑啊坑
必须要把这种巨坑的编程风格公开处刑,这篇论文:Multiple Video Frame Interpolation via Enhanced Deformable Separable Convolution,真把我坑惨了。先是以为cupy不兼容,遂学CUDA+Torch;复以为驱动问题,用上docker,最后以为是硬件问题,搞个压力测试,通通失败!枉费我与师姐交流如此之久也,若不是今天一早忽然想到设备的问题,加上师姐一提点,这破代码不知道还要接着坑多少人呢!
这位代码的祖宗,也是祖宗之法不可变也,经典屎山;论文对它是一点不改,一动不动直接照搬,有设备问题的Bug也不解决,坑了我整整两天的时间!对它的厌恶是无以复加!
分割线以下是正常部分。
Pytorch是当前最为流行的深度学习框架,其与CUDA的深度兼容性也极大地方便了使用者在不需要了解任何GPU底层架构和编程知识的前提下写出高性能的解决方案,可谓是前无古人,后…来者也。因此当下所有的网络模型、甚至是新的网络框架(oneflow、spikingjelly、slayer等)都在积极兼容torch。
...
CUDA编程初体验
前言
真的比较难蚌,谁能想到有朝一日我终于走上了CUDA编程的道路,要不是这个该死的论文非要用什么“弹性可分离卷积”,还真的就不能使用torch直接写出来,必须使用自定义的算子,必须要接触到CUDA编程。
无心插柳柳成荫吧,毕竟,搞深度学习的人不接触一点高性能计算,不懂得一点C++和CUDA编程,说出去给人的感觉也太不专业了,学一点,总归是好的。
CUDA编程基础
了解CUDA,可参考如下博客,必须要对GPU的硬件架构方式有所了解,对于英伟达的GPU,可使用以下示意图说明:
不同于CPU的冯诺依曼架构,GPU中的控制器与缓存器几乎同时要对应极大数量的低精度算术逻辑单元,这一批算术逻辑单元共享同一个缓存单元,全局共享内存位于DRAM上,DRAM通过PCIE接口与CPU的外接PCIE接口,GPU由于其本身极差的单核 处理性能,其不能单独作为一个计算机系统中央处理单元使用,因此只能作为CPU的一个外部设备device,因此CPU与GPU的关系是协同处理关系。早期的图形处理单元作为外设的普通一员,使用与其他外设共用的南桥接口,受CPU节制;随着图像处理单元的工艺升级和深度学习的应用,现代GP ...
SCADA了解笔记
前言
用于学习过程中的笔记。
部分专业名词
SCADA:Supervisory Control And Data Acquisition,监控与数据采集
DCS:Distributed Control System,分布式控制系统
PLC:Programmable Logic Controller,可编程逻辑控制器
RTU:Remote Terminal Unit,远程终端单元
HMI:Human Machine Interface,人机界面
IED:Intelligent Electronic Device,智能电子设备
MMS:Manufacturing Message Specification,制造信息规范
IT:这个IT不是信息技术,但是是什么还不太清楚
OT:Operational Technology,运营技术(或许?)
TCP:Transmission Control Protocol,传输控制协议
IP:Internet Protocol,网络协议
系统组成
SCADA是指一种介于DCS和PLC之间的控制系统,兼具了PLC的灵活性和DCS的顶层设计。包含了上位机、 ...
Verilog 学习
前言
嵌入式课程和导师的专长都是硬件电路设计,面向应用部署算法,因此有必要了解掌握Verilog语法及其设计思想。
名词解释
VHDL : VHSIC : Very High Speed Integrated Circuit Hardware Description Language.
EDA : Electronic Design Automation
Verilog的五种抽象模型:系统级,算法级,RTL级(Register transfer level)寄存器级,门电路级,开关电路级(深入到三极管内部)
准备工作
使用vscode编译verilog语言并可视化运行
intel自带的quartus软件界面实在过于古老,代码编写跟matlab一样难用,所以我决定使用vscode编写verilog代码并运行一些简单的编译和调试。主要的设置步骤有以下:
安装iverilog编译器,这是一个开源的verilog语言编译器,ubuntu可以直接使用sudo apt install iverilog安装,windows可在网上找官网下载;
安装仿真器gtkwave,这也是开源的示波仿真器,ub ...
mpich 学习
写在前面
从5月8日开始,到现在,已经接近三个月的时间,我的第一段实习生涯即将结束。反思自己的实习经历,我觉得最主要的收获有三点:
最重要的往往是迈出第一步,我从来没有接触过社会化的生产、经营模式,这次实习的企业虽然很小,而且是初创企业,学术氛围浓厚,也给了我较多的眼界,在实习中尝试触摸大学学习和社会生产的脱节处,下一步工作或者学习,都能提供方向上的指引。
第二是克服与生俱来的恐惧心理,至今也还记得实习第一天的时候,来到公司,使用ssh连接服务器、装个python的环境都出了无数个bug,也不敢问近在身边的技术主管和后面的后台管理人员,自己的问题疯狂查CSDN,也始终解决不了,第二天第三天以降,简直如同煎熬,感觉自己什么也不会,一点也不配来这里,压力山大。现在回望,实力是一方面,当时对服务器、对git和linux的使用确实非常不熟悉,另外一个重要的方面,自然是心理压力较大,始终担心自己被别人看不起,不敢问问题,反而限制了自己的进步。
第三才是技术上的一些收获,实习我丝毫没有参与公司的核心业务,主要做的工作是数据集整理和清洗,去重都鲜有涉及。因此指望通过一次实习让自己学到算法上的东西无 ...
图像去雨系列方法汇总
前言
服务于所谓的图像去条纹,真是心都操碎了,到处去查论文看文献,之前一直在图像去噪那里寻寻觅觅冷冷清清,现在总算是找到了方向。
所谓图像去雨,就是广泛意义上的图层分解中,将或者雨滴图层与背景图层**分解开的任务,是图像分解任务中的常见类型,广泛应用于自动驾驶领域的图像预处理。
根据综述文章[1],根据去雨任务的输入模态,可将图像去雨分为两条路线,即基于视频的去雨方法(多针对动态情况下,这种方法在低速自动驾驶上尤为适用)和基于单幅图像的去雨方法(多针对静态或者高速运动下的自动驾驶任务)。本文将主要介绍基于单幅图像的去雨线方法,因为它是非常典型的图像分解任务。进一步,根据去雨任务的技术路线,又可以将去雨方法分为基于模型的去雨方法和基于数据驱动的去雨方法,在数据驱动领域,又可以进一步细分为基于监督训练的方法、基于自监督训练的方法和基于无监督迭代的方法。
本文认为,即使基于监督训练的方法能够在基准测试集上取得较好的结果,但是仍然不足以泛化至真实模型上,基于自监督学习的方法虽然当前泛化能力较差,甚至图像分解的描述提取能力也弱于监督学习,但是其在真实环境中的潜在自适应能力,是真正意义上技术发展的 ...