当前位置:   article > 正文

2019【字节跳动】【视觉算法】【面经】_面经 vae

面经 vae

大厂就是好,椅子都超虚浮超好看。

面试者登记后会发个小牌牌挂在脖子上,结束要交回去的(前台小姐姐太好看了)。

在这里插入图片描述

进门先是自我介绍,我大概说了说从什么时候开始做图像的,机缘巧合加上一直很感兴趣,就做了些什么什么balabala。

自我介绍完小姐姐就说:“那我们过一遍简历吧。”然后我回答的全程人家都时不时在笔记本上敲着什么。估计大厂有标准流程,要记录我所有的表现情况然后再统一筛选吧。

项目部分

从最近的实习开始:

2019.5 – 至今 创新奇智 图像视觉算法实习生 为工业质检增强数据集

  • 用图像处理+GAN方法,模拟衣服布料的破洞、脏污、褶皱以及磁材的锈迹、白斑等,为后续工业质检任务增强数据。
  • 技术部分:随机漫步+贝塞尔曲线,生成随机曲度褶皱;采有限元算法,对图像进行形变,并利用形变梯度,生成布料褶皱的高亮和阴影。最后搭建GAN模块,尝试各种GAN模型(从pix2pix到non-stationary_texture GAN),提高增强数据集的质量。

我先讲了项目的工业背景。

问:这些是怎么模拟的?
答:用传统的图像处理方法。先随机生成圆形或线条型的mask,破洞的话会有下一层的布料纹理透出来,所以纹理会有些旋转。脏污或布疵会颜色变暗或变黄。最后根据mask把原图replace了。

问:是怎么融合的?还是直接贴上去?
答:嗯,直接贴上去的。
(其实是有透明度叠加的,由内到外透明度逐渐降低那种,最后还会拿guess核卷一下,当时给忘了……)。

问:破洞和线分别是怎么做的?
答:破洞是随机取点作为圆心,向周围每隔5°取随机长度的向量的点,然后用贝塞尔曲线连起来。直线是,随机生成直线后延垂直于直线的方向在直线周围每隔一定距离取随机长度的点,最后用贝塞尔曲线连起来。
(还有随机生成曲线的方法,然后忘了讲了。)

问:能讲一下有限元算法这个么?
答:因为有限元是做网格剖分然后计算的。图像本身就是天然的网格,所以想到用这种方法实现。就是给出原点和目标点,可以计算出网格点的目标位置。

问:能讲一下细节么?不用写公式,就说一说怎么做的。
答:距离原点比较近的点损失系数会比较大,形变就会多;距离原点较远的点损失系数就比较小,形变会少一点。具体地是照论文里公式来的,实现了发现效果还不错,就没特别记住公式怎么写。

问:那讲一下GAN相关的吧。
答:一开始用GAN尝试了一下直接mask生成原图,但因为mask底是白的,生成效果特别不好。后来是用了一种非平稳纹理生成的GAN(non-stationary-texture GAN)效果还可以。网络结构其实很简单,就是一张256的图从中随机切一块128的图作为输入,输出还是256。输出和原来的256的图做一个L1损失、vgg风格损失和GAN的对抗损失。

问:能讲一下怎么用vgg计算风格损失么?
答:这块没太细看。

问:了解过Gram矩阵么?
答:啊对,我在vgg网络里看到过。(小姐姐微笑“嗯,好”)

2018.10 - 2019.3 基于VAE-GAN的图像风格迁移 Linux + python + pytorch

  • 改进VAE-GAN风格迁移模型,训练单个生成器完成一到多的风格迁移。
  • 在训练图像质量(FID)基本不变的情况下,使模型结果的多样性(LIPIS)增加0.07,也使训练效率提高37%。

讲了网络结构。
问:怎么改进的?
答:把网络结构减半balabala,画了一下网络图。
(穿插着问了很多神经网络的基础知识,写在后面了。)

2017.10 - 2018.5 基于GAN的医学眼底图像生成 Linux + python + pytorch

  • 改进GAN眼底图像生成模型,提出三通道输入结构,学习血管、视杯和视盘到彩色眼底图像的映射关系。
  • 与经典的Pix2pix算法相比,PSNR高出1.81dB,SSIM高出0.0165,使得眼底彩图生成质量有显著提高。
  • 相关成果已被《Biomedical Engineering online》接收(SCI检索)。

讲了一下具体的实现,就是输入单通道变三通道。
问:数据集是多大?
答:四五十张吧,因为同时存在血管、视杯、视盘的mask的数据集非常少。
问:多少张训练多少张测试的?
答:测试是15张吧,其他用来训练。
(这么多次面试里,数据集问题是这个项目被问最多的!)

问:基于pix2pix还是cycleGAN改进的?
答:pix2pix,当然cycleGAN也跑了实验结果,写在论文里了。
问:哪个效果好一点?
答:pix2pix,毕竟有label。

2017.3 - 2017.5 植物叶片识别 Matlab

  • 项目内容:实现简单的植物叶片识别算法
  • 主要工作:预处理(二值、去造、旋转、去叶柄、边缘检测等);计算叶子基本特征(长、宽、周长、面积等);提取特征(圆形度、矩形度、周长面积比、凸包比、纹理色度等);用决策树判断叶片类型。

问:是怎么做的?
答:用传统的图像处理方法计算了圆形度、矩形度等等特征,最后用决策树分类。

问:决策树是怎么实现的?
答:选一个特征作为分类节点,然后对叶子的种类进行分类。
(我说当时扒了别人的代码跑了跑,没细看,其实那会儿根本没用决策树,提取到特征后就结了。)【这样不好哦,写上简历的东西还是要尽量会的,不然被问到很减分。】

2015.7(培训) 车牌识别系统 东软睿道集团 Visual Studio + MFC + OpenCV

  • 项目内容:将汽车牌照从复杂的背景中提取识别出来,完成客户端、服务器的交换,并建立数据库。
  • 负责技术:车牌图像处理识别全过程代码实现(预处理、车牌定位、字符分割、字符识别)。

这个项目年代太久远了人家没问。

穿插着问的基础问题

问:卷积输入是(n, c_in, w, h),输出是(m, c_out, w, h),kernel=k, s=1写一下这个卷积的计算量。
答:k×k×c_in×(w-k+1)×(h-k+1)×c_out

问:有没有什么减少计算量的方法?
答:只记得ResNet提出的时候说是卷积核为1能减少计算量。
问:那它是怎么减少的呢?
答:计算量k×k变成1×1了,当然减少了计算量。
问:那对后面计算量的影响呢?
答:把后一层的c_in变小了。

问:一个3×3的卷积核经过两层后,它的感受野是多少?
答:(隔了好久)7。
问:经过一层的感受野是多少?
答:3。(大概怕我之前是猜的。)

问:了解###、###和***么?
答:***组会同学讲过,但我没研究,大概是卷积得到3个feature map,然后其中两个相乘,再怎么着来着。。。。。。

问:了解BN么?
答:嗯,减均值除方差,再乘以一个数加上一个数,后面这两个是训练的。
问:这个均值是多大范围的均值?
答:不太清楚。
(范围是一个mini-batch size)

问:L1损失函数和L2损失函数有什么区别?
答:L1是稀疏的,因为L1和L2的图像是这样这样这样的(画了图)。
问:还有其他差别么?
答:不知道了。
(临走之前问了到底有什么区别,人家说L2因为要平方,数值很大,所有一开始训练会容易不稳定。但是训练到后期,L1斜率一直是1,会有些没必要的计算。)

问:GAN训练结果的细节很模糊的时候,有什么办法提高么?
答:有一个方法,现在很多网络把判别器改成了***结构,从单一的计算0/1的损失函数变成了计算***损失,这种方式可以提高生成图片的细节效果。
问:还有其他方法么?
答:最简单粗暴的,再加一个GAN用来做超分辨。

问:GAN容易训练不稳定,有遇到过么?
答:有,在VAE-GAN那个里面,跑 鞋子的轮廓→鞋 的时候,就会训崩。
问:是怎么解决的?
答:没解决。。。没用这个数据集

问:训崩了有什么改进的办法么?
答:一般别人的代码不会训崩,自己改的时候会有改崩的情况。我试过把每个epoch的所有损失函数打印出来,观察崩了的地方的loss值和原代码的loss值有什么不同。
问:有其他办法么?
答:(目光转向窗外做无助状)我也想有其他办法。(小姐姐笑了)

编程题

问:给定一个n×m的矩阵,将其中所有值为0的元素所在的行和列元素都置为0。

improt numpy as np
def function(grid):
	grid = np.array(grid)
	i, j = np.where(grid == 0)
	for k in i:
		grid[i][:] = 0
	for k in j:
		grid[:][j] = 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

问:(自言自语“是在原始矩阵上改的吧”,让我感觉这是他们常出常考常出错的点。)检查一下代码的错误(代码写错了的那种意思)。
我:没错啊?能提示一下么?
问:会不会被置0的元素所在行和列也被置0了?
我:没有啊,i和j只记录了原始矩阵0元素的行标和列表。只会有已经被置0的行又被置0的重复情况。
问:有没有办法改进呢?
我:i和j分别去重一下就行了。

还有什么问题?

我:这边如果用GAN的话主要是做什么?
答:有同事用GAN做一些特效渲染之类的。
我:有成功上线的么?
答:有成功的但是还没上线。
我:一个挺耗计算量的吧?那以后5G时代是不是会上传到服务器计算?
答:可能吧,这方面的部署不太清楚,也可以先部署在高端机上测试。
我:哦,也是。

送我去电梯间的路上,我说我在准备秋招了,现在秋招都提前了。她说她们组也在准备秋招活动。
我问她如果在这儿实习能有机会留下来么?
答:有的
我:有多大概率呢?
答:二分之一

所思所想

总的来说还是一次愉快的面试经历。不仅增加了我备战秋招的信心,也让我体会了一把不卑不亢的感觉(可能是小姐姐太温柔了气场不强)。

以后做事儿细节要搞明白啊,不能差不多就过了啊!亏都吃这上面了。

还有个事儿想说,【谨慎对待网络文化带来的偏见】。

感觉大部分人对程序员这个职业都有偏见,认为程序员就该越大佬越秃顶,就得面临熬夜加班的摧残。

导致很多人不敢不想不愿选择程序员这个职业。

然而我眼前这位小姐姐发量充足气质温婉,绝对不输其他岗位的小姐姐。我自己实习的公司也是,周围大部分程序员都发量浓密甚至胜过了我。

说明一个问题,并不是所有写代码的都会走向秃顶,也不是所有秃顶都是写代码导致的。

程序员的种类有很多,前端、后端、算法、研发、数据、运维……需要加班的程度都很不一样的。

而且秃不秃顶取决于基因和自己的生活方式。既然向往健康的生活,就去健身啊,就管住嘴啊,就去洗涤心灵自我减压啊。

so,用眼睛看,去亲身体验,然后自己总结,才是最真实的。

希望喜欢算法的姑娘们能无视偏见放下担忧,去选择自己的人生。

希望所有的姑娘们都能早日摆脱 “女孩子嘛,回家当老师/考公务员就挺好” 的观念束缚。

ps:我某个亲戚全家所有男性都秃顶,不管啥行业都秃顶,二十几岁就秃顶那种。再次证明秃顶和职业没那么大的关系。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/算法创新者/article/detail/62440
推荐阅读
相关标签
  

闽ICP备14008679号