guanghuixu / AnchorCaptioner

Other
32 stars 10 forks source link

imdb_files和MMF中提供的imdb文件的相关问题 #12

Closed Caroline0728 closed 2 years ago

Caroline0728 commented 2 years ago

您好,再次打扰,最近在运行基础的mmf代码中的m4c-captioner模型,我发现配置文件中mmf代码中的imdb_files使用的是--imdb/m4c_textcaps/imdb_train.npy,而您代码中的Imdb文件都加上了global的字样,如: - imdb/m4c_textcaps/imdb_train_global_rule.npy,请问是否不一样呢,还是您再这些文件中做了些处理?谢谢~期待您的回复

guanghuixu commented 2 years ago

两者不一样。我们的方法会构建anchor_graph,相比单纯的text-captioning任务,我们还需要anchor_graph的监督信号。在imdb_train_global_rule.npy中,我们是简单统计了所有人工标注的图片描述中出现的text文本。PS:这一步如果能引入人工纠正应该能进一步提升性能,但需要耗费人力。 https://github.com/guanghuixu/AnchorCaptioner/blob/main/pythia/modules/losses.py#L574

Caroline0728 commented 2 years ago

非常感谢您及时的回复!您的意思是对这部分进行了处理是吗?我想请教的是怎么对原始数据集生成Imdb文件的,您之前跟我说imdb文件包含images的caption等信息。请问这个是需要下载然后再转换吗?针对这里我还不是很清晰...是下面红色框选中的tokens的json文件转换的吗? image

guanghuixu commented 2 years ago

不用这么复杂,基于imdb_train.npy来生成就好了,只是添加个anchor_score的键值而已。 对一张图片的所有描述,比如5条中,有3条提到了文字“A”,其余2条提到“B-C“... 那anchor_score中"A"的得分是3,"B"是2,”C“是2 在实际算loss的时候做一下归一化,我们认为”A“是最重要的anchor,因为它出现的次数最多

Caroline0728 commented 2 years ago

从imdb_train.npy中,将所有人工标注的图片描述中出现的text文本统计出得到imdb_train_global_rule.npy,有相关代码嘛?因为我现在对文字特征提取部分加入了文本检测和识别的算法生成了imdb..npy的格式,加入到您的算法中,效果并不明显。我想我可能是因为没有考虑到您这里将人工标注的图片描述中出现的text文本统计出来这个步骤,所以想请问您这步是怎么在里面添加个anchor_score的键值的?在此感谢您的回复...

guanghuixu commented 2 years ago

这个代码并不复杂,只是个遍历的数据预处理。OCRs:图片中所有识别出来的文字;captions:对应图片的所有描述 伪代码如下: for orc in OCRs: for cap in captions: if ocr in cap: score+=1

此外,如果目前构建anchor_score有困难,但又想快速验证新加入的文本检测/识别算法的性能,也可以用原始imdb_train.npy跑M4C看看,如果在M4C上有效也能说明方法的作用。M4C是text-captioning任务的baseline,不需要anchor_score,

Caroline0728 commented 2 years ago

谢谢您的回复,我已经在M4C基础模型上验证了该方法的有效性。在其他的问题创建中看到你的硬件环境,我使用我的硬件跑出来跟您的实验数据差了很多,不知是否是在参数调整还是环境方面对其结果有所影响...

guanghuixu commented 2 years ago

config里面写的就是最佳参数,环境一般也不会有大的影响。可以从以下两个方面对问题进行定位:

  1. 请问使用imdb_train_global_rule.npy+原始的OCR特征(本来TextCap challenge提供的),能否复现论文中的结果?
  2. 如果情况1能复现,那就是新的OCR识别结果跟anchor_score不配套导致的,比如一张图片,原始OCR识别结果的排序是ABC,而你新的OCR识别结果是BAC,那就会导致anchor_score对应出错(虽然看起来能跑)
  3. 如果情况1不能复现,麻烦告知我,我重新检查下代码。代码上传前,我特地在新机器验证过,使用config设置基本都能直接复现结果才对
Caroline0728 commented 2 years ago

是情况1不能复现,而且我实验出来的结果对比您的结果差了很多,现在也在思考是什么问题,以下是我的实验结果..我没有使用并行训练模型,这是否有影响? image

guanghuixu commented 2 years ago

默认是开4卡,不开并行的话batch size相当于变小了,config中的参数可能就不适用了

Caroline0728 commented 2 years ago

m4c_captioner.yml文件中只使用了 - imdb/m4c_textcaps/imdb_train_global_rule.npy没有+原始的OCR特征,请问这里是否正确?那可能是我的batch size过小了,单卡且我batch size设置的太小了

guanghuixu commented 2 years ago

batch size太小,梯度更新方向不准模型比较难训练。 我重新看了下config的参数,总的batch_size是128,并行应该只是加速,不是前面说的128*4的情况。你尽量把batch size调大看看 image 不太确定你第一句话的问题,猜测回复: OCR特征是图片上面的红框部分,`xxx_global_rule.npy中anchore_score的顺序跟OCR特征的顺序是一致的,如果你换了上面的特征,下面就需要重新生成

Caroline0728 commented 2 years ago

可能是batchsize过小,梯度方向不正确的问题,非常感谢您的回复,我再实验试试~

guanghuixu commented 2 years ago

你使用很小的batch size能复现M4C的结果,但是复现不了我们论文的? (看来我们的方法不够稳定……

Caroline0728 commented 2 years ago

是的,因为我的服务器显存不够,我设置的batchsize只有4,但是复现M4C结果(原始代码)相差较少,但是您的代码复现相差较多,所以我也想是不是哪里出了问题...

Caroline0728 commented 2 years ago

您好,还有一个问题想请教您,对于您论文中的每一个中心图可以对应一个描述语句,从而更加详细的生成多条描述语句,请问这里在哪里实现的?目前生成的也是一条描述语句

guanghuixu commented 2 years ago

不要只取anchor_graph得分最高的,一个graph对应一条描述,你选不同的graph就能得到不同的描述

------------------ 原始邮件 ------------------ 发件人: @.>; 发送时间: 2022年4月18日(星期一) 下午4:30 收件人: @.>; 抄送: @.>; @.>; 主题: Re: [guanghuixu/AnchorCaptioner] imdb_files和MMF中提供的imdb文件的相关问题 (Issue #12)

您好,还有一个问题想请教您,对于您论文中的每一个中心图可以对应一个描述语句,从而更加详细的生成多条描述语句,请问这里在哪里实现的?目前生成的也是一条描述语句

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

qiu19960521 commented 2 years ago

这个代码并不复杂,只是个遍历的数据预处理。OCRs:图片中所有识别出来的文字;captions:对应图片的所有描述 伪代码如下: for orc in OCRs: for cap in captions: if ocr in cap: score+=1

此外,如果目前构建anchor_score有困难,但又想快速验证新加入的文本检测/识别算法的性能,也可以用原始imdb_train.npy跑M4C看看,如果在M4C上有效也能说明方法的作用。M4C是text-captioning任务的baseline,不需要anchor_score,

你好,我最近也再复现您的代码,遇到了相似的问题,请问你这里说的anchor_score如何生成的?

qiu19960521 commented 2 years ago

这个代码并不复杂,只是个遍历的数据预处理。OCRs:图片中所有识别出来的文字;captions:对应图片的所有描述 伪代码如下: for orc in OCRs: for cap in captions: if ocr in cap: score+=1 此外,如果目前构建anchor_score有困难,但又想快速验证新加入的文本检测/识别算法的性能,也可以用原始imdb_train.npy跑M4C看看,如果在M4C上有效也能说明方法的作用。M4C是text-captioning任务的baseline,不需要anchor_score,

你好,我最近也再复现您的代码,遇到了相似的问题,请问你这里说的anchor_score如何生成的?

原始:'imdb_train.npy' dict_keys(['image_id', 'image_classes', 'flickr_original_url', 'flickr_300k_url', 'image_width', 'image_height', 'set_name', 'image_name', 'image_path', 'feature_path', 'ocr_tokens', 'ocr_info', 'ocr_normalized_boxes', 'obj_normalized_boxes', 'caption_id', 'caption_str', 'caption_tokens', 'reference_strs', 'reference_tokens'])

您处理后的:'imdb_train_global_rule.npy' dict_keys(['image_id', 'image_classes', 'flickr_original_url', 'flickr_300k_url', 'image_width', 'image_height', 'set_name', 'image_name', 'image_path', 'feature_path', 'ocr_tokens', 'ocr_info', 'ocr_normalized_boxes', 'obj_normalized_boxes', 'caption_id', 'caption_str', 'caption_tokens', 'reference_strs', 'reference_tokens', 'anchor_score', 'ocr_edge', 'ocr_global'])

多了'anchor_score', 'ocr_edge', 'ocr_global'三个键值 我将该文件的第一个样例打印,结果如下: 'ocr_tokens': ['Angel', 'Square', 'LONDON', 'HARRIS', 'THOMPSON', 'EST.', '1949'] 'caption_str': 'The time is now 10:22 according to this clock.' 'caption_tokens': ['', 'the', 'time', 'is', 'now', '10', ':', '22', 'according', 'to', 'this', 'clock', ''] 'reference_tokens': [['', 'the', 'time', 'is', 'now', '10', ':', '22', 'according', 'to', 'this', 'clock', ''], ['', 'a', 'large', 'clock', 'by', 'harris', 'and', 'thompson', 'displays', 'a', 'time', 'of', '10', ':', '22', ''], ['', 'large', 'roman', 'numeral', 'clock', 'by', 'angel', 'square', 'london', ''], ['', 'clock', 'with', 'roman', 'numeral', 'numbers', 'which', 'say', '"', 'angel', 'square', '"', 'on', 'the', 'front', ''], ['', 'a', 'clock', 'says', 'angel', 'square', 'london', 'on', 'its', 'face', '']]} 'anchor_score': array([0.28571429, 0.28571429, 0.14285714, 0.14285714, 0.14285714, 0., 0. ]), 'ocr_edge': 'ocr_global': [[62, 63, 76, 77], [77, 78], [76, 77, 78, 90, 91, 92], [118, 119], [119, 120], [118, 119, 132, 133], [119, 120, 133, 134]]} 请问生成'anchor_score', 'ocr_edge', 'ocr_global'键值的规则是什么呢?

guanghuixu commented 2 years ago

anchor_score是ocr token的出现次数,比如'Angel'出现3次,'LONDON'2次……softmax归一化之后得到 其余两个键值是我用于ablation时用的,复现论文中的最佳效果是用不上的,不用构建 PS:如果构建了anchor_score跑不起来提示需要其余两个键值,麻烦告知,我更新下代码

Caroline0728 commented 2 years ago

不要只取anchor_graph得分最高的,一个graph对应一条描述,你选不同的graph就能得到不同的描述 ------------------ 原始邮件 ------------------ 发件人: @.>; 发送时间: 2022年4月18日(星期一) 下午4:30 收件人: @.>; 抄送: @.>; @.>; 主题: Re: [guanghuixu/AnchorCaptioner] imdb_files和MMF中提供的imdb文件的相关问题 (Issue #12) 您好,还有一个问题想请教您,对于您论文中的每一个中心图可以对应一个描述语句,从而更加详细的生成多条描述语句,请问这里在哪里实现的?目前生成的也是一条描述语句 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***&

。OCRs:图片中所有识别出来的文

我调整了batchsize,已基本能复现论文中的效果,谢谢您~