0%

例行总结过去一年,还是和去年一样,从实习,学业以及生活三个方面来写点流水账。

实习

在西门子实习到了今年年初的四月份,由于我自己不想干了,同时毕业设计也即将ddl,顺便享受一下剩下的大学生活,就离职了。实习的主要工作就是做了一个基于 self-supervised 的方法来检测 西门子自己PCB的缺陷的工作。我大概是把所有的代码给跑通了,有了一个初步的结果。
对于输入的图片,上面会有8块相同的PCB板子。对于这些PCB板子,首先采用传统CV图像识别的方式,根据模版图片识别出具体八块PCB。由于我们使用的是4K的摄像头,因此每一块PCB的分辨率非常的高,直接输入给模型做推理或者训练的话会非常的大。
想到一张方法就是先对模型进行分块处理,对于每一个输入的PCB板子,在训练阶段,把它分成128*128的小块,同时对于每一个小块,记录对应的位置,方便后续加入位置编码,然后打乱交给后续的图像编码器;在推理阶段,顺序的把PCB板子每一块给切割成对应的小块,同时记录位置。
得到128*128的小块之后,采用利用经过预训练的图像Encoder得到图像的编码,这里有多种选择方式,例如 ResNet, SwinUnet, SwinTransformer 等等模型可以选择。在

算法流程图

整体算法流程图

学业

TBD

生活

TBD

写在最后

TBD

1. 两数之和

用一个dict来存过去见过的 target-nums[i] ,然后如果当前和这个一致的话就找到匹配的两个数

1
2
3
4
5
6
7
8
9
10
from collections import defaultdict

class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
mem = defaultdict()
for i in range(len(nums)):
if target - nums[i] in mem:
return [mem[target-nums[i]], i]
mem[nums[i]] = i
return []
阅读全文 »

在西门子实习的时候,当时突发奇想想设计一个pre-training加post-training的架构,当时是希望在后面接一个projection head,然后前面用预训练好的模型冻结住不改变就可以了。原本以为只需要写一串这样的代码就完全OK:

1
2
for param in model.xxxpart.parameters():
param.require_grad = False

结果训练完后面的projection head,前面的模型输出的重建图片的结果和原来差别巨大,我就感觉并没有冻结住所有的变量,肯定是对前面也进行了训练。查看训练前后模型的参数变化:

阅读全文 »

博客是2021年就搭建好的,可惜也没有写一些技术类的文章。主要是自己也没什么本事,肚子里也没啥墨水。那还不如在互联网上记录过去一年生活与学习的痕迹,以后还能留个纪念。写流水账

实习

一月份结束了在ChaoWei Xiao老师那里的远程实习,是我第一份科研向实习工作,主要做的是大模型评测代码相关benchmark的搭建。

正如同deepseek宣传的那样,AGI的实现是算力x算法x数据,数据在其中其实扮演着很重要的角色,所以这个工作大部分时间也就在洗数据,测模型,找bad case等。据说benchmark相关的工作就是这样,但是我个人实在是觉得这样的工作没有什么含金量,也没有去继续下去。

虽然这段实习经历就三个月的时间,并没有继续延续下去,但是我觉得这倒是我受益比较多的实习经历。在zqz师兄 (虽然我觉得他情商非常低下) 的指导之下,倒是形成了自己的代码规范,对于面向对象代码的规范,方法的封装,类的继承等都比之前要写的好了很多,技术力upup。同时在做实验的时候还学到了很多分析bad case的方法,以及分析问题的角度与思路,还是蛮不错的。

寒假在家倒是挺爽的,和朋友吃吃喝喝,爽摸一个月。

阅读全文 »

中国科学院计算技术研究所客座学生 一面(40min)

面试是计算所的phd电话交流的,流程如下:

  • 介绍了要做的项目

    ICT,商汤和南方电网一起合作的项目。主要做LLM+时序预测,有卡有数据集,但是数据集是南方电网的内部私有数据集,不能公开。

  • 谈谈之前做过的LLM相关的项目,有没有自己跑过,或者测试过一些LLM?

    讲了远程实习那段用LLM做漏洞检测和漏洞修复的工作。

阅读全文 »

提交

1
git commit -m "commit_info"

创建分支

是指在当前节点下,创建一个完全一样的分支,和之前的分支互不干扰。

1
git branch <branch_name>

切换到相应的分支上:

1
git checkout <branch_name>

可以用一个指令完成创建与移动:

1
git checkout -b <branch_name>
阅读全文 »

为什么需要图神经网络

对于一个图而言,我们通常注意于三种特征:

  1. 整个图的特征,例如图中有多少个节点,多少条边。
  2. 图中节点的意义,例如对于一个图片的图表示,可能一个节点就表示了一幅图片的一个像素点。
  3. 图中边的意义,例如对于社交网络而言,两个节点之间有边就表示两个人是有联系的,反之则没有联系。

因此,图神经网络的任务也通常集中于这三种,我们可以分为Graph-level,Node-level以及Edge-level的任务。

如何表示一个图

无论要解决什么样的任务,首要任务肯定是要先表示出来一个图,比较容易想到的解决方案就是构造邻接矩阵。但是邻接矩阵有它的缺点,就是太过于稀疏了,我们在学Linear Algebra的时候都知道,稀疏矩阵其实是一个不好的东西,同时对于我们计算机而言,稀疏矩阵同时占用了大量没用的内存,这对于我们以后的计算肯定是会降低性能的,所以我们这里可以采用构建邻接表的形式来表示一个图。

阅读全文 »

之前只是听说过python可以使用beautifulsoup或者是selenium之类的库进行爬虫的操作,也听说过一些理论,例如能爬API就爬API,爬不了API再去爬网页。

这次需要自己手动的去爬取存储漏洞代码的网站SARD以及Github commit

爬取漏洞代码

其实这里我是用selenium模拟了浏览器的这样一个功能,但是后面发现只要爬API就行了。

Selenium模拟浏览器

首先需要安装相应浏览器的驱动,我用Edge比较多,因此选择了Edge的driver,实际上你用哪个就在网上下哪一个然后安装到和python安装目录一样的路径下就ok了。

观察这个网页,发现我们需要找的代码其实是一个滚动的状态,就是说随着鼠标的下滑,它之前的代码会从页面消失,后续的代码会在页面展现,单纯的使用一个selector根据它的class来提取里面的代码肯定是不行的。

阅读全文 »

蔚来数据分析日常实习面试

介绍一下自己的项目

介绍了在NUS做的iwallpaper项目的数据获取以及如何处理的。

一个数分场景题

妈的,我都没听过那些名词,什么数仓异动,最后尴尬的和面试官说没学过不好意思😭

Union和Union all区别

Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;

Union All:对两个结果集进行并集操作,包括重复行,不进行排序;

了解窗口函数吗,说说看呢

1
2
<窗口函数> over (partition by <用于分组的列名>
order by <用于排序的列名>)
阅读全文 »