简历中项目部分内容梳理

简历中项目部分内容梳理,第1张

简历中项目部分内容梳理
  • 摘要
  • 基于检索的肺结节分类算法
  • 基于GNN特征融合的肺结节分类方法
  • WEB开发
  • 正在做但是还没有成果的工作
    • 论文
    • 比赛
  • 总结

摘要

  经过上次面贝壳机器学习算法岗总结出来的经验,一定要对自己简历里面写的东西掌握得清清楚楚才行,如果你说得模模糊糊的会给面试官很不好的感觉,比如,问你你的论文比起其他方法提升了多少,你说,大概2个点吧?你自己觉得合适吗?对自己简历中的项目部分做一个梳理,这样能在面试的时候从容应对?起码不会说的不清楚吧~然后列举了一点对于项目面试官可能会问到的问题做了一下解答。如果有同学能坚持看完,就把自己当成面试官,有什么问题,就问,来蹂躏我!

基于检索的肺结节分类算法

  我的研究方向是医学图像处理,细化的分支是计算机辅助诊断中的肺结节分类。从本科毕业论文开始接触深度学习,本科毕业论文就是肺结节分类,主要工作是用2019年CVPR上的一个叫DeML的模型来对肺结节进行分类。然后我的第一篇论文就是基于本科毕业论文,引入了检索的思想,对2D的肺结节进行分类。
  如果说要问工作细节,那么可以这么描述:
  前面提到了,这个工作使用的是检索的思想进行肺结节分类。先说说为什么要用检索的思想:从常理上来看,医生在诊断过程中,就算是有计算机辅助诊断系统,有这么多学术界的分类思想,但事实上,这个辅助诊断系统还只是能起到辅助的作用,如果一个模型只能够给医生提供输入的肺结节的类别以及预测类别的概率,信息有点单薄,是存在不足的;而且,现在的肺结节一般是通过CT来获取的,CT叫计算机断层扫描,一次CT出来的结果是许多2D图像的堆叠,对于同一个结节一定会有多张切片,如果说模型性能不好,同一个结节的不同切片作为输入,预测结果可能不同。介于这两点,我们引入了检索的思想来对肺结节进行分类。具体的做法是,使用前面提到的DeML模型对肺结节切片进行特征提取,一个结节切片对应一个512维的特征,然后计算特征之间的余弦相似度,并根据这个相似度进行排序。指定前K个做为一个结节的检索结果,一个结节有N张切片,那么一个结节就对应NxK个检索结果。我们根据这NxK个检索结果的大多数类别对待检索结节进行分类。这样就能解决我们前面提出来的两个问题,一个是融合一个结节的多张切片检索结果,一个是可以把检索结果返回给医生,医生能够根据检索结果对一个结节做更全面的评价。最后我们的结节分类准确率为95.49%,AUC为0.9792,准确率比之前SOTA的提升了1.99%,AUC提升了0.127。
针对这个工作,面试官可能会提问的问题:

  1. DeML模型细节?
      DeML.arxiv是2019年CVPR上发表的论文提出来的模型,以GoogLeNet做为backbone,利用混合注意力,包括像素注意力、通道注意力来对多尺度的输入进行特征提取,并完成zero-shot分类任务。通过最大化每个通道输出的特征之间的距离,最小化每个尺度之间的特征距离做为目标函数对模型参数进行优化。
  2. ROC曲线如何绘制?AUC如何计算?
      首先是ROC曲线,中文名是接受者 *** 作特性曲线。横坐标为FPR,纵坐标为TPR。FPR是所有阴性样本中分错的样本比例,TPR是所有阳性样本中分对的比例。当TPR为1,FPR为0的时候,在图中就是矩形左上方的角点,这个时候没有分错的阴性样本,阳性样本全部分对,分类准确率为100%,性能最好。设定不同的分类阈值,可以得到对应的(FPR, TPR),在坐标轴中将不同的点连接起来,就绘制出了ROC曲线。
      AUC表示ROC曲线下的面积。我了解的有两种计算方法:
    a. 第一种:直接使用积分来计算ROC曲线和x坐标轴围成的面积,或者说是在计算每一个图中的小柱子的面积之后求和。但这么计算稍显复杂,有更简化的方法。
    b. 第二种:也可以从另一个方面理解AUC,他表示的是从一个样本集中抽出一个样本,正样本的预测值大于负样本的预测值的概率。 如果模型是完美的,预测正确率为100%,那么预测的正样本的概率全都大于负样本的概率,此时的AUC为1。因此我们可以有这种计算方法:
    A U C = ( ∑ i ∈ i s P o s t i v e r a n k i ) − M ∗ ( M + 1 ) 2 M ∗ N AUC = \frac{(\sum_{i\in isPostive}rank_{i})-\frac{M*(M+1)}{2}}{M*N} AUC=MN(iisPostiveranki)2M(M+1)
    思想就是,按照预测概率对所有样本进行排序,并按照从大到小的顺序指定从n到1的rank值,然后计算所有正样本之间的组合数占正负样本所有组合数的比例,计算出来的就是AUC值。

基于GNN特征融合的肺结节分类方法

  这是我的第二个工作。前面的肺结节分类方法是使用2D切片作为模型的训练数据,显然2D的切片没有3D肺结节包含的信息丰富,代码是caffe框架的,然后当时我们实验室老师又有了资金,购入了几张卡,有计算资源了,于是就转到3D肺结节分类方向来了。这个工作最主要的思路就是使用GCN来融合肺结节传统的手工特征以及深度学习不同模型的特征,输出一个最终的特征用于对肺结节分类。
  如果说要问工作细节,那么可以这么描述:
  前面也有提到,这个工作是使用GCN对结节传统特征和深度特征融合进行分类。先说说我们为什么要这么做:阅读了许多文献,特征融合方向的工作要么是单一融合传统特征,要么是单一融合深度特征,没有说把深度特征和传统特征融合的工作。我自己的思考是:传统特征具有可解释性,而且特征针对的方向很单一;深度特征,也就是这么多大神提出来的那些backbone提取出来的特征,虽说是一种黑箱的特征,但是它本质上还是一个特征,那是不是可以试试深度特征和传统特征的融合呢?然后我就开始干了。一般一些论文上特征融合工作都是将特征之间简单的相加、取平均值、去最大值。前两年不是图神经网络兴起么?然后图神经网络就是通过聚合节点之间的特征,自动捕获他们之间的关系,从而生成一个更具有辨别性的特征。这不就正好是我想要的么?然后我就把传统特征(包括LBP、HOG、GLCM)和深度特征(ResNet、GoogLeNet、ShuffleNet、Lenet、VGG)做为图神经网络里面的图节点,使用GCN的方法进行卷积,最后得出特征进行分类。这就是这个工作的主要思想。最后使用ACC、AUC、F1、Spec、Sens、Prec这些指标对模型做了一个全面的评价,最后的分类准确率有93.25%,比起同类方法总体的ACC有了0.68的提升。
针对这个工作,面试官可能会提问的问题:

  1. LBP、HOG、GLCM这些传统特征是怎么算的,怎么把他们引入3D呢?
      LBP是局部二值模式,具有光照不变性,最主要是提取图像的对比度信息,主要工作原理是对比当前像素值和领域像素值的大小,比当前像素值大的像素点对应位置标记为1,比当前像素值小的像素点位置标记为0,最后将这些0-1连起来形成一个二进制数,转化为10进制,可以使用直方图来统计一定区间的数量,形成一个特征描述符,即可得到LBP特征;把它引入3D的思想是:一个像素在2维图像中有8个邻居像素,在3维图像中有26个邻居像素,这样想,LBP的思想不久可以迁移到3D中了么?但是这样会存在一个问题,就是产生的二进制数是26位的,这个数是非常大的。我们就用LBP的等价模式来对特征进行维度缩减,然后在进行直方图统计形成特征描述子。
      HOG特征是梯度直方图,用于描述图像的梯度、轮廓信息特征。计算方法是:计算每一个像素点的x、y轴方向上的梯度,然后然后使用计算出像素点的方向和强度,然后统计不同方向上的梯度个数,得到最终的特征描述符。
      GLCM特征是描述图像的灰度特征,他的主要思想是:通过统计不同间隔像素相邻像素对重现的个数得到一个GLCM矩阵,然后通过这个GLCM矩阵可以计算该矩阵的反差、对比度、能量、熵等信息,然后利用这些计算出来的特征值来描述这个图像。
  2. GNN主要有哪些类别,常见的GNN有哪些?
      GNN主要有频域有空域两个方向。其中空域指的是空间域,做图信息聚合的时候特征直接和邻接矩阵 *** 作;频域则引入了拉普拉斯矩阵,空域的卷积等于频域上的乘积、傅立叶变换、车比雪夫多项式进行严格证明,最后得出需要对邻接矩阵左乘一个D^1/2 ,右乘一个D^1/2变换。
      常见的空域GNN有:graphSAGE、GAT、JKNet
      常见的频域GCN有:GCN、ChebNet
  3. F1、Prec这些指标怎么计算?
      Prec也就是精确度表示分成正类的样本中,正确分类的正例样本的比例,计算公式如下:
    P r e c i s i o n = T P T P + F P Precision=\frac{TP}{TP+FP} Precision=TP+FPTP
      F1通常用在类别不平衡的任务中,用于衡量prec和recall指标的,计算公式如下:
    F 1 = 2 ∗ p r e c ∗ r e c a l l p r e c + r e c a l l F1=2*\frac{prec * recall}{prec + recall} F1=2prec+recallprecrecall

WEB开发

  这个是学校组织的软件工程实训项目,是有和客户真实对接的,也就是有需求沟通等企业项目开发流程步骤的,主要是做一个围棋教育在线管理系统,主要的功能就是家长买课、管理员排课处理请求、超级管理员管理系统等。严格遵守软件工程那一套流程,包括需求分析、项目原型设计、数据库设计、前后端分离开发、代码风格、文档撰写、测试、部署,的项目。项目的技术栈是Vue+Django,我在项目中担任的角色是组长。那个时候是大二刚结束,也算是刚对软件工程入了个门,做这个项目很累、但是收获还挺大的。一整套软件工程的东西,vue+django的技术栈,还考虑了客户的体验,加入了celery异步处理任务队列、redis缓存数据库、JWT身份认证技术,顺带把css、html、javascript、python都给学了。因为做得不够深入,分布式、多线程这些并没有考量进这个项目。这就是这个项目的大概介绍。
针对这个工作,面试官可能会提问的问题:

  1. 在项目中碰到哪些困难?
      难点?那难点可多了。
    a. 由于是初学者,刚开始连npm、pip之类的包管理工具使用起来都费劲,但是在经过几天适应、了解之后,还是学会了怎么使用的;
    b. 还有就是初学者永远绕不开的坎,登录注册、记住登录状态,觉得思想挺简单的,但是实现起来还是觉得逻辑很复杂。刚开始查资料说要用session和cookie,但是说这个策略会存在不支持单点登录的问题,所以使用了更好的JWT策略;
    c. 第三方SDK的使用。当时还没有那种凡事看文档的自觉,每个东西都在csdn上查,零零碎碎的,还需要自己整合知识,所以那段时间学习效率很低、使用第三方SDK太难;
    d. 项目开发团队合作问题也是个问题。组长嘛,要分配任务,可是当时自己也不会啥,也不知道怎么分配任务合理,所以团队合作,谁做什么,配合得并不是很好;
    e. axios的使用,不知道为什么,那个时候愣是学不会怎么用axios,现在想起来还挺傻逼的。
  2. JWT、Redis、Celery等原理是什么?
      由于我之前写过这些了,就直接贴连接,不再赘述了:
    JWT:https://blog.csdn.net/weixin_42065178/article/details/124205515
    Redis:https://blog.csdn.net/weixin_42065178/article/details/124224353
    Celery:https://blog.csdn.net/weixin_42065178/article/details/124231326
  3. django后端创建了几个app,数据库有多少表?
      让我来数数哈,主要是首页、用户、课程、合同、购物车、支付、折扣等7个应用分别处理对应的客户端请求;数据库的话,有十来个表,具体多少个记不清楚了,比如用户表、课程表、老师表、课程章节、课程课时、折扣类型、折扣计算、课程和折扣关系表、活动表、支付记录表等等,他们通过外键来连接。
  4. 主要负责那些工作?
      组长嘛,啥都做。但是最主要是做前端。但是前期在css、html这一块浪费了好多时间,导致页面做的并不是很好。

正在做但是还没有成果的工作 论文

  继上一篇论文,继续在GNN上做工作,这次使用结节的特征做为图的节点加入一些策略来提升肺结节分类的性能,目前的阶段,是比之前的论文有提升了的,正在探索还有没有继续改进的余地。

比赛

  CVPR2022的workshop比赛,主题是对抗攻击图像分类,主要的思路是引入PGD、topK损失困难样本挖掘、ConvNeXt、数据增强等策略。前两天刚结束第一阶段,昨天刚通过第一阶段的审核,进入了第二阶段。

总结

  其实也没啥总结的,两篇论文、一个项目,在做一个项目、一个比赛,就酱紫。如果有同学能坚持看完,就把自己当成面试官,有什么问题,就问,来蹂躏我!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/714733.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-24
下一篇 2022-04-24

发表评论

登录后才能评论

评论列表(0条)

保存