Faster RCNN
目录
Girshick R. Fast R-CNN. In IEEE International Conference on Computer Vision (ICCV), 2015.
最近看了看目标检测的论文和Pytorch的官方代码, 其中所用到的技巧和代码量实在是过于庞大了, 我严重怀疑我之后能否顺利回忆起这部分的流程, 故而做下面一个简单的梳理.
- 输入: 列表形式的图片和目标(boxes, labels, area, image_id, iscrowd);
- 经过transform转换:
- normalize: ;
- resize: 使得图片具有相近的宽高比, 同时将boxes也作相应的放缩;
- pad: 将图片嵌入到同样大小的'图片'中;
- 于是得到;
- 经过普通的encoder, 如resnet50得到其不同的stage的特征:
- 经过FPN处理:
- 首先通过的卷积核将不同的变成同样的(如256);
- 通过插值扩大为其两倍得到:
类似地- 均经过的卷积核得到新的特征;
- 通过一个extra block (通常是池化层)作用于得到;
- 最终的features:
- 通过Anchor生成器生成proposal boxes:
- 对于分别生成area为, 以及宽高比为的三类初始anchors, 即每个level的特征有种不同比例的anchors(其各自的初始面积是不同的);
- 将上述的初始anchors扩展至每个location, 即变换中心, 则每个level共有个anchors(单个图片);
- 通过RPN head 计算特征为目标的概率(二分类)以及每个anchors的偏移量:
- 通过[3, 1, 1]的卷积核对进行预处理;
- 通过[1, 1, 0]的卷积核得到形为的logits;
- 通过[1, 1, 0]的卷积核得到形为的;
- RPN:
- 通过
得到proposals (注意这里表示中心, 且proposals与下面的损失无关, 用于后续的部分);
2. 对生成的proposals进行删选: 保留高置信度的, 删除过小的proposals, 进行非极大值抑制等;
3. 为每个Anchors匹配合适的ground truth boxes, 并通过下式计算真实的:- 采样一批 (保证正例和负例有合适的比例);
- 计算与logits有关的二分类损失和之间的回归损失(smmoth_l1_loss);
- 为上一步提取的proposals进行打上类别标签(0表示背景), 采样一批样本, 即:
- proposals: List[Tensor], ;
- labels: List[Tensor], ;
- regression_deltas: List[Tensor], ;
- 将proposal所对应的区域的特征提炼为的特征(比如常见的), 这是roi pooling (或者更精准的roi align的工作), 故共的特征;
- 这些特征经过双层的MLP提炼, 在经过预测器进行分类得到:
- logits: Tensor, ;
- : ;
- 如果是训练, 则和RPN类似可以得到两个损失(分类损失和回归损失);
- 如果是推理, 则:
- 得到预测的bounding boxes;
- 得到相应的置信度;
- 对bounding boxes进行一些处理(舍去背景, 低置信度等);
- 非极大值抑制处理
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix