TypechoJoeTheme

鱼一的博客 ◡̈

yuyi

知不可乎骤得,托遗响于悲风
网站页面
标签搜索

最新文章

2023-02-10

Pico4 开发试玩

Pico4 开发试玩
在 Pico4 上运行示例 demo开发环境准备demo 代码运行开发环境准备下载 Android Studio 并通过其安装 Android SDK、相应的 NDK 以进行 Pico4 设备上的原生 c++ 混合应用开发。注意问题 ⚠️:Android sdk、 Cmake、 JDK 等开发环境版本和项目代码中使用的版本对应。 Could not GET ‘https://dl.google.com/dl/android/maven2/com/android/tools/b***.pom 报错解决办法,取消 Android Studio 代理设置,在 gradle.property(global) 中注释掉代理设置代码,重启 Android Studio.demo 代码运行从 pico4 开发者官网下载原生开发的 Pico_openXR_SDK 文件,其中包含对应 pico4 版本的 helloXR 项目。使用 Android Studio 打开该项目,构建 gradle 运行环境。连接 pico4 物理设备到电脑,检测到设备后,点击运行。项目浅识一级目录文件及其作用├── ...
2023-02-10
2023年02月10日
0 阅读
0 评论
2023-01-20

科研流水账34

科研流水账34
阅读了论文 Inception Transformer论文结合 Inception 和八度卷积的思想,设计出以通道拆分机制来并行处理高频和低频信息的模块。代码工作:在6002上复现PVEN效果。在6005上跑1600 测试集的Vehicle ID。在fast-reid 上使用Inception Transformer设计基于拆分通道并行处理的特征融合在 fast-reid上测试 Inception transformer中的拆分通道并行处理高低频的模块,比只用resnet50涨了3个多点[36mDatasetRank-1Rank-5Rank-10mAPmINPmetric VeRi94.4696.8497.9175.8243.2585.14[0m问题分析PVEN一开始在vehicleID复现不出来结果,通过github提供的训练好的模型排除了模型部分代码问题,接着开始训练的代码中开始找问题,最终发现是没有使用resnet50在imagenet的预训练权重。最后在veri776上训练得到了接近原论文的结果。自己设计的基于拆分通道并行处理的特征融合效果很差,感觉原因是模型设计的不够合...
2023-01-20
2023年01月20日
0 阅读
0 评论
2023-01-10

科研流水账82

科研流水账82
修改模型代码,添加基于标准差的损失自适应。修损失自适应函数的代码,将其每轮训练调整的损失大小控制在一个较小的范围。修改损失的权重,让局部的交叉熵和蒸馏损失权重平衡。修改可视化局部特征的代码。实现T-sne图展示baseline和使用我们模型后的特征效果图。实现T-sne图展示使用divers损失前后的局部特征分布情况。问题分析在实验过程中发现,基于标准差的损失自适应不适应我们模型的情况因为局部交叉熵损失和蒸馏损失的量级不一样,交叉熵损失大概2左右,而蒸馏损失0.018左右。因此实验过程中,交叉熵的权重会很快被调的很小。经过很多尝试,还是没有找到可视化局部热力图的方法画t-sne图的时候,有的类别看起来很近经过代码设计,实现可筛选的类别展示。下一步-首先得确定最好的效果模型,然后接着需要考虑加divers前后损失的变化是否理想。-热力图暂时还没解决。
2023-01-10
2023年01月10日
0 阅读
0 评论
2023-01-10

希尔排序

希尔排序
希尔排序(Shell Sort)是插入排序的一种更高效的改进版本。它首先将较大的数组分割成多个子数组,每个子数组由一定间隔的元素组成,然后对这些子数组应用插入排序,逐渐减小间隔,最后当间隔为1时,整个数组就变成了普通的插入排序,此时数组已经是部分排序的,从而减少了普通插入排序的操作次数。这种方法由Donald Shell于1959年提出,故称为希尔排序。让我们分步来理解你提供的希尔排序代码:步骤和代码解析初始化间隔(gap):for (int gap = n / 2; gap > 0; gap /= 2) 这一行设置了初始的间隔为数组长度的一半,并在每次迭代后将间隔减半,直到间隔为0(实际上循环在间隔为1时就停止了)。间隔 gap 用于定义子数组,每个子数组包括间隔为 gap 的元素。处理每个子数组:for (int i = gap; i < n; i++) 这一行的循环是对每个间隔为 gap 的子数组执行插入排序。i 从 gap 开始,表示从第一个间隔的位置开始直到数组结束。变量 i 表示当前要进行插入排序的元素。插入排序的修改版:int temp = arr[i]...
2023-01-10
2023年01月10日
0 阅读
0 评论
2023-01-09

选择排序

选择排序
选择排序是一种基本的排序算法,它通过在每次迭代中选择剩余元素中的最小(或最大)元素,并将其放到已排序序列的末尾来工作。在选择排序中,我们同样看到两层循环,每层循环的作用和次数具有其特定的逻辑和意义。外层循环外层循环的变量通常被称为 i,这个循环控制选择过程的次数。对于一个包含 n 个元素的数组,最多只需要进行 n-1 次选择来完成排序。这是因为当你已经正确放置了 n-1 个元素之后,最后一个元素自然就处于其正确的位置,无需再进行选择和交换。换句话说,进行 n-1 次选择后,整个数组就已经被完全排序了。内层循环内层循环的变量通常被称为 j,这个循环负责查找从 i+1 到 n 的范围内的最小元素。内层循环从 i+1 开始是因为在每一轮的开始,i 位置之前的所有元素已经被排序好,因此不需要再次考虑它们。这个循环将遍历未排序的部分,查找最小元素的索引。这里的 n 是因为内层循环需要检查数组中剩余未排序部分的所有元素。对于每一轮,你开始时已经有 i 个元素是排序好的,所以你需要从 i+1 开始,直到数组的末尾 n,这样可以保证考虑所有可能是当前最小的元素。总结在选择排序中:外层循环 定义了...
2023-01-09
2023年01月09日
0 阅读
0 评论
2023-01-08

插入排序

插入排序
插入排序是一种简单直观的排序算法,它通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。以下是插入排序的一些关键细节和为何这种方式有效:关键细节排序的起始点:插入排序从数组的第二个元素开始,即 i = 1。这是因为单个元素(数组的第一个元素)可以认为已经是排序好的。内部循环条件:内部循环使用 j 来比较已排序的元素和当前要排序的元素(key)。如果 key 小于 arr[j],则说明 key 应该在 arr[j] 之前,因此 arr[j] 向后移动一个位置到 arr[j+1],为 key 腾出空间。终止和元素插入:j 递减进行,直到找到 key 的正确位置。当 arr[j] 不再大于 key 或 j 减小到 -1(即 key 应该是当前已排序序列中最小的元素),循环停止。然后将 key 插入到 arr[j+1]。效率考虑:插入排序的效率在部分排序的数组中表现较好。在最好情况下(数组已经完全排序),它的时间复杂度为 (O(n)),因为内部循环不会执行任何操作。在平均情况或最坏情况下(数组完全反序或随机),时间复杂度为 (O(n^2))。稳定性:插入排序...
2023-01-08
2023年01月08日
0 阅读
0 评论
2023-01-08

科研流水账33

科研流水账33
在6005和6002 两台服务器上评估之前在vehicleID训练的模型。在vehicleID数据集中训练PVEN原代码。安装laTex环境,整理创新点问题分析发现PVEN原代码的vehicleID评估部分错误。去github上查看,发现已经被作者修正了,不过还有一处代码的变量赋值有误。经过与胡师兄修改的代码对比,发现代码逻辑一致,没有任何问题。首先从6002的实验结果可以看出,不同配置文件训练出的模型最佳结果基本上都是 mAP 89.3。 6005上最佳结果目前是mAP 90.7,也就是说定好的模型是比原模型有提升的。因此目前主要问题还是考虑复现PVEN的性能。从实验结果来看,配置文件的影响并没有很大,考虑性能无法复现可能是由于我修改代码的原因,所以想尝试直接去训练PVEN来复现效果。下一步计划继续调试PVEN代码,同时筹备论文的方法部分写作
2023-01-08
2023年01月08日
0 阅读
0 评论
2023-01-07

冒泡排序

冒泡排序
冒泡排序是一种简单的排序算法,其工作原理是通过重复交换相邻的元素来排序,如果它们的顺序错误就交换它们。在冒泡排序中,我们看到有两层循环,每一层循环的作用和次数都有特别的意义。外层循环外层循环的变量通常被称为 i,这个循环控制整个排序过程需要多少轮比较。对于一个包含 n 个元素的数组,最多需要 n-1 轮比较来确保数组完全排序。原因是每完成一轮排序后,可以确保至少有一个元素(即最大的元素)被移动到其正确的位置(最后或开始,取决于是升序还是降序)。在每轮排序结束后,下一次排序的任务就少了一个元素,因为最后的元素已经是排序好的了。内层循环内层循环的变量通常被称为 j,这个循环负责在数组中进行实际的元素比较和交换操作。内层循环的范围从数组的开始一直到 n-i-1。这里的 n-i-1 是因为,随着外层循环每进行一次迭代,数组末尾的 i 个元素已经排好序了,因此无需再对它们进行比较。这样,每进行一轮外层循环,内层循环的次数就减少一次,因为每次都会有一个元素被正确排序在数组的末端。为什么是 n-i-1n-i-1 的计算确保了排序算法的效率。首先,每次内层循环结束后数组的末尾都会固定一个最大(或...
2023-01-07
2023年01月07日
0 阅读
0 评论
2023-01-04

C++中宏使用的隐患

C++中宏使用的隐患
让我们通过一些简单的C++例子来解释上述宏使用中的问题。可读性差宏由于其简单的文本替换机制,可以将简短的命令展开成复杂的代码片段,这可能导致代码难以阅读和理解。#define SQUARE(x) ((x)*(x)) int main() { int result = SQUARE(1+2); // 预期是3的平方,即9 }在这个例子中,SQUARE(1+2) 展开后变成了 ((1+2)*(1+2)),这还算直观。但如果宏本身非常复杂,它的展开会使代码难以理解。潜在的副作用宏的另一个问题是可能引入潜在的副作用,特别是当宏的参数在宏展开中被多次求值时。#define MAX(a,b) ((a)>(b)?(a):(b)) int main() { int i = 5; int maxVal = MAX(i++, 0); // 预期是什么?可能不是你想象的结果。 }在这个例子中,i++ 在宏展开中被评估了两次,这可能不是预期的行为。如果a大于b,i会增加两次。这种副作用很难追踪,尤其在复杂的代码中。缺乏类型检查由于宏只是简单的文本替换,不进行类型检查,这...
2023-01-04
2023年01月04日
0 阅读
0 评论
2023-01-03

c+命令行编译相关之动态链接

c+命令行编译相关之动态链接
在大多数情况下,使用 g++ 编译并链接C++程序时,默认情况下会使用动态链接来链接到C++标准库和其他系统库。因此,对于大多数基本的用例,你实际上不需要在命令行上添加任何特殊内容来启用动态链接。g++ program.cpp -o program这条命令已经隐含了动态链接。编译器在处理时会自动寻找系统上的动态链接库(比如C++标准库的动态版本),并确保你的程序在运行时能够使用这些库。明确使用动态链接库如果你需要链接到特定的动态链接库(不是标准库),比如一个第三方库或你自己编写的库,你可能需要明确指定库的路径和名称。这通常通过 -l(指定库名称)和 -L(指定库文件搜索目录)选项完成。例如,如果你要链接到一个名为 libmath 的库:g++ program.cpp -o program -L/path/to/library -lmath在这里:-L/path/to/library 告诉编译器在 /path/to/library 目录下查找库文件。-lmath 指定链接器链接名为 libmath.so(在Linux上)或 math.dll(在Windows上)的库。注意,-l 选...
2023-01-03
2023年01月03日
0 阅读
0 评论

More Info for me 📱

IP信息

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月