- 博客(27)
- 资源 (10)
- 收藏
- 关注
原创 ubuntu非root用户源码安装screen
没有root权限,不能使用apt-get install,那么可以从源码手动编译。如果直接安装screen则会报错:!!
2022-10-20 14:50:22
1887
7
原创 【DenseFusion系列目录】代码全讲解+可视化+计算评估指标
DenseFusion是2019年李飞飞等提出的用于6D姿态估计的网络。它是一种端到端的结构,输入为RGB-D数据,输出为某个物体的6D姿态。主要贡献就是针对颜色特征和几何特征提出了一种像素级稠密融合的方式。在LineMOD数据集和YCB-Video数据集上进行了实验。本文对该网络进行完整的复现,详细解析了源代码中的重要内容。由于本人刚接触姿态估计方面的内容,因此有些解析部分包含很基础的知识,放在【DenseFusion详解】专栏。除此之外,本文在源代码的基础上进行了后续评价指标的计算以及结果的可视化,这些
2022-06-06 16:56:45
8518
1
原创 【DenseFusion代码详解】YCB-Video数据集预处理过程
这里分析YCB-Video数据集预处理的代码,位置在datasets/linemod/dataset.py我们一行一行的分析。总体思路和LineMod预处理相同,详见LineMod预处理。这里首先定义了PoseDataset类,继承了torch.utils.data.Dataset这个抽象类,用于创建自定义数据集。当我们需要用到自定义的数据集时,可以去继承Dataset类并覆盖__len__()和__getitem__()方法,其中__len__()返回数据集的样本个数,getitem(index)返
2022-06-06 16:31:10
1350
原创 【DenseFusion代码详解】测试过程eval_ycb.py
该部分是对YCB数据集训练结束之后的模型进行评估,代码位置在tools/eval_ycb.pyycb数据集上的评估指标为AUC和
2022-06-06 16:29:50
660
原创 【原创+代码】计算物体不可见表面百分比
物体不可见表面百分比是DenseFusion中提出来的一种度量标准,用于量化给定摄影机视点时物体被遮挡的程度。首先,将物体的地面真值模型model_points转换为其目标姿态pred。然后,根据摄像机的固有参数,对模型表面的三维点进行采样,并将其作为深度像素投影回二维图像平面。如果没有遮挡,则投影的深度像素应接近深度传感器测量的深度。换言之,如果像素的测量深度和模型投影深度之间的距离大于边距,则我们认为像素被遮挡,因此不可见。在实验中,边距h设置为20mm。因此,不可见百分比是物体模型上所有采样点中不可见
2022-06-06 16:25:53
544
3
原创 【原创+代码】linemod可视化
选择要可视化的图片,输入路径,然后对其进行eval,估计姿态pred,输出target点云和pred点云在二维图像上的投影,如下:左边的图为pred,右边的图为target。
2022-06-05 13:50:33
2390
19
原创 【原创+代码】ycb计算<2cm评估指标
整体代码import _init_pathsimport argparseimport osimport copyimport randomimport numpy as npfrom PIL import Imageimport scipy.io as scioimport scipy.miscimport numpy.ma as maimport mathimport torchimport torch.nn as nnimport torch.nn.paralleli
2022-06-05 13:48:29
366
原创 【实际操作】DenseFusion复现过程详解-YCB-Video数据集
这一篇是在YCB-Video数据集上的训练和测试过程。本次实验建立在实现LineMod数据集训练基础之上,因为前期的环境搭建都是一样的。首先,需要下载YCB-Video数据集,可以自己找找百度网盘资源,大概有两百多G。把下载下来的数据放在/work/DenseFusion/datasets/ycb/下并命名为YCB_Video_Dataset。同样的,激活自己的环境并进入 /work/DenseFusion/下,用命令:./experiments/scripts/train_ycb.sh出现以下内容开始训练
2022-06-05 13:39:37
3042
2
原创 【DenseFusion代码详解】测试过程eval_linemod.py
该部分是对LineMod数据集训练结束之后的模型进行评估,代码位置在tools/eval_linemod.py训练部分包括train和test,评估过程是eval,eval和test的不同之处,浅浅理解就是test过程还是会改变权值,但eval固定权值不变。首先是在.sh文件中可以设置的变量,有数据集路径、保存的训练好的PoseNet模型,保存的训练好的PoseRefineNet模型。然后设置物体类别数、类别编号列表、点云数、refine过程的循环次数、批量大小、数据集config文件路径、输出
2022-06-05 13:32:15
1361
1
原创 【DenseFusion代码详解】refine过程loss计算
该部分是对refine网络部分的loss进行计算。代码位置在lib/loss_refiner.py什么时候进行loss_refiner的计算呢?如果refine过程没有开始,则进行的是PoseNet—loss—loss.backward()过程,如果开始了refine过程,则主干网络停止训练,改为eval模式,PoseRefineNet改为train模式,经过PoseNet—loss之后,将loss所输出的new_points输入到PoseRefineNet中进行训练,输出预测的姿态,然后就应该计算
2022-06-05 13:31:39
875
原创 【DenseFusion代码详解】主干网络loss计算
该部分是对主干网络部分的loss进行计算。代码位置在lib/loss.pytrain.py中对其的使用过程为:from lib.loss import Loss #第26行-首先importcriterion = Loss(num_points_mesh, sym_list) #第108行-初始化loss, dis, new_points, new_target = criterion(pred_r, pred_t, pred_c, target, model_points, idx, poi
2022-06-05 13:31:01
1607
原创 【DenseFusion代码详解】网络结构详解
代码位置在lib文件夹下面,psp_models = { 'resnet18': lambda: PSPNet(sizes=(1, 2, 3, 6), psp_size=512, deep_features_size=256, backend='resnet18'), 'resnet34': lambda: PSPNet(sizes=(1, 2, 3, 6), psp_size=512, deep_features_size=256, backend='resnet34'),
2022-06-05 13:30:31
3425
2
原创 【DenseFusion代码详解】linemod数据集预处理过程
这里分析linemod数据集预处理的代码,位置在datasets/linemod/dataset.py我们一行一行的分析。import torch.utils.data as dataclass PoseDataset(data.Dataset): def __init__(self, mode, num, add_noise, root, noise_trans, refine): self.objlist = [1, 2, 4, 5, 6, 8, 9, 10, 11,
2022-06-05 13:29:52
4358
12
原创 【DenseFusion代码详解】训练过程train.py
parser = argparse.ArgumentParser()parser.add_argument('--dataset', type=str, default = 'ycb', help='ycb or linemod')parser.add_argument('--dataset_root', type=str, default = '', help='dataset root dir (''YCB_Video_Dataset'' or ''Linemod_preprocessed''...
2022-06-05 13:29:07
3182
原创 【实际操作】DenseFusion复现过程详解-LineMOD数据集
最近在做DenseFusion的复现,由于刚接触这块,绕了很多弯路。源代码是在linux上面跑的,但我自己的电脑没部署linux环境,于是在Windows上面跑,但最后会报错一个c语言头文件问题,未能解决,果断放弃,转战Colab,但由于环境版本不匹配,最后也失败了。于是找导师要了服务器,最后运行成功,下面重新从头跑一下,记录整个过程。首先,官方开源代码是Pytorch0.4.1,这对我的Cuda不兼容,我用的Pytorch1.0版本的,代码源如下:Pytorch0.4.1版本链接Pytorc
2021-11-27 19:49:41
13350
45
原创 【CS231n 学习笔记】Lecture8:Spatial Localization and Detection
CS231n学习笔记目录(2016年Andrej Karpathy主讲课程)Lecture1:Introduction(介绍) Lecture2:Image Classification Pipeline(数据驱动的图像分类方式) (上) Lecture2:Image Classification Pipeline(数据驱动的图像分类方式) (下) Lecture3:Loss functions and Optimization(线性分类器损失函数与最优化) Lecture4:Backprop.
2021-09-10 15:36:44
253
原创 【CS231n 学习笔记】Lecture7:Convolutional Neural Networks
卷积神经网络的原理https://blog.youkuaiyun.com/v_JULY_v/article/details/51812459另补充:步长的限制。假设图像大小为N,滤波器大小为F,如果(N-F)/stride+1=整数,则stride为允许的步长,否则不允许。为什么滤波器的尺寸总是奇数?奇数尺寸的滤波器有更好的表达,一般使用3、5、7尺寸的滤波器。为什么使用0来进行填充?0不会对输入数据造成影响,滤波器只用考虑输入数据。常用卷积网络LeNet5LeNet5分为卷积层块和
2021-08-25 14:54:58
253
原创 【CS231n 学习笔记】Lecture6:Training Neural Networks Part 2
Parameter UpdatesSGD随机梯度下降是一种较为简单的优化算法,首先通过反向传播得到梯度,然后用梯度乘以学习率:随机梯度下降算法是根据梯度的方向进行更新的,如果有一个损失函数表面(损失值集成的平面),有一个方向的长度远远大于其他方向,所以损失函数(偏导数)在该水平方向上就比较浅显(shallow),而在垂直方向上就比较陡峭(steep),我们要根据合成的方向去进行参数更新,以达到损失的最小值,也就是说,损失函数在水平方向更新的很慢,在垂直方向上更新的较快:上述图..
2021-08-24 11:36:49
219
原创 【CS231n 学习笔记】Lecture5:Training Neural Networks Part 1
Some wrong views错误观点:ConvNets need a lot of data to train事实上对于设计目的来说这是一个错误的观点,完全可以使用小数据集来训练,原因是我们可以通过一些细调来得到更多的细节。大多数情况下我们不会一开始就进行卷积网络的训练,通常会先进行预训练和细调,先在一些大的训练集上(如ImageNet数据集)进行训练,再将训练的结果转移到自己的小数据集中。而ImageNet的预训练已经有人做好了,很多人用了数月的时间对卷积神经网络在不同的数据集上进行测试,
2021-08-21 16:17:21
251
原创 【CS231n 学习笔记】Lecture4:Backpropagation and Neural Networks
Backpropagation首先有3个向量x、y、z,定义一个函数f,使用计算图框架表示为:则最终f的结果为-12,现在引入一个中间变量q,则表达式就变成了一个x和y的加法以及q和z的乘法:首先考虑f对f的导数,值为1;f对z求偏导为q,值为3,意味着变量z对最终的结果有积极的影响,如果给z增加h,则结果f增加2h;f对q的偏导为z,值为-4,对结果有消极的影响;f对x的偏导数需要通过链式法则,转换为f对q的偏导数乘以q对x的偏导数,值为z*1=-4;f对y的偏导数转换为f对q的偏导.
2021-08-19 17:15:59
224
原创 【CS231n 学习笔记】Lecture3:Loss functions and Optimization
假设xi为输入样本,yi为样本标签,W为权重,f为分类器,则损失函数的一般形式如下:Multiclass SVM lossSVM损失函数格式如下,这是一个二分类支持向量机的泛化,计算了所有不正确的类别,将所有不正确类别的评分和正确类别的评分作差,然后加上1,将得到的数值与0比较,取最大的数值,然后将所有的数值求和再取平均。这里不仅要求正确类别的评分高于错误类别,而且使用了一个安全系数1,该值并不是固定的,因为W是无标度的,可以成比例地变化,所以分数的大小与它的量度的选择紧密相关。..
2021-08-18 15:41:07
239
原创 【CS231n 学习笔记】Lecture2:Image Classification Pipeline (下)
Linear Classification如何描述一张图像?这个系统可以由两部分组成,一个是用于处理图像的CNN网络,另一个是RNN(Recurrent Neural Network,循环神经网络,非常适用于与排序有关的问题),用单词序列来描述图像。将这两个模块组合起来,是这两个网络之间可以相互通信。Parametric Approach在参数化方法中,我们要做的就是构造一个函数,输入一张图片,对每一类输出一个数值,对于任意一张图片,我们会计算出它属于哪一个类别。如输入x为32*32*3
2021-08-16 14:52:05
167
原创 【CS231n 学习笔记】Lecture2:Image Classification Pipeline (上)
图像分类的基本任务就是区分图片的种类,例如识别猫、狗、汽车等,在这之前需要将图片转换成一张巨大的数字表单,然后从所有种类中给这个表单选定一个标签。分类问题的难点semantic gap(语义鸿沟问题)在计算机中,例如一张猫的图片,大致由一个300*100*3的三维数组表示,3表示RGB通道,因此表单中的数字都位于0~255之间,反映的是亮度以及每个单点三基色的权值。因此图像分类的难点在于想要处理这些表单中数以百万计的数字并对其进行分类是很困难的。Viewpoint Variation(视角变
2021-08-15 13:45:33
279
原创 【CS231n 学习笔记】Lecture1:Introduction
Lecture1:Introduction计算机视觉是人工智能领域中发展最为迅猛的一个分支,我们进入了一个视觉图片和视频的时代。视觉信息或者像素信息是最难被利用的信息——“互联网中的暗物质”,很难被检测和观察到。计算机视觉是一个与很多领域紧密相连的学科,例如计算机科学、数学、物理、生物、心理学等。简史543 million years ago,生物圈中的结构很简单,对于食物,open the mouth and grab it,物种爆发后,进化出了各种各样的工具来帮助自我生存, Andr
2021-08-14 12:37:27
336
高校教材管理系统可行性研究分析报告
2022-02-20
提案大赛 自习室占座 问卷调查 占座系统
2022-02-20
云计算代码+实现手册.zip
2021-08-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人