从零开始的RVOS: Referring Video Object Segmentation

最近新接触到一个与VOS相关的任务,叫做Referring VOS,该任务基于文本描述对视频中特定目标进行分割,是一个新兴的跨模态CV任务。

数据集

1.静态推断图像分割数据集
虽然RVOS是视频任务,但根据以往的经验和相关文章的方法,可以使用静态推断图像分割数据集进行模型的预训练。可用数据集包括:RefCOCO、RefCOCO+、A2D。
2.视频推断数据集
现有的视频推断数据集都是直接从向已有的VOS数据集中加入文本描述标签得到的。
包括:Refer-DAVIS17和Refer-Youtube-VOS数据集
Refer-Youtube-VOS有3471个视频,每个视频有一个或多个目标,每个目标每帧有两个文本描述。

现有方法

  1. [1] 中提出了最早的RVOS方法LRE。该方法分为两阶段: 第一阶段基于文本描述进行目标bbox定位,第二阶段将原RGB图像+bbox预测图+光流图连接成5通道输入,然后用分割网络进行分割。
    在这里插入图片描述
  2. [2] 中构造并开开源了大规模的Refer-Youtube-VOS数据集,并提出了URVOS方法,该方法以STMN方法为基本框架,将文本描述特征作为额外的注意力引入解码过程辅助封。在Refer-DAVIS17和Refer-Youtube-VOS上都达到了很高的精度。是一个很强的baseline。
    在这里插入图片描述
  3. [3] 使用Deplabv3作为图像视觉编码器,用BERT作为文本编码器,通过简单粗暴的相乘得到跨模态特征,然后解码得到分割结果。在不使用Refer-Youtube-VOS训练的前提下在Refer-DAVIS17上精度超过了URVOS
    在这里插入图片描述

RefVOS方法复现

根据github上的说明尝试跑一跑RefVOS(https://github.com/miriambellver/refvos)。
准备工作:
(1)下载预训练的BERT模型和配置文件,refcoco、refcoco+、refcocog数据集(主要是包含文本信息的.p文件和.json文件,图像文件与原始COCO相同)
(2)
基于已有镜像开一个虚拟环境Env1

virtualenv --system-site-packages Env1

然后进入虚拟环境,安装任务需要的包

cd your_path
source Env1/bin/activate
pip install transformer
pip install tensorflow

执行程序

python train.py --dataset refcoco  --model_id model_pretrained_bert --ck_bert /gdata1/linfc/Ref-COCO/pretrained_wights/checkpoints_bert/bert_pretrained_refcoco --refer_data_root=/gdata1/linfc/Ref-COCO

(1)由于集群受暂时写缓存权限,出现报错1

  File "/ghome/linfc/my_RVOS/RefVOS/data/dataset_refer_bert.py", line 52, in __init__
    self.tokenizer = transformers.BertTokenizer.from_pretrained(args.bert_tokenizer)
  File "/ghome/linfc/Env1/lib/python3.6/site-packages/transformers/tokenization_utils_base.py", line 1670, in from_pretrained
    user_agent=user_agent,
  File "/ghome/linfc/Env1/lib/python3.6/site-packages/transformers/file_utils.py", line 1173, in cached_path
    local_files_only=local_files_only,
  File "/ghome/linfc/Env1/lib/python3.6/site-packages/transformers/file_utils.py", line 1320, in get_from_cache
    os.makedirs(cache_dir, exist_ok=True)
  File "/usr/lib/python3.6/os.py", line 210, in makedirs
    makedirs(head, mode, exist_ok)
  File "/usr/lib/python3.6/os.py", line 210, in makedirs
    makedirs(head, mode, exist_ok)
  File "/usr/lib/python3.6/os.py", line 220, in makedirs
    mkdir(name, mode)
PermissionError: [Errno 13] Permission denied: '/.cache'

解决方法:
在file_utils.py文件第1320行修改默认缓存地址:
cache_dir = r’/gdata1/linfc/Ref-COCO/cache’

(2)报错2

Traceback (most recent call last):
  File "train.py", line 467, in <module>
    main(args)
  File "train.py", line 315, in main
    bert_model = model_class.from_pretrained(args.ck_bert)
  File "/ghome/linfc/Env1/lib/python3.6/site-packages/transformers/modeling_utils.py", line 988, in from_pretrained
    **kwargs,
  File "/ghome/linfc/Env1/lib/python3.6/site-packages/transformers/configuration_utils.py", line 401, in from_pretrained
    config_dict, kwargs = cls.get_config_dict(pretrained_model_name_or_path, **kwargs)
  File "/ghome/linfc/Env1/lib/python3.6/site-packages/transformers/configuration_utils.py", line 478, in get_config_dict
    raise EnvironmentError(msg)
OSError: Can't load config for '/gdata1/linfc/Ref-COCO/pretrained_wights/checkpoints_bert/bert_pretrained_refcoco'. 

检查代码,发现是缺少config文件。检查数据集,发现在/gdata1/linfc/Ref-COCO/pretrained_wights/checkpoints_bert中对下载的预训练模型bert_pretrained_refcoco.zip没有解压。解压后得到文件夹bert_pretrained_refcoco,内含pytorch_model.bin和config.json两个文件。

(3)报错3

Traceback (most recent call last):
  File "train.py", line 467, in <module>
    main(args)
  File "train.py", line 395, in main
    logger_train = Logger(os.path.join(model_dir, 'train'))
  File "/ghome/linfc/my_RVOS/RefVOS/logger.py", line 17, in __init__
    self.writer = tf.summary.FileWriter(log_dir)
AttributeError: module 'tensorboard.summary._tf.summary' has no attribute 'FileWriter'

临时装的tensorflow版本不对,根据https://blog.csdn.net/u010556156/article/details/103320010的做法,将tf.summary.FileWriter(log_dir)换成tf.summary.create_file_writer(log_dir),解决问题。

(4)报错4

  File "/ghome/linfc/my_RVOS/RefVOS/data/dataset_refer_bert.py", line 95, in __getitem__
    img = Image.open(os.path.join(self.refer.IMAGE_DIR, this_img['file_name'])).convert("RGB")
  File "/usr/local/lib/python3.6/dist-packages/PIL/Image.py", line 2878, in open
    fp = builtins.open(filename, "rb")
FileNotFoundError: [Errno 2] No such file or directory: '/gdata1/linfc/Ref-COCO/images/mscoco/images/train2014/COCO_train2014_000000289583.jpg'

(1)由于coco实际路径与默认设置不同,在refer.py中,将第51行的
self.IMAGE_DIR = osp.join(data_root, ‘images/mscoco/images/train2014’)
改为实际路径
self.IMAGE_DIR = r’/gpub/coco/train2017’
(2)由于集群只提供了COCO的2017版数据集,这里将默认文件名中‘COCO_train2014_’去掉。
在dataset_refer_bert.py中,在将95行
this_img[‘file_name’]
改为
this_img[‘file_name’].replace(‘COCO_train2014_’, ‘’)

(5)报错5

RuntimeError: CUDA out of memory. Tried to allocate 170.00 MiB (GPU 0; 10.92 GiB total capacity; 9.86 GiB already allocated; 71.00 MiB free; 407.70 MiB cached)

在11G显存的1080Ti上,即使batchsize设为1也仍然显存不够。查看原github说明:
在这里插入图片描述
看来是需要V100显卡才能有足够显存运行,不知道这里的V100是16G显存还是32G显存的版本
目前没有可用的V100显卡。。
So, 从零开始的RVOS: 从开始到放弃?

References:
[1] 2018_ACCV_Video Object Segmentation with Language Referring Expressions
[2] 2020_ECCV_URVOS_Unified Referring Video Object Segmentation Network with a Large-Scale Benchmark
[3] 2020_arxiv_RefVOS: A Closer Look at Referring Expressions for Video Object Segmentation

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值