LightTrack复现
LightTrack复现
参考链接:
paperswithcode介绍
论文
项目源码
论文翻译
读后感
论文推荐理由
本文配置(笔记本):
系统版本:Windows 10 企业版 1903
显卡:GT940M
CPU:I5-4210M
内存:12G
Anaconda版本:4.8.3
python版本:3.6.10
nvcc版本(cuda):10.0
torch版本:1.1.0
torchversion版本:0.3.0
TensorFlow版本:1.8.0
其余软件版本详见项目源码下environment.yml文件
前置条件:本文默认已经安装Anaconda与NVIDIA CUDA Toolkit
一、环境搭建
首先从GitHub上下载项目源码,根据项目的README,创建一个anaconda的虚拟环境(注意python选择3.6):
1conda env create lighttrack
再根据项目源码下environment.yml文件在anaconda和python中手动添加各种包(尝试过直接使用conda env create -f environmen ...
FreeRTOS内存管理
本文转载自公众号技术让梦想更伟大,CSDN链接
FreeRTOS提供了几个内存堆管理方案,有复杂的也有简单的。其中最简单的管理策略也能满足很多应用的要求,比如对安全要求高的应用,这些应用根本不允许动态内存分配的。
FreeRTOS也允许你自己实现内存堆管理,甚至允许你同时使用两种内存堆管理方案。同时实现两种内存堆允许任务堆栈和其它RTOS对象放置到快速的内部RAM,应用数据放置到低速的外部RAM。
每当创建任务、队列、互斥量、软件定时器、信号量或事件组时,RTOS内核会为它们分配RAM。标准函数库中的malloc()和free()函数有些时候能够用于完成这个任务,但是:
在嵌入式系统中,它们并不总是可以使用的;
它们会占用更多宝贵的代码空间;
它们没有线程保护;
它们不具有确定性(每次调用执行的时间可能会不同);因此,提供一个替代的内存分配方案通常是必要的。
嵌入式/实时系统具有千差万别的RAM和时间要求,因此一个RAM内存分配算法可能仅属于一个应用的子集。
为了避免这个问题,FreeRTOS在移植层保留内存分配API函数。移植层在RTOS核心代码源文件之外(不属于核心源代码) ...
异常和中断
一、术语说明
逻辑控制流: 指的是程序从开始第一条指令之后,PC中产生的值序列 : a1,…,ak,…,a_1,…,a_k,…,a1,…,ak,…,其中aka_kak是指令IkI_{k}Ik的地址,Ik+1I_{k+1}Ik+1是IkI_{k}Ik的下一条指令。其中aka_kak与ak+1a_{k+1}ak+1并不一定要是在内存中相邻的,也就是由于跳转,调用,返回,引起的指令地址不相邻的情况我们也称为下一条,简单地说就是 逻辑控制流是程序本身就可以预测到的指令序列。
异常控制流 : 但是有些指令并不是可以在程序中预测到的,比如缺页异常,打印机缺纸,发生这种事件是不可预测的,我们将这种突变称为异常控制流。这里要说的中断,异常,系统调用都是异常控制流。但是有的书将他们统称为异常,或者中断,我们这里统称为异常控制流(Exception Control Flow,ECF), 简称异常流,以区分异常中断和系统调用。
异常控制流分为4类:
类别
原因
异步/同步
返回行为
中断(interrupt)
来自处理机外部设备的信号(e.g. IO)
异步
总是下一条指令 ...
Linux常用命令汇总
用户管理
创建用户
useradd
只是创建一个用户名,命令如下:
1sudo useradd username
它并没有在/home目录下创建同名文件夹,也没有创建密码,因此利用这个用户登录系统,是登录不了的,为了避免这样的情况出现,可以添加-m参数创建:
1sudo useradd username -m
它会在/home目录下创建同名文件夹,然后利用sudo passwd username为指定的用户名设置密码。
adduser
这个命令实际是一个perl脚本,是useradd等类似底层命令的更友好的前端,它会用交互性的方式建立新用户,使用它可以指定新用户的家目录,登录密码,是否加密主目录等等,它会:
建立一个新目录作为家目录
建立同名新组
把用户的主要组设为该组(除非命令选项覆盖以上默认动作,比如–disall-homdirecry之类)
从/etc/SKEL目录下拷贝文件到家目录,完成初始化
建立新用户的密码
如果其存在的话,还会执行一个脚本
1sudo adduser username
删除用户
通过userdel命令即可:
1sudo userdel -r usern ...
JetsonNano指南
JetsonNano指南
注意,本指南原本只针对4GB版本使用,后期因为使用2GB版本而新增加了一部分内容,有区别的均已经标注
具体资源请参照JetsonNano开发者套件(2GB版本:Jetson Nano 2GB Developer Kit)、Jetson Linux开发手册、Jetson Zoo(各种开源框架及其安装说明)
一、入门
1.准备
SD卡:大于16G,最好64G,class10, 下载Jetson Nano Developer Kit SD Card ImageSD卡镜像(2GB版本: Jetson Nano 2GB Developer Kit SD Card Image),并用 SD Memory Card Formatter for Windows格式化SD卡然后用Etcher刷写入SD卡(仅限于Windows)
Micro-USB电源线(最大支持5V2A)或专用电源线(最大5V4A,推荐,该方式需要将跳线帽接上。2GB无需关心,4GB版本默认接上)
USB无线网络适配器:可选
2.开始
将microSD卡(已写入系统映像)插入Jetson Nano模块底 ...
大疆嵌入式招聘感悟
这是一篇加密文章,内容可能是个人日常吐槽或者特殊技术分享。如果你确实想看,请与我联系。非亲友团勿扰。
hexo常见错误集合
hexo常见错误集合
一、部署报错Spawn failed
原链接:Hexo部署报错Spawn failed及解决方案
1.1 原因
在网上通过简单的查询之后发现问题出在.deploy_git文件夹中,这个文件夹是hexo框架渲染生成的所有文件的一个本地git仓库,hexo d命令就是将整个.deploy_git文件夹的内容push到GitHub上的。
网上的一个解决方案是将GitHub上的xxx.github.io仓库克隆下来并改名成.deploy_git来替换原来的,这种改名方式在Windows系统中是无法完成的。简单分析这种方法的原理无非就是将.deploy_git的内容回滚到和GitHub上同步的状态。
结合刚刚的分析,不妨打开.deploy_git\.git\logs路径下的HEAD查看一下仓库的状态历史(红线范围内的记录是我在第一次报错之后的多次无脑尝试,可以忽视)。
再打开GitHub上的提交记录可以发现最近的时间点是12:51:46。
所以可以知道是那些多余本地提交导致了报错。
1.2 解决方案
现在的解决思路就是将本地仓库的状态进行回 ...
NanoPI-T3上搭建人工智能环境
相关资源汇总:
TensorFlow Lite 官网
TensorFlow Lite 官方指南
一、摄像头数据读取
直接采用OPENCV读取摄像头数据,参考NanoPI T3官方文档,由于这里我是先装的TensorFlowLite,其中需要升级numpy,这里遇到了一点问题,提前说明下:
该板子python中的包通过pip进行安装或卸载后,需要手动卸载掉当前的包才能升级或卸载:
123456#升级到最新pip install packname#卸载pip uninstall packname#查看当前包pip list
有时候可能需要利用sudo,或者是sudo -H
pip的,默认源是官方源,可以使用-i https://pypi.tuna.tsinghua.edu.cn/simple some-package命令来临时采用清华源(由于NanoPi T3中ubuntu16.04所使用的python最新版本较低,所以这里不推荐升级pip)
这里给出一个调用摄像头的demo:
123456789101112131415161718192021222324import numpy as ...
Xtensa基础
WARNING
Xtensa 的指令集架构类似于 RISC,并对嵌入式应用场合做了多种优化。在移植操作系统时要留意以下几方面:
变长指令
窗口(window)寄存器
处理器的可配置性
处理器的可扩展性(可通过 TIE 描述语言为 Xtensa 添加新的指令)
Xtensa 处理器的硬件抽象层 HAL
TIP
HAL 向上提了供统一的接口,向下屏蔽了 Xtensa 处理器的不同配置。
编译时 HAL(CHAL)
包括 C 预处理器与汇编宏定义(用来表征 Xtensa 处理器的具体配置),确保源码级别的兼容性。
链接时 HAL(LHAL)
对于 Xtensa 处理器的不同配置均适用,底层软件(如操作系统移植层)可以通过调用该层接口来处理 ISA 相关的操作(如保存现场 window frame )。
编写汇编代码
示例 C 程序:计算斐波那契数列
123456789101112131415161718192021unsigned int fib(unsigned int val){ int cur; int cur1; int newval; ...
ESP32上移植Rt-thread
一、ESP-IDF结构分析
能够清楚的认识IDF框架的结构对之后移植RT-thread具有很大的帮助
以下结构均为本文作者通过查询手册、网上搜索和查看源码自行分析而来,不保证权威性与正确性,如有问题欢迎联系修改
总体结构:
components:各种组件目录
esp32:esp32启动前代码
freertos:freertos组件
make:整个系统总的Makefile
project.mk:整个系统工具链配置(CFLAGS等参数)
tools:构建工具及脚本
cmake:cmake配置
build.cmake:整个系统工具链配置(CFLAGS等参数)
docs:帮助文档
重点关注components/freertos组件,其目录为:
include/freertos:头文件
CMakeLists.txt:组件cmake
component.mk:组件Makefile
portasm.S:freertos移植汇编文件(该文件需重点关注)
port_IntStack:中断栈底
port_IntStackTop:中断栈顶
port_swit ...