detectron2框架解析
(大概率要tj的博客)
0. 简介
detectron2是Facebook的下一代开源框架,基于pytorch,是fast rcnn benchmark的下一任继承者,FAIR基于此实现了大量的目标检测的SOTA算法,并且现在仍然在更新。官方给出的model zoo里同样包含了很多的算法,这是开箱即用的。此外也有大量的新的算法是基于detectron2实现的,例如CenterMask,Sparse RCNN等。
框架已经开源,地址在这里: detectron2的地址
具体的安装过程参考官方即可,依赖的东西很少,不再赘述。
1. 从demo开始管中窥豹
1.1 开始使用
在安装好以后,官方提供了两种方式使用detectron2
,第一种是API接口的方式,具体使用可以参考官方教程里colab
上的步骤;第二种方法是在命令行内使用demo.py
进行预测,本文主要从第二种方式入手,分析detectron2的调用过程,以此来简要解析代码框架。
官方给出的调用demo.py
的命令为
cd demo/
python demo.py --config-file ../configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml \
--input input1.jpg input2.jpg \
[--other-options]
--opts MODEL.WEIGHTS detectron2://COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl
参数--config
后面跟着的是网络的配置文件,也就是存储网络结构的文件存放的位置,--input
指定输入图片,[--other-options]
是其他选项的意思,这里只是示意,实际的使用是参考后面的格式,--opts
指定了选项,这里指定了权重的位置,实际上如果不指定的话,demo会在远处下载。
在使用的时候,我遇到了线程问题,不知道是cuda的原因还是torch的问题(个人倾向于框架的代码原因)。
1.2 demo.py代码解析
1.2.1 结构解析
demo.py
的大致结构如下:
# 有删减,还有一些其余包的导入
from detectron2.config import get_cfg
from detectron2.data.detection_utils import read_image
from detectron2.utils.logger import setup_logger
from predictor import VisualizationDemo
# constants
WINDOW_NAME = "COCO detections"
def setup_cfg(args):
cfg = get_cfg()
#有删减
return cfg
def get_parser():
parser = argparse.ArgumentParser(description="Detectron2 demo for builtin configs")
#有删减
return parser
if __name__ == "__main__":
#有删减
args = get_parser().parse_args()
#···
cfg = setup_cfg(args)
demo = VisualizationDemo(cfg)
#···
if args.input:
#···
elif args.webcam:
#···
elif args.video_input:
#···
首先我们从main
函数入手,在这个模块被当作主函数调用的时候,它的简要步骤如下: