Neuraltalk 2,基于PyTorch框架的生成图像内容的文本描述模型
这是PyTorch中的图像字幕代码库。如果你熟悉neuraltalk2,这里有与neuraltalk2相比的差异。- 我们使用karpathy的train-val-test拆分而不是使用随机拆分。 - 我们使用预处理的功能,而不是将模型包含在模型中。(微调cnn版本在分支with_finetune中) - 使用resnet而不是vgg; 特征提取方法与自我关键相同:在原始图像上运行cnn并自适应地平均将最后一个转换层特征池合并到固定大小。 - 更多模型(你可以查看模型文件夹)。最新的自上而下模型可以在Karpathy的测试分割中获得1.07 Cider评分,光束大小为5。
Python 2.7(因为没有python 3的coco-caption版本)PyTorch 0.2(以及torchvision)
您需要为培训和评估下载预训练的resnet模型。这些模型可以从这里下载,并应放入data/imagenet_weights
。
这里提供了预训练模型。并且在这个问题上将保持每个模型的性能。
如果您只想进行评估,则可以在下载预训练模型后按照本节进行操作。
首先,从链接下载可可图像。我们需要2014年培训图像和2014年val。图片。您应该将train2014/
和val2014/
放在同一目录中,表示为$IMAGE_ROOT
。
从Karpathy的主页链接下载预处理的可可字幕。dataset_coco.json
从zip文件中提取并将其复制到data/
。此文件提供预处理的标题以及标准的train-val-test拆分。
一旦我们有了这些,我们现在可以调用prepro_*.py
脚本,它将读取所有这些并创建一个数据集(两个功能文件夹,一个hdf5标签文件和一个json文件)。
$ python scripts/prepro_labels.py --input_json data/dataset_coco.json --output_json data/cocotalk.json --output_h5 data/cocotalk$ python scripts/prepro_feats.py --input_json data/dataset_coco.json --output_dir data/cocotalk --images_root $IMAGE_ROOT
prepro_labels.py
将所有出现<= 5次的单词映射到特殊UNK
标记,并为所有剩余单词创建词汇表。将图像信息和词汇表转储到其中,data/cocotalk.json
并将离散化的字幕数据转储到其中data/cocotalk_label.h5
。
prepro_feats.py
提取每个图像的resnet101功能(fc功能和最后一个功能)。这些功能保存在data/cocotalk_fc
和中data/cocotalk_att
,结果文件大约为200GB。
(检查prepro脚本以获取更多选项,例如其他resnet模型或其他注意力大小。)
遗留问题:之前我们为每个图像将功能提取到单独的npy / npz文件中,但是在某些NFS上加载它们并且复制它们会更慢。我们现在保存h5文件中的所有功能。如果要将先前的npy / npz文件转换为h5文件,可以使用run
$ python scripts/convert_old.py --input_json data/dataset_coco.json --fc_input_dir data/cocotalk_fc/ --att_input_dir data/cocotalk_att/ --fc_output_dir data/cocotalk_fc --att_output_dir data/cocotalk_att/
警告:prepro脚本将失败并显示默认的MSCOCO数据,因为其中一个图像已损坏。请参阅此问题以获取修复,它涉及手动替换数据集中的一个图像。
$ python train.py --id st --caption_model show_tell --input_json data/cocotalk.json --input_fc_dir data/cocotalk_fc --input_att_dir data/cocotalk_att --input_label_h5 data/cocotalk_label.h5 --batch_size 10 --learning_rate 5e-4 --learning_rate_decay_start 0 --scheduled_sampling_start 0 --checkpoint_path log_st --save_checkpoint_every 6000 --val_images_use 5000 --max_epochs 25
列车脚本将检查点转储到--checkpoint_path
(default = save/
)指定的文件夹中。我们只保存最佳性能检查点和最新检查点以节省磁盘空间。
恢复训练,你可以指定--start_from
选项是路径保存infos.pkl
和model.pth
(通常你可以只设置--start_from
和--checkpoint_path
是相同的)。
如果您有tensorflow,则会自动将丢失历史记录转储到其中--checkpoint_path
,并且可以使用tensorboard进行可视化。
当前命令使用预定采样,您还可以将scheduled_sampling_start设置为-1以关闭预定采样。
如果你想在训练期间评估BLEU / METEOR / CIDEr分数以及验证交叉熵损失,请使用--language_eval 1
选项,但不要忘记将coco-caption代码下载到coco-caption
目录中。
有关更多选项,请参阅opts.py
。
关于培训的一些注意事项。为了给您一个想法,使用默认设置,MS COCO图像的一个时期大约是11000次迭代。经过1个时期的训练导致验证损失~2.5和CIDEr得分为~0.68。通过迭代,60,000 CIDEr上升至约0.84(验证损失约为2.4(在预定的采样下))。
现在将您感兴趣的所有图像放入一个文件夹中,例如blah
,运行eval脚本:
$ python eval.py --model model.pth --infos_path infos.pkl --image_folder blah --num_images 10
这告诉eval
脚本最多可以从给定文件夹中运行10个图像。如果你有一个大GPU,你可以通过增加来加速评估batch_size
。使用--num_images -1
来处理所有图像。eval脚本将在vis.json
文件vis
夹中创建一个文件,然后可以使用提供的HTML界面显示该文件:
$ cd vis$ python -m SimpleHTTPServer
现在访问localhost:8000
您的浏览器,您应该看到预测的字幕。
$ python eval.py --dump_images 0 --num_images 5000 --model model.pth --infos_path infos.pkl --language_eval 1
要评估的defualt分裂是测试。默认的推理方法是贪心解码(--sample_max 1
),从后验,集合中进行采样--sample_max 0
。
光束搜索。波束搜索可以将搜索贪婪解码序列的性能提高约5%。但是,这有点贵。要打开波束搜索,请使用--beam_size N
,N应大于1。
使用cpu。该代码目前默认使用gpu; 甚至没有切换选项。如果有人非常需要cpu模型,请打开一个问题; 我可以创建一个cpu检查点并修改eval.py以在cpu上运行模型。但是,使用cpu训练模型毫无意义。
训练其他数据集。如果您可以创建类似于dataset_coco.json
您自己的数据集的文件,那么移植应该是微不足道的。
现场演示。现在不支持。欢迎拉请求。
如果您发现此实施有用,请考虑引用此回购:
@misc{Luo2017,author = {Ruotian Luo},title = {An Image Captioning codebase in PyTorch},year = {2017},publisher = {GitHub},journal = {GitHub repository},howpublished = {url{https://github.com/ruotianluo/ImageCaptioning.pytorch}},}
当然,请引用您正在使用的模型的原始论文(您可以在模型文件中找到参考文献)。
感谢原始的neurtalk2和令人敬畏的PyTorch团队。
上一篇:唇读
下一篇:深度强化学习的异步方法集
还没有评论,说两句吧!
热门资源
Keras-ResNeXt
Keras ResNeXt Implementation of ResNeXt models...
seetafaceJNI
项目介绍 基于中科院seetaface2进行封装的JAVA...
spark-corenlp
This package wraps Stanford CoreNLP annotators ...
capsnet-with-caps...
CapsNet with capsule-wise convolution Project ...
inferno-boilerplate
This is a very basic boilerplate example for pe...
智能在线
400-630-6780
聆听.建议反馈
E-mail: support@tusaishared.com