一、导读
This is the official PyTorch implementation of RegionCLIP (CVPR 2022).
我们提出 RegionCLIP,它显著扩展了 CLIP 以学习区域级视觉表示。 RegionCLIP 支持图像区域和文本概念之间的细粒度对齐,从而支持基于区域的推理任务,包括零样本对象检测和开放词汇对象检测。
预训练:我们利用 CLIP 模型将图像区域与模板标题进行匹配,然后预训练我们的模型以对齐这些区域-文本对。
零样本推理:经过预训练后,学习到的区域表示支持用于对象检测的零样本推理。
学习到的 RegionCLIP 模型可以通过附加的对象检测注释进行进一步微调,从而使我们的模型能够用于完全监督或开放词汇对象检测。
我们的方法展示了零样本目标检测和开放词汇目标检测的最先进结果。
二、环境部署
下一步,下载RegionCLIP文件,下载地址作者已经给出:
https://github.com/microsoft/RegionCLIP.git
完成RegionCLIP文件的下载后,便需要配置RegionCLIP进行zero-shot推理的环境配置以及所需要的配置文件。
然后进行环境配置:
!python -m pip install -e RegionCLIP
安装其他所需的文件:
!pip install opencv-python timm diffdist h5py sklearn ftfy
!pip install git+https://github.com/lvis-dataset/lvis-api.git
三、权重文件配置
首先需要下载一个pretrained_ckpt文件夹下到RegionCLIP文件夹下:
文件夹的地址为:
https://drive.google.com/drive/folders/1hzrJBvcCrahoRcqJRqzkIGFO_HUSJIii
由于共享的文件夹不是pretrained_ckpt名称,所以将其重命名为pretrained_ckpt即可。
四、数据集的配置
还需要一个lvis验证集的label数据集,这个直接去官网下载即可,不是很大,官网地址:
注意的是,要选择路径”RegionCLIP””datasets”后再点击新建,把文件夹上传到RegionCLIP/datasets下,并且文件夹名为lvis:
至此,你已经完成好了RegionCLIP的zero-shot测试的相关文件配置,下面要做的就是running code啦。
具体的一些配置如下:
五、代码执行
记得先切换到对应的目录下:
执行如下代码:
python ./tools/train_net.py \
--eval-only \
--num-gpus 1 \
--config-file ./configs/LVISv1-InstanceSegmentation/CLIP_fast_rcnn_R_50_C4_custom_img.yaml \
MODEL.WEIGHTS ./pretrained_ckpt/regionclip/regionclip_pretrained-cc_rn50x4.pth \
MODEL.CLIP.TEXT_EMB_PATH ./pretrained_ckpt/concept_emb/lvis_1203_cls_emb_rn50x4.pth \
MODEL.CLIP.OFFLINE_RPN_CONFIG ./configs/LVISv1-InstanceSegmentation/mask_rcnn_R_50_FPN_1x.yaml \
MODEL.CLIP.TEXT_EMB_DIM 640 \
MODEL.RESNETS.DEPTH 200 \
MODEL.ROI_BOX_HEAD.POOLER_RESOLUTION 18 \
运行结果如下:
然后会在RegionCLIP目录生成一个“output/inference/lvis_instances_results.json"文件夹:
为了可视化最后的zero-shot测试结果,执行如下代码:
python ./tools/visualize_json_results.py \
--input ./output/inference/lvis_instances_results.json \
--output ./output/regions \
--dataset lvis_v1_val_custom_img \
--conf-threshold 0.05 \
--show-unique-boxes \
--max-boxes 25 \
--small-region-px 8100\
然后找到根据路径RegionCLIP/output/regions找到对应的测试结果图片:
结果展示如下:
从测试结果可以看出,RegionCLIP的zero-shot推理主要集中在未知类别的目标检测,也就是说对于一些常见的类别如person、book、cup等,RegionCLIP的zero-shot就不进行定位和识别,只是检测少见的类,也就是一般数据集如coco里面没有的类别,比如第一张图片里的pantyose(连裤袜,这里识别错了)、kimono(和服)、以及第二张图片里的shopping_cart、short_pants、deck_chair等这些类别在常见的数据集是没有标记的,只是一些关于图片的描述中可能会出现的,也就是image-caption数据集中才会有的。