[toc]
一、开篇矫情一下
2020年的时候有过一个关于实例分割的想法,一开始还想着做实验验证一下这个想法是否可行,但是自己没有服务器,兜里也没几个钱可以租服务器了,一个人孤军奋战,每一步都走得挺艰难的,而且觉得自己像是个民科,慢慢地就没了热情,后来也就不了了之。
读研后偶尔也会想起这个事,我想,还是记录一下吧,当作回忆或者分享都可以。
二、Yet-Another Curve GCN (YACG)
2.1 算法Overview
整个算法的pipeline可拆分成如下部分:
- 物体边缘的角点(拐点)检测;
- 基于角点检测结果,提取角点坐标信息和角点处特征信息,构建节点向量;
- 以某种策略(如k最近邻)连接节点,构建出一个图;
- 应用图卷积网络,预测节点的精确位置,节点之间的边是否连接以及边的属性值(如曲线的参数);
- 应用图遍历算法,得到单个实例;
- 应用图卷积网络,构建更高层语义信息。
2.2 角点检测
目标物体可以通过其外轮廓进行建模。这里,角点指的是目标物体轮廓曲线中变化较大的点(如曲率较大的点,导数不连续的点等)。可以通过一个主干网络预测整张图片中所有物体的角点,对于网络输出的Feature Map,其中每一个Grid若包含角点,则设置训练标签为1
,否则为0
。对于目标物体尺度不一致的问题,可以使用FPN之类的方法进行解决。
2.2 构建节点向量
根据角点检测结果,保留预测结果为1
的Grid,将Grid的特征向量与Grid的坐标进行拼接,作为节点的特征向量。
2.3 构建图
以某种策略连接节点,最简单的可以是k最近邻连接(假设位置接近的角点大概率属于同一个物体)。连接两个角点的边编码了物体轮廓的分段形状信息。
2.4 应用图卷积网络
由于稠密图中的节点坐标不是目标物体的精确坐标,且图中存在无效连接(跨物体的角点),需要做进一步的处理。
应用图卷积神经网络,对每个节点预测其精确坐标,对于每条边,预测其有效性(是否保留连接)以及分段曲线参数。对于分段曲线,可以选择贝塞尔曲线,B样条曲线,但我找到一种可能是更加合适的曲线:X-splines。
2.5 应用图遍历算法
应用经典的图遍历算法,分离不同的目标物体。
2.6 构建更高层语义
基于分离的目标物体,可以进一步构建图,预测其物体信息以及物体之间的附属关系(如预测带有空洞的物体)等。
2.7 具体实现的探索
在具体实现的时候,可以有不同的尝试,如:
- 可以获取整张图片的特征信息,输入到图卷积网络中;
- 可以将两个角点之间的信息经过插值输入到图卷积网络中作为边的初始特征;
- ……
2.8 算法的局限性
角点重合
FPN或许可以部分解决Grid中存在多个角点的问题,或许可以引入anchor机制,但是不是特别优雅。
k最近邻连接可能不能保证同个物体的所有角点聚集到一起
对于aspect ratio很大的物体,k最近邻连接策略可能失效,FPN或许可以缓解该问题,但是确实不优雅。
最终的图无法形成独立的环
需要额外的处理?能不能在一开始就保证其拓扑结构?比如通过预测物体中心点与一个参数未定的环,后续不断修正该环的参数逼近物体的轮廓(使用循环卷积?)
……
2.9 算法名字的由来
因为用了曲线建模物体的轮廓,并且还使用了GCN进行预测,将算法命名为Curve GCN也就是自然而然的事了。然而Curve-GCN已经被用了,那就叫做Yet-Another Curve GCN吧。