华为云暑期实习面试(软件算法)之解答

原帖:https://www.nowcoder.com/feed/main/detail/b6011f7ef29b419fb939c61e5738f634

3.除了提到的上采样还有什么方法可以应对数据不平衡:

4.YOLO每个版本的变化是什么:以前看过,随便讲了讲先验框和backbone的变化。

YOLO 意思是 You Only Look Once,创造性的将候选区和对象识别这两个阶段合二为一,看一眼图片(不用看两眼哦)就能知道有哪些对象以及它们的位置。YOLO 将图片划分为 7x7=49 个网格(grid),每个网格允许预测出 2 个边框(bounding box,包含某个对象的矩形框),总共 49x2=98 个 bounding box。可以理解为 98 个候选区,它们很粗略的覆盖了图片的整个区域。

创新点:1. 将整张图作为网络的输入,直接在输出层回归 bounding box 的位置和所属的类别。2. 速度快,one stage detection 的开山之作。

YOLOv2 相对 v1 版本,在继续保持处理速度的基础上,从预测更准确(Better),速度更快(Faster),识别对象更多(Stronger)这三个方面进行了改进。其中识别更多对象也就是扩展到能够检测 9000 种不同对象,称之为 YOLO9000。YOLOv2 主要就是加入了很多新技术,如 BN、WordTree,不再赘述。最主要的是引入了 Faster R-CNN 中使用的 **Anchor**,作者通过在所有训练图像的所有边界框上运行 k-means 聚类来选择锚的个数和形状(k = 5,因此它找到五个最常见的目标形状)

- Yolov3 backbone 部分由 Yolov2 时期的 Darknet-19 进化至 Darknet-53,加深了网络层数,引入了 Resnet 中的跨层加和操作。

- Yolov3 借鉴了金字塔特征图思想,小尺寸特征图用于检测大尺寸物体,而大尺寸特征图检测小尺寸物体。

- 针对 anchor box 采用聚类的方法获取合适的尺寸。

Yolov3 的整个网络,吸取了 Resnet、Densenet、FPN 的精髓,可以说是融合了目标检测当前业界最有效的全部技巧。

YOLOv4是YOLO系列目标检测算法的一次改进,相比于之前的版本,YOLOv4引入了许多改进点,包括:

  1. 骨干网络改进:YOLOv4采用了CSPDarknet53作为新的骨干网络,相比于之前的Darknet,CSPDarknet在准确性和速度上都有所提升。
  2. 特征金字塔网络:YOLOv4引入了特征金字塔网络(FPN),用于在不同尺度上提取特征并融合,使得算法可以更好地处理不同大小的目标。
  3. PANet结构:为了进一步增强多尺度特征的融合,YOLOv4引入了PANet结构,通过自顶向下和自底向上的方式进行特征融合,提升了目标检测的准确性。
  4. 更强的数据增强策略:YOLOv4采用了一系列更强大的数据增强策略,包括CutMix、Mosaic等,以增加模型的鲁棒性和泛化能力。
  5. 新的损失函数:YOLOv4使用了改进的损失函数,如CIoU损失函数和Focal损失函数,可以更好地处理目标的回归和分类问题,提高检测性能。

后续YOLO无非就是trick的堆叠,不再赘述。

5.除了yolo还有什么目标检测模型:rcnn那一类的,rcnn是两阶段,yolo是一阶段

目标检测可以分为两种类型:“两阶段(Two-stage)检测方法”和“单阶段(One-stage)检测方法”,前者将检测定义为“从粗到精”的过程,而后者将检测定义为“一步走”的过程。如**基于两阶段的SPPNet、Fast RCNN、Faster RCNN,这些算法首先生成图像中目标物体的建议候选区域,其次再对候选区域做进一步的分类和坐标框回归,得出最后的目标检测结果**;而基于单阶段的YOLO、SSD和RetinaNet等,**这些算法直接通过回归的方式进行图像中目标物体的检测**,即分类和回归同时进行。

两阶段检测精度高但速度慢;单阶段检测精度稍低但速度快,one-stage算法对小目标检测效果较差。

6.目标检测和分割的loss有什么区别:检测的loss是cls loss和bboxloss ,分割的loss不太清楚

在目标检测中,常用的损失函数包括:

  1. 边界框回归损失:用于预测目标边界框的位置和尺寸,常用的损失函数包括平均平方误差(MSE)损失或平滑L1损失。
  2. 分类损失:用于预测目标的类别,常用的损失函数包括交叉熵损失(Cross-Entropy)或者逻辑损失(Logistic Loss)。
  3. 目标置信度损失:用于判断目标是否存在,通常使用二分类损失函数,如交叉熵损失或者逻辑损失。

在分割任务中,常用的损失函数包括:

  1. 像素级分类损失:用于对每个像素进行分类,常用的损失函数是交叉熵损失或者softmax损失。
  2. 像素级回归损失:用于预测每个像素的特定属性,如目标的边界框或者关键点位置,常用的损失函数包括平均平方误差(MSE)损失或平滑L1损失。

总体而言,目标检测的损失函数更侧重于目标的定位和分类,而分割的损失函数则更注重像素级的分类和预测。

以上面经答案均来自本人机器学习面经专栏,感兴趣的同学可以关注牛客专栏 机器学习面试题汇总与解析+蒋豆芽

包含300多道面试题,讲解+答案。

#机器学习面试#
牛友面经解答 文章被收录于专栏

这个专栏专门用于为牛友解答面经,希望能帮助到大家。

全部评论
mark,请问怎么订阅
3 回复 分享
发布于 2023-06-11 17:16 陕西
内容挺全面的,支持
1 回复 分享
发布于 2023-06-12 07:50 陕西
支持
点赞 回复 分享
发布于 2023-06-15 13:08 陕西

相关推荐

02-07 12:06
已编辑
华侨大学 测试开发
最近看到很多 92 的,甚至是硕士,开始往测开赛道卷,说实话有点看不懂。先把话说清楚,大厂里的测开,绝大多数时间干的还是测试的活,只是写点自动化脚本、维护测试平台、接接流水线,真正像开发一样做系统、做架构、做核心平台的测开少得可怜,基本都集中在核心提效组,而且人很少,外面进去的大概率轮不到你,我想真正干过人都清楚。很多人被洗脑了,以为测开也是开,和后端差不多,只是更简单、更轻松、还高薪。现实情况是,测开和开发的职业路径完全不一样。开发的核心是业务和系统能力,测开的核心是稳定性和覆盖率,前者是往上走,后者天花板非常明显。你可以见到很多开发转测开,但你很少见到干了几年测开还能顺利转回开发的。更现实一点说,92 的高学历如果拿来做测开,大部分时间就是在做重复性很强的杂活,这种工作对个人能力的放大效应非常弱。三年下来,你和一个双非的,甚至本科的测开差距不会太大,但你和同龄的后端、平台开发差距会非常明显。这不是努不努力的问题,是赛道问题。所谓测开简单高薪,本质上是把极少数核心测开的上限,当成了整个岗位的常态来宣传。那些工资高、技术强的测开,本身就是开发水平,只是挂了个测开的名。普通人进去,99% 做的都是项目兜底型工作,而不是你想象中的平台开发。测开不是不能做,但它绝对不是开发的平替,也不是性价比最优解。如果你是真的不想做开发,追求稳定,那测开没问题。但如果你只是觉得测开比后端容易,还能进大厂,那我劝你冷静一点,这只是在用短期安全感换长期天花板。有92的学历,如果你连测开这些重复性工作都能心甘情愿接受,那你把时间精力用在真正的开发、系统、业务深度上,回报大概率比卷测开要高得多。想清楚再下场,别被岗位名和话术带偏了,就算去个前端客户端也是随便占坑的,测开是一个坑位很少赛道,反而大面积学历下放,不用想也能知道会是什么结果,我想各位在JAVA那里已经看到了
小浪_Coding:工作只是谋生的手段 而不是相互比较和歧视
点赞 评论 收藏
分享
评论
5
19
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务