前言
因为后面或多或少还要进行检测的工作,归根到底这里还是迈不过的一道坎,这次videonet比赛正好也稍微锻炼过,于是打算基于facebook整理的maskrcnn-benchmark来做。主要是参考
MaskrcnnBenchmark 源码解析-模型定义(modeling)之RPN网络
深度学习: RPN (区域候选网络)
进行理解。
环境搭配
安装官网给出的install.md安装教程进行,经本机测试pytorch1.1及cuda9.0可以完美运行,官方建议的1.0实际上是当时在开发中的1.1版本。现pytorch版本已更新至1.2版本,目前1.3版本在开发中。(1.2版本开始起只支持cuda9.2以上的接口需注意)
一些细节
Mask R-CNN 的作者提出了一种方法 ROIAlign,在特征图的不同点采样,并应用双线性插值。
Roi:特征图上的每一个RoI都由一个四元组(r,c,h,w)表示,其中(r,c)表示左上角,而(h,w)则代表高度和宽度。RoI 最大池化将每个候选区域均匀分成 H × W 块,每块是将 h×w RoI窗口划分为 h / H × w /W的子窗口网格,然后将每个子窗口中的值max pooling到相应的输出网格单元。从而将特征图上大小不一的RoI区域转化成固定大小的 H*W 的特征图,送入下一层。(在maskrcnn里)
NMS: 使用极大概率的候选框抑制其它位置相近的候选框。如果有两个框重叠的部分比较多,就把概率低的剔除掉。
a.从最大概率矩形框F开始,分别判断A~E与F的重叠度IOU是否大于某个设定的阈值
b.假设B、D与F的重叠度超过阈值,那么就扔掉B、D;并标记第一个矩形框F,保留下来
c.从剩下的矩形框A、C、E中,选择概率最大的E,然后判断E与A、C的重叠度,重叠度大于一定的阈值,那么就扔掉;并标记E是保留下来的第二个矩形框
d.一直重复这个过程,直到所有被保留下来的候选框(有可能存在同一类别的多个目标)
RetinaNet:和yolo一样属于单阶段的暴力递归网络,精度却又比yolo要高很多。