-
Notifications
You must be signed in to change notification settings - Fork 220
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
93714f1
commit 0ef0383
Showing
234 changed files
with
13,222 additions
and
93 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,137 +1,122 @@ | ||
# CV_Interview | ||
## 一.《百面计算机视觉第三版》简介 | ||
|
||
## 特别感谢小伙伴们(排名不分先后): | ||
- **DarrenZhang** | ||
- **BJWang** | ||
- **小亦** | ||
本仓库(**cv_interview**)主要针对的是计算机视觉算法岗面试题的整理。这一版本,我们开始汇总各大**互联网大厂公司**技术岗考察的**CV算法题**:fire:。希望可以帮助同学们更加有针对性地准备面试,也希望帮助同学了解面试中的**八股文套路**,可以让更多的同学拿到**Dream offer。** 当然,如果对你有帮助,也希望你可以点个star⭐,谢谢! | ||
|
||
## 《百面计算机视觉第三版》简介 | ||
|
||
|
||
这里是《百面计算机视觉第三版》面试题的更新,以往两版帮助了很多同学。这一版本,希望可以帮助更多的同学拿到**Dream offer。** | ||
## 二. 百面计算机视觉通用基础面经 | ||
|
||
**Update:** 此次我准备以公司为标签,整理每个公司在面试中所问到的算法题,希望给各位带来帮助。当然,如果对你有帮助,也希望你可以点个star⭐,谢谢! | ||
目前我们整理过《百面计算机视觉》的第一版与第二版。我们也会**持续更新**这些基本的知识内容的! | ||
|
||
## 注:如何看面经呢? | ||
- **建议下载在本地观看,每天可以pull拉取最新的仓库哦!** | ||
其中相对应的内容,参考了一些网上很优质的文章,向他们的工作表示谢意!(**Update: 2021.10.22**) | ||
|
||
- 这里面的面经有很多公式,可以采用Chrome浏览器,再添加[GitHub with MathJax](https://chrome.google.com/webstore/detail/github-with-mathjax/ioemnmodlmafdkllaclgeombjnmnbima/related)拓展程序。**但是,同样有很多公式,无法显示!** | ||
- **[深度学习基础面试题]('./通用计算机视觉算法面经/深度学习基础面经题/readme.md')** | ||
- **机器学习高频面试题** | ||
- **传统CV (Opencv面试题)** | ||
- **目标检测(Yolo系列等)** | ||
- **图像分类(通用网络与小型网络等)** | ||
- **图像分割面试题** | ||
- **Transformer相关的面试题** | ||
- **落地工程化等工作(量化/蒸馏)** | ||
|
||
- **C++与操作系统** | ||
- **Python面经** | ||
|
||
- **我们会将面经,首发于公众号"灿视学长"中,欢迎各位扫码关注!** | ||
|
||
|
||
 | ||
#### 注:如何更好地看面经? | ||
|
||
## 1. 写在前面,信心很重要!(背景不好,还想做CV吗?) | ||
- **因为面试题里有很多markdown的公式,建议下载在本地使用vscode/typora观看,每天可以pull一下拉取最新的仓库哦!** | ||
|
||
 | ||
- 也可以采用Chrome浏览器,再添加[GitHub with MathJax](https://chrome.google.com/webstore/detail/github-with-mathjax/ioemnmodlmafdkllaclgeombjnmnbima/related)拓展程序。**但是,同样有很多公式,无法兼容!** | ||
|
||
我写了一篇公众号博文:[没文章,没背景,想做CV?那就按这个干!](https://mp.weixin.qq.com/s?__biz=MzkzNDIxMzE1NQ==&mid=2247485889&idx=1&sn=cc9e77174891a876264d087ba250c818&chksm=c241ea8df536639bb777b325bce49ef181d4ab2ea3f781b30ea964ae120e74f986ddbddbff0d&token=1223742475&lang=zh_CN#rd) | ||
|
||
其中我整理相对应的**视频课**与**电子书**的**学习路线资料**,百度网盘链接:[下载地址](https://pan.baidu.com/s/1kOfOAKEhHByD2f2BTNEYFQ),密码:g85m | ||
|
||
**若地址失效,可以加我微信,我发给你就好~** | ||
### 三. 各大厂的面试真题 | ||
|
||
|
||
|
||
## 二. 百面计算机视觉通用面经 | ||
首先,这里的大厂,真的很多,这里我主要把bat,字节等公司放在一起,热度最高。其它如网易,商汤等大厂,我后面收集多了,我再分开~ | ||
|
||
### 1. 深度学习相关 | ||
[一文了解激活函数](./深度学习基础/激活函数.md) | ||
[DenseNet详解](./深度学习基础/DenseNet.md) | ||
[常用评价指标](./深度学习基础/常用指标.md) | ||
[Softmax与Sigmoid的联系与区别](./深度学习基础/sigmoid与softmax的区别与联系.md) | ||
[CV中的Attention](./深度学习基础/CV中的Attention.md) | ||
[resnet及其相关变种](./深度学习基础/resnet.md) | ||
[Drop正则化(1)](./深度学习基础/dropout_1.md) | ||
[Drop正则化(2)](./深度学习基础/dropout_2.md) | ||
[手撕反向传播](./深度学习基础/bp举例.md) | ||
[显存有限,如何增加训练时的Batch Size?](./深度学习基础/enlarge_bs.md) | ||
[很全的Normalization汇总哦~](./深度学习基础/normalization.md) | ||
[L1与L2正则的区别,L1为何是更稀疏?](./深度学习基础/L1与L2正则的比较.md) | ||
[感受野](./深度学习基础/描述一下感受野.md) | ||
[权重初始化](./深度学习基础/权重初始化的方法.md) | ||
[label smoothing推导](./深度学习基础/labelsmoothing.md) | ||
[重参数技巧的简述](./深度学习基础/reparameter.md) | ||
[softmax及其相关变形](./深度学习基础/softmax及其相关变形.md) | ||
[优化算法](./深度学习基础/优化算法.md) | ||
- [腾讯面试题汇总]('./大厂面试原题/腾讯/腾讯面试题.md') | ||
|
||
- [阿里面试题汇总]('/大厂面试原题/阿里/阿里面试题.md') | ||
- etc | ||
|
||
|
||
|
||
### 四. Q:**为什么此仓库可以一直维护下去?** | ||
|
||
A:**因为,我也是一个转行的算法工程师**。我本科的专业是材料科学与工程。2016年,我本科毕业后,在一个二线城市找到了一份工资3k+的工作,后面才了解到原来计算机这个行业中的待遇这么高,年薪动辄**20w+**,(**而今年(21)年,白菜价已经快到40w了**)。于是我就跨专业考研了。在考研之后,经历了AI大火时期,看到了大厂给算法岗开出了很高的待遇,就将方向一直放在CV中。在之后找实习中,我发现我不懂得面试官的套路,无从准备,一开始屡屡碰壁。当后面面试多了,了解多了,面试就成功率高了很多。最后我也在秋招时期,靠着自己断断续续整理2年多的面经,拿到了BAT等公司的cv算法offer。我也开始将面经开放出去,也帮助了很多同学拿到了心中的算法offer。**希望我可以用我的经历跟知识存储帮助各位可以更好地拿offer吧。** | ||
|
||
### 2. 传统图像处理 | ||
[图像的颜色空间](./传统cv/颜色空间.md) | ||
[初识直方图均衡化](./传统cv/初识直方图均衡化.md) | ||
[直方图均衡化(II)](./传统cv/直方图均衡化(II).md) | ||
|
||
|
||
 | ||
|
||
### 3. C++/Python工程篇 | ||
|
||
[指针与引用的区别](./C++与Python等工程篇/Pointer&References.md) | ||
[多态与继承之间的区别](./C++与Python等工程篇/Inheritance&Polymorphism.md) | ||
[重载、重写与重定义的区别](./C++与Python等工程篇/03.overload&override&redefine.md) | ||
[构造函数与析构函数可以是虚函数吗?](./C++与Python等工程篇/04.Constructors&Destructors.md) | ||
[map和unordered_map区别及其优缺点](./C++与Python等工程篇/map.md) | ||
|
||
目前,我在复旦全日制攻读博士学位,跟一些工业界的小伙伴们,一起维护这样的仓库,如果你对**找工作,读研,读博有什么疑问,可以加我好友~** | ||
|
||
|
||
### 4. 图像分类与图像分割篇 | ||
#### 通用分类网络 | ||
|
||
[Inception V1](./图像分割与图像分类/InceptionV1.md) | ||
[InceptionV2V3](./图像分割与图像分类/InceptionV2V3.md) | ||
[Inception4](./图像分割与图像分类/Inception4.md) | ||
[xception](./图像分割与图像分类/xception.md) | ||
|
||
|
||
 | ||
|
||
#### 轻量化网络设计 | ||
[MobileNetV1详解](./图像分割与图像分类/MobileNet-V1.md) | ||
[MobileNetV2详解](./图像分割与图像分类/MobileNet-V2.md) | ||
[MobileNetV3详解](./图像分割与图像分类/MobileNet-V3.md) | ||
[ShuffleNet-V1详解](./图像分割与图像分类/ShuffleNet-V1.md) | ||
[ShuffleNet-V2详解](./图像分割与图像分类/ShuffleNet-V2.md) | ||
|
||
#### 分割类 | ||
[Deep Lab v1~V3+](./图像分割与图像分类/DeepLab.md) | ||
[介绍下FCN与UNet](./图像分割与图像分类/fcn_unet.md) | ||
[空洞卷积](./图像分割与图像分类/空洞卷积.md) | ||
[语义分割loss汇总](./图像分割与图像分类/语义分割loss汇总.md) | ||
|
||
### 5. 目标检测与关键点检测篇 | ||
#### 目标检测 | ||
[说下NMS?](./目标检测与关键点检测/nms.md). | ||
[NMS及其优化](./目标检测与关键点检测/NMS及其优化.md) | ||
[yolov1梳理](./目标检测与关键点检测/yolov1.md) | ||
[yolov2梳理](./目标检测与关键点检测/yolov2.md) | ||
[yolov3梳理](./目标检测与关键点检测/yolov3.md) | ||
[yolov4_v5梳理](./目标检测与关键点检测/yolov4_v5.md) | ||
[Weighted_Boxes_Fusion](./目标检测与关键点检测/Weighted_Boxes_Fusion.md) | ||
**目前已有的交流群**: | ||
|
||
:speech_balloon:【AI技术/落地交流群】:如果你是技术控,欢迎添加我的微信,备注“**技术群**”。我可以拉你进入我们的技术分享群。日常交流科研/落地的想法与技术。 | ||
|
||
### 6. 手撕代码汇总 | ||
:speech_balloon:【上海有为青年群】:如果你在上海周边工作(长三角地区如江浙沪皖),无论行业,愿意分享你所闻、所知,可以加我微信,备注“**上海**”,我这边在维护一个“上海有为青年群”,打破信息壁垒,共享信息。 | ||
|
||
[全连接层前向与反向传播](https://mp.weixin.qq.com/s?__biz=MzkzNDIxMzE1NQ==&mid=2247488876&idx=1&sn=7566b562e7ec92c7b45686c6c1ece52c&chksm=c241f620f5367f36c85c85a91dc81c068d900961c0a65dc202373427b6b11b0459e828973eeb&token=2036211154&lang=zh_CN#rd) | ||
[Dropout前向与反向](https://mp.weixin.qq.com/s?__biz=MzkzNDIxMzE1NQ==&mid=2247488876&idx=1&sn=7566b562e7ec92c7b45686c6c1ece52c&chksm=c241f620f5367f36c85c85a91dc81c068d900961c0a65dc202373427b6b11b0459e828973eeb&token=2036211154&lang=zh_CN#rd) | ||
[激活函数之ReLu/Sigmoid/Tanh前向与反向传播](https://mp.weixin.qq.com/s?__biz=MzkzNDIxMzE1NQ==&mid=2247488876&idx=1&sn=7566b562e7ec92c7b45686c6c1ece52c&chksm=c241f620f5367f36c85c85a91dc81c068d900961c0a65dc202373427b6b11b0459e828973eeb&token=2036211154&lang=zh_CN#rd) | ||
[卷积层与池化层前向与反向传播](https://mp.weixin.qq.com/s?__biz=MzkzNDIxMzE1NQ==&mid=2247488876&idx=1&sn=7566b562e7ec92c7b45686c6c1ece52c&chksm=c241f620f5367f36c85c85a91dc81c068d900961c0a65dc202373427b6b11b0459e828973eeb&token=2036211154&lang=zh_CN#rd) | ||
[BatchNorm2d前向反向传播](https://mp.weixin.qq.com/s?__biz=MzkzNDIxMzE1NQ==&mid=2247488876&idx=1&sn=7566b562e7ec92c7b45686c6c1ece52c&chksm=c241f620f5367f36c85c85a91dc81c068d900961c0a65dc202373427b6b11b0459e828973eeb&token=2036211154&lang=zh_CN#rd) | ||
[Flatten层前向与反向传播](https://mp.weixin.qq.com/s?__biz=MzkzNDIxMzE1NQ==&mid=2247488876&idx=1&sn=7566b562e7ec92c7b45686c6c1ece52c&chksm=c241f620f5367f36c85c85a91dc81c068d900961c0a65dc202373427b6b11b0459e828973eeb&token=2036211154&lang=zh_CN#rd) | ||
[交叉熵损失函数前向与反向传播](https://mp.weixin.qq.com/s?__biz=MzkzNDIxMzE1NQ==&mid=2247488876&idx=1&sn=7566b562e7ec92c7b45686c6c1ece52c&chksm=c241f620f5367f36c85c85a91dc81c068d900961c0a65dc202373427b6b11b0459e828973eeb&token=2036211154&lang=zh_CN#rd) | ||
[优化器代码](https://mp.weixin.qq.com/s?__biz=MzkzNDIxMzE1NQ==&mid=2247488876&idx=1&sn=7566b562e7ec92c7b45686c6c1ece52c&chksm=c241f620f5367f36c85c85a91dc81c068d900961c0a65dc202373427b6b11b0459e828973eeb&token=2036211154&lang=zh_CN#rd) | ||
:speech_balloon:【其他区域交流群】:我们也在维护在校生的【**秋招/实习**】求职群,如果你是在校生,欢迎加我微信,备注“**校招生**”,我们会时刻分享互联网算法相关求职干货信息,如招聘信息,简历注意事项。 | ||
|
||
### 三. 如何写简历? | ||
|
||
[简历模板与写简历的套路总结](https://mp.weixin.qq.com/s?__biz=MzkzNDIxMzE1NQ==&mid=2247485095&idx=1&sn=b3fa4c5e87d2c883e4234a512b03f925&chksm=c241e5ebf5366cfd0e1e878d6f81cc441c39da645f53f470547a6e1ca8fad20d3de16f3055bb&token=507085599&lang=zh_CN#rd) | ||
|
||
### 四. 关于我 | ||
|
||
**复旦在读博士。前bat算法工程师,94年的奶爸。双非材料本科出身,零基础跨专业考研到985cs专业。目前主要以计算机视觉算法入门与真题面经分享为主,持续更新《百面计算机视觉第三版》** | ||
|
||
|
||
 | ||
|
||
## 五. 写在前面,信心很重要!(背景不好,还想做CV吗?) | ||
|
||
 | ||
|
||
我写了一篇公众号博文:[没文章,没背景,想做CV?那就按这个干!](https://mp.weixin.qq.com/s?__biz=MzkzNDIxMzE1NQ==&mid=2247485889&idx=1&sn=cc9e77174891a876264d087ba250c818&chksm=c241ea8df536639bb777b325bce49ef181d4ab2ea3f781b30ea964ae120e74f986ddbddbff0d&token=1223742475&lang=zh_CN#rd) | ||
|
||
其中我整理相对应的**视频课**与**电子书**的**学习路线资料**,百度网盘链接:[下载地址](https://pan.baidu.com/s/1kOfOAKEhHByD2f2BTNEYFQ),密码:g85m。**若地址失效,可以加我微信,我发给你就好~** | ||
|
||
|
||
|
||
**注:目前市场上的cv岗位还是比较稀缺的(一线城市为主),不一定说我们一定要在校招中进入头部的大厂,只要我们一直在炼丹,那么社招中,我们依然可以拿到不错的待遇!** | ||
|
||
 | ||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
## 六. 其它你需要看的资源 | ||
|
||
- [1. 简历模板与写简历的套路总结](https://mp.weixin.qq.com/s?__biz=MzkzNDIxMzE1NQ==&mid=2247485095&idx=1&sn=b3fa4c5e87d2c883e4234a512b03f925&chksm=c241e5ebf5366cfd0e1e878d6f81cc441c39da645f53f470547a6e1ca8fad20d3de16f3055bb&token=507085599&lang=zh_CN#rd) | ||
|
||
- [2. B站高质量免费课程,适合落地与科研,b站可搜索 “灿视讲堂”](https://space.bilibili.com/107817975) | ||
|
||
- **我们会将面经整理,一些工作感悟/建议等信息,首发于公众号"灿视学长"中,跟进的最新paper发布于公众号“集智书童”中,实战的项目放在知识星球中。** | ||
|
||
|
||
 | ||
|
||
|
||
|
||
|
||
|
||
## 特别感谢小伙伴们(排名不分先后): | ||
|
||
- **DarrenZhang** | ||
- **BJWang** | ||
- **小亦** | ||
- **心满** | ||
|
||
|
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
### 腾讯算法面试题汇总 | ||
|
||
- 手写SE Layer | ||
- 手写NMS | ||
- 手写IoU | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
### 阿里面试题汇总 | ||
|
||
- resnet结构为啥要这么设计 | ||
|
||
- relu 的优势 | ||
|
||
- 选择softmax的优势 | ||
|
||
- 常用哪些激活函数,leaky relu的优势 | ||
|
||
- 归一化的优点 | ||
|
||
- SE的过程 | ||
|
||
- 对传统机器学习有没有太了解(答之前在比赛,没咋复习,可能不是很熟悉) | ||
|
||
- 了解XGBD? | ||
|
||
- 了解XGboost? | ||
|
||
- yolo系列的发展史 | ||
|
||
- 对yolov4中的csp结构有无了解 | ||
|
||
- 想问logistic回归相关问题 | ||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
#### 1、说⼀下你理解的 C++ 中的四种智能指针 | ||
|
||
⾯试官你好,⾸先,说⼀下为什么要使⽤智能指针:智能指针其作⽤是管理⼀个指针,避免程序员申请的空间在函数结束时忘记释放,造成内存泄漏这种情况的发⽣。 | ||
|
||
然后使⽤智能指针可以很⼤程度上的避免这个问题,因为智能指针就是⼀个类,当超出了类的作⽤域是,类会⾃动调⽤析构函数,析构函数会⾃动释放资源。所以智能指针的作⽤原理就是在函数结束时⾃动释放内存空间,不需要⼿动释放内存空间。 | ||
|
||
#### 常用接口 | ||
|
||
``` | ||
T* get(); | ||
T& operator*(); | ||
T* operator->(); | ||
T& operator=(const T& val); | ||
T* release(); | ||
void reset (T* ptr = nullptr) | ||
``` | ||
|
||
T 是模板参数, 也就是传⼊的类型; | ||
|
||
get()⽤来获取 auto_ptr 封装在内部的指针, 也就是获取原⽣指针; | ||
|
||
operator()重载 , operator->()重载了->, operator=()重载了=; | ||
|
||
realease()将 auto_ptr封装在内部的指针置为nullptr, 但并不会破坏指针所指向的内容, 函数返回的是内部指针置空之前的值;直接释放封装的内部指针所指向的内存, 如果指定了 ptr 的值, 则将内部指针初始化为该值(否则将其设置为nullptr; | ||
|
||
#### 下面分别说⼀下哪四种: | ||
|
||
#### 1、 auto_ptr(C++98 的⽅案, C11 已抛弃)采⽤所有权模式。 | ||
|
||
auto_ptr<std::string> p1 (new string ("hello")); | ||
auto_ptr<std::string> p2; | ||
p2 = p1; //auto_ptr 不会报错 | ||
此时不会报错,p2剥夺了 p1 的所有权,但是当程序运⾏时访问 p1 将会报错。所以 auto_ptr的缺点是:存在潜在的内存崩溃问题! | ||
|
||
#### 2、 unique_ptr (替换 auto_ptr) | ||
|
||
unique_ptr 实现独占式拥有或严格拥有概念,保证同⼀时间内只有⼀个智能指针可以指向该象。它对于避免资源泄露特别有⽤。 | ||
|
||
采⽤所有权模式,还是上⾯那个例⼦ | ||
unique_ptr<string> p3 (new string (auto));//#4 | ||
unique_ptr<string> p4;//#5 | ||
p4 = p3;//此时会报错 | ||
编译器认为 p4=p3 ⾮法,避免了 p3 不再指向有效数据的问题。 | ||
因此, unique_ptr ⽐ auto_ptr 更安全。 | ||
|
||
#### 3、 shared_ptr(共享型,强引⽤) | ||
|
||
shared_ptr 实现共享式拥有概念,多个智能指针可以指向相同对象,该对象和其相关资源会在 “最后⼀个引⽤被销毁”时候释放。从名字share就可以看出了资源可以被多个指针共享,它使⽤计数机制来表明资源被⼏个指针共享。 | ||
|
||
可以通过成员函数 use_count() 来查看资源的所有者个数,除了可以通过 new 来构造,还可以通过传⼊auto_ptr, unique_ptr,weak_ptr来构造。当我们调⽤release()时,当前指针会释放资源所有权,计数减⼀。当计数等于 0 时,资源会被释放。 | ||
|
||
shared_ptr 是为了解决 auto_ptr 在对象所有权上的局限性 (auto_ptr 是独占的),在使⽤引⽤计数的机制上提供了可以共享所有权的智能指针。 | ||
|
||
#### 4、 weak_ptr (弱引⽤) | ||
|
||
weak_ptr 是⼀种不控制对象⽣命周期的智能指针,它指向⼀个 shared_ptr 管理的对象。进⾏ 该对象的内存管理的是那个强引⽤的 shared_ptr。 | ||
|
||
weak_ptr 只是提供了对管理对象的⼀个访问⼿段。weak_ptr设计的⽬的是为配合shared_ptr ⽽引⼊的⼀种智能指针来协助 shared_ptr ⼯作,它只可以从⼀个shared_ptr 或另⼀个 weak_ptr 对象构造, ,它的构造和析构不会引起引⽤记数的增加或减少。 | ||
|
||
weak_ptr 是⽤来解决 shared_ptr 相互引⽤时的死锁问题,如果说两个shared_ptr 相互引⽤,那么这两个指针的引⽤计数永远不可能下降为0,也就是资源永远不会释放。它是对对象的⼀种弱引⽤,不会增加对象的引⽤计数,和 shared_ptr 之间可以相互转化,shared_ptr可以直接赋值给它,它可以通过调⽤ lock 函数来获得shared_ptr。 | ||
当两个智能指针都是 shared_ptr 类型的时候,析构时两个资源引⽤计数会减⼀,但是两者引⽤计数还是为1,导致跳出函数时资源没有被释放(的析构函数没有被调⽤),解决办法:把 其中⼀个改为weak_ptr就可以。 |
Oops, something went wrong.