23年12月进展
前言
从11月下旬开始7个大作业。。。一直在赶作业,一直赶,赶到差不多12月中旬才做完,之后一周一直在玩Stable Diffusioin,U1S1那个东西确实好玩,玩了快两周,也变相地学到了很多CV的知识,终于,在年末的前几天重新把论文捡了起来,我又开始看了。。。这次是在Copilot的帮助下,提高了筛选文献的效率,不用手工泛读了。
第一篇文献
文献名:ESVAE: An Efficient Spiking Variational Autoencoder with Reparameterizable Poisson Spiking Sampling
arxiv
解决的问题
针对直接套用VAE到SNN网络中出现的生成效果差问题,本文在VAE原文的基础上修改了FSVAE的Loss函数,提出了一种概率空间均方误差的损失函数,取得了较好的生成效果。
采用的方法
本文大体的方法按照VAE的一般逻辑,整体结构如下图所示:
这里着重强调两点:
图像脉冲编码:一般逻辑是将强度图像按像素强度生成泊松过程簇的方法,本文使用的是文献FSVAE的编码器,后面来叙述;
损失函数:文献中给出的形式是:
L ...
24年1月进展
第一篇文献
SpikingJelly: An open-source machine learning infrastructurepla tform for spike-based intelligence
解决的问题
该文献为了解决在SNN领域较为混乱的网络框架、难以彼此通用复现的SNN结构以及与软硬件不兼容等问题,提出的一个基于cupy的深度学习框架,该框架建立于torch的接口上,内层使用Cupy完成对Cuda的调用,底层仍然使用C++语言实现高性能运算。该框架的中文名称为“惊蛰”,名字还取得不错。
主要内容
整个框架的架构如上图,该框架的用户文档可参见:用户文档。在使用感受上,该框架具有以下特点:
接口与torch的nn接口高度类似,能够方便torch用户的使用;
在生理学和计算神经学上涉足不深,更多地抽象脉冲的物理和数学模型,并将其与深度学习相结合。
传播过程将整个脉冲序列分为多个单独的时间点,因此可以按单步传播(在同一个时间戳上传播整个网络,然后进入下一时间戳)和多步传播(在同一个脉冲序列上传播整层网络,然后再进行下一层),两种方式计算结果相同。
拥有多个内置的数据 ...
24年2月进展
第一篇文献
End-to-End Object Detection with Transformers
解决的问题
本文旨在提出一个新的图像检测框架,以完成对大规模数据集下的多物体图像检测(甚至包括全景分割)。
主要内容
本文有至少三个创新点,分别予以叙述。
创新点一:损失函数
检测框架的损失函数一般包括两部分,即分类误差和检测误差,然后使用超参数正则化为同一个损失函数。本文的损失函数在两点上作修改以适应当前的检测任务,其一是将交叉熵函数(对数形式)改为非对数的普通项(经验表明在当前模型条件下有着更好的检测结果);其二是在检测框损失函数上,同时使用了l1\mathcal{l}_1l1损失和交集损失并正则化,论文“Generalized intersection over union”保证了该正则化结果在检测上更有效。
创新点二:网络架构
将Transformer和CNN结合的网络有不少,本文基本上是最早提出将基于CNN生成的图像特征与与Transformer的位置编码结合的,结合方式特殊在于:CNN提取出的网络特征有2048个维度,本文使用1×11\times 11×1卷积将其减少 ...
张正友标定法问题
前言
张正友标定法太闻名了,历久不衰,20年后仍然以它作为机器视觉的标定基础,在机器视觉这门课的学习过程中,有个别问题,在此予以记录。
靶标精确度问题
问题描述:在标定前,如果靶标的方格子长度事先不已知,能否标定出相机的内外参数?
符号定义
现有靶标上的点使用齐次坐标Mi=(xi,yi,1)T\mathbf{M}_i=(x_i, y_i, 1)^\mathrm{T}Mi=(xi,yi,1)T表示,相机平面上对应的点使用mi=(ui,vi,1)\mathbf{m}_i=(u_i,v_i,1)mi=(ui,vi,1)表示,以上两组点列值的坐标均已知。相机内参的形式固定且已知,参数待定,形式为:
A=[αxγu00αyv0001]\mathbf{A}=\left[
\begin{matrix}
\alpha_x&\gamma&u_0\\
0&\alpha_y&v_0\\
0&0&1\\
\end{matrix}
\right]
A=αx00γαy0u0v01
相机的外参形式不明确,表示为:
D=[r11r12t1r ...
矩阵理论续集
个人写作笔记,如有问题,请不吝赐教!
目录如下:
矩阵求导
矩阵的迹
定义
性质
微分性质
矩阵的范数
矩阵原生范数
向量范数导出的矩阵范数
矩阵范数的导数
向量范数的导数
常见矩阵导数表
上一篇中矩阵迹、矩阵范数的导数部分还留白白斩斩的,这里补充一下。
这里是上一篇的链接
矩阵求导
还差一个最普适的情况——“矩阵对矩阵求导”没有分析,这种情况在神经网络中貌似特别常见。这里对这种情况的公式进行证明,证明方法与证明列向量的方式是完全一样的,不同之处在于,列向量在证明第二项时可以提取公因式产生矩阵分块,而在矩阵对矩阵求导中,不会得到矩阵分块,只能是矩阵直积,具体过程如下。
设矩阵 A∈Cm×l\mathbf{A}\in\mathbb{C}^{m\times l}A∈Cm×l,B∈Cl×n\mathbf{B}\in\mathbb{C}^{l\times n}B∈Cl×n,W∈Cp×q\mathbf{W}\in\mathbb{C}^{p\times q}W∈Cp×q,证明:
dABdW=dAdW(B⊗Iq)+(A⊗Ip)dBdW\begin{align*}
&\fra ...
矩阵课程笔记
个人写作笔记,如有问题,请不吝赐教!
目录如下:
矩阵之间的关系
若当标准形
矩阵多项式
若当标准化
凯莱-哈密顿定理
矩阵分析应用
矩阵函数
矩阵的微积分
定义
矩阵函数对纯量求导
纯量对向量的导数
预备知识
矩阵直积
矩阵拉直
复杂导数
预备知识:矩阵直积
矩阵对矩阵的导数
求导运算法则
矩阵对列向量求导
向量对向量求导
矩阵的全微分
运算式证明
矩阵之间的关系
相抵:A,B∈Cm×n,A⋍B ⟺ ∃U∈Cm×m,V∈Cn×n,s.t.B=UAV\mathbf{A},\mathbf{B}\in \mathbb{C}^{m\times n},\mathbf{A}\backsimeq\mathbf{B} \iff \exist \mathbf{U}\in \mathbb{C}^{m\times m}, \mathbf{V}\in \mathbb{C}^{n\times n},s.t.\quad \mathbf{ B=UAV}A,B∈Cm×n,A⋍B⟺∃U∈Cm×m,V∈Cn×n,s.t.B=UAV
相似、合同变换都是一种相抵关系。
正规 ...
小创意活动汇总
目录
前言
必要条件
某些小创意
填空剧本
衍生版填空
花火版填空
情景剧
问答游戏
前言
党日活动半个月一次,频率真的高啊,我可不想办成干巴巴的念PPT大会,上一次的情景剧扮演给了我一个很好的启示,如果能够把所以的活动都办到那个境界,也确实很满意了。
必要条件
办好一个活动,既要达到教育的目的以应付上级任务,又要不耽搁自己和他人过于多的时间,还要有乐趣,这三者貌似就是一个矛盾结合体,首先要满足以下的定量指标:
总时长最好不超过半个小时;
尽量让全体与会人员都参与进来,不要有人被冷落;
活动不能庸俗,不能与联欢会等活动重复,党日活动毕竟不是联欢会,要有一定的政治性和严肃性;
道具尽量少,不要搞得太花哨了;
能够让他们自己动脑筋最好,而不是主持人牵着鼻子走。
能够达到以上的五个条件,就是一个比较好的,又有新意又绝对不落俗套的活动。
某些小创意
鉴于我玩过的这么多桌游,总是能找到一些好的点子的,不过难在将它们与党日要求结合。
填空剧本
最合适的场景是:知识竞赛;
将全部成员分成两个对立的组(例如红军和国军),在某一特定的历史背景下,选定故事场景(保证不是真实的或者 ...
23年11月进展
第一篇文献
11月6日
文献名:A Differentiable Recurrent Surface for Asynchronous Event-Based Data
arxiv
解决的问题
本文解决了使用事件流数据中,难以把握手工选定的事件描述在时间和空间相关性上的设计性,从而导致时空相关性缺失的问题。本文的目标是寻找一个参数化的映射M\mathcal{M}M,使事件数据尽可能地稠密集中,并保留时空关系,提出了一种使用可学习、数据驱动的事件描述方法。
采用的方法
基本思路
对于某个给定的事件流,选定一定的时间间隔τ\tauτ,在该段时间间隔内,每个像素位置处均产生了一个事件顺序列,设计(或者生成)合理的特征集合,可以在每个像素位置上得到一个特征顺序列。然后,使用长短期记忆网络LSTM对每个像素位置处的特征顺序列进行异步处理,得到固定输出长度的输出向量,取定每个输出向量的最后一个有效元素作为当前位置的特征描述,整个图像上每个有事件位置的像素便可以得到当前时间段内的事件描述(是一个H×WH\times WH×W的矩阵),称为稠密曲面Dense Surface。
核心方法
本文设计的LS ...
记CUDA与CUDNN安装的坑
CUDA安装之锅
难蚌,装个Pytorch3d装一上午也装不起,与其装好库调包,还不如自己动手丰衣足食,四元数实现我自己写好了。
然后我才发现,首先是Pytorch3d只能在linux系统下安装,windows系统不兼容。
另一个重大发现:
1nvidia-smi
输出的压根就不是当前电脑安装的驱动版本,而是当前显卡支持的最高版本驱动!装pytorch的时候,务必要看仔细了。
4070Ti显卡驱动安装
马上就要收到这张激动人心的显卡了(我愿称之为小4090)。接下来是安装CUDA、CUDNN以及torch的时刻,这里有一些坑,准备做好记录工作,我是往win11的WSL上安装CUDA,win11系统上只安装驱动,不安装任何软件。
安装显卡驱动
这一步是安装硬件驱动,应该装在win11系统下,去nividia官网上找到工作室驱动,勾选以下选项:
然后下载安装即可(不要安装游戏驱动,那个虽然比工作室驱动在游戏上效果稍好,但是更新非常频繁,影响使用)。
安装完毕,可以命令行中输入nvidia-smi输出当前显卡驱动版本等信息,则说明显卡驱动安装已经完毕。
CUDA安装
驱动能够让CPU访问G ...
记linux的交换内存
前言
在训练模型中经常不明不白地出现Killed异常退出,查阅网上的说法,主流的观点是Torch的内存保护机制,当Torch检测到内存达到某一极值时,将自动Kill当前内存占用率最高的一个Torch进程,于是乎正在训练的模型就完蛋了;无论是Windows系统还是Linux系统,为了解决这个问题,都可以将虚拟内存(交换内存)开得更大。
交换内存
一点点个人的理解,交换内存是将磁盘上的一部分存储空间当作内存一样的空间来看待,CPU将内存中放不下的数据暂存在交换内存中,本质上起到内存的缓存作用。
调整交换内存
增加交换内存
有两种方式,一种是新增分区,一种是新增交换内存文件,在linux系统下,两种方式的作用基本一样,而后者的设置更加简单,因此本文只介绍后者的设置方法。
新增交换内存文件:在任意位置处,新建一个交换内存文件,使用以下的命令:
1sudo dd if=/dev/zero of=/swapfile bs=1M count=4096
上述命令的意思是,从/dev/zero中读取数据,写入到/swapfile中,每次写入的数据块大小为1M,写入的次数为4096次,即总共写入了4G ...