CVPR2021-RSTNet:自适应Attention的“看图说话”模型 

一、一个简单的字幕生成

其中有一个运行案例代码(相应路径修改即可)

python caption.py --img='path/to/image.jpeg' --model='path/to/BEST_checkpoint_coco_5_cap_per_img_5_min_word_freq.pth.tar' --word_map='path/to/WORDMAP_coco_5_cap_per_img_5_min_word_freq.json' --beam_size=5

需要将caption.py 中的下面两个索引最后添加.long()否则报错索引类型不对

python自动生成getset python自动生成字幕_深度学习

 下面是500×500 的图片,改为上面的图片路径,

python自动生成getset python自动生成字幕_caffe_02

输出为:

python自动生成getset python自动生成字幕_深度学习_03

感觉食物的辨识有点差,这里并没有三明治和薯片 

二、UPdown Caption

https://github.com/peteanderson80/Up-Down-Captioner/blob/master/scripts/demo.ipynb

https://drive.google.com/drive/folders/1KT38ZDgoyCFLTcWlcNgEFpyyHCxqdWw9

之前调通过peterson 的bottom up top down  vqa 模型,他是用caffe编写的。

这个模型也是基于caffe 编写。本以为指定路径即可使用。但是发现。caffe.proto 文件不同。且原先的layer中没有引入lstm 。

所以仍然需要编译。(所以我的心情...)

python自动生成getset python自动生成字幕_python自动生成getset_04

这里看看能不能走个捷径,将上次编译的makefile 和makefile.config 覆盖到这个模型的同名文件

python自动生成getset python自动生成字幕_python自动生成getset_05

目前看着良好,然后就能成功!

python自动生成getset python自动生成字幕_pytorch_06

python自动生成getset python自动生成字幕_深度学习_07

python自动生成getset python自动生成字幕_caffe_08

 我当时so.7 1kb 所以文件是有问题的,后来看到另一个版本文件夹下的so.7 如此之大,然后就运行成功 export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:$LD_LIBRARY_PATH 

python自动生成getset python自动生成字幕_pytorch_09

 

 

python自动生成getset python自动生成字幕_深度学习_10

等会再改一个参数,目前看来网络不能一下子全部运行,可以先运行识别,然后将dets 存储下来,然后再运行语言,将dets 作为参数传入。得到最终结果。(我的gpu 12G 都无法一下子运行这两个模型参数文件,所以大家可以试试分两次运行)

python自动生成getset python自动生成字幕_python自动生成getset_11

但是这个是传入多个目标框,只能生成一句话,所以不属于dense caption 类型

 但是就测了一个图片!

三、ImageCaptioning.pytorch

https://github.com/ruotianluo/ImageCaptioning.pytorch/blob/master/data/README.md

python自动生成getset python自动生成字幕_caffe_12

有时也出现较大的失误而且粒度描述性不高

四、github 上的一个字幕生成论文及部分代码列表

https://github.com/zhjohnchan/awesome-image-captioning#pytorch

五、初尝Dense Caption 方面(但github 提供的代码都是Torch Lua 语言)

选择CUDA9.0 +Torch7 安装

命令选择官网Torch | Getting started with Torch

其中如果出现算力问题,可以设置环境变量改为7.0 算力。cuda9.0 对应的7.0算力

至于已经完整的torch 文件夹,可以直接拷贝到有9.0 的环境即可。不需要每次git clone 操作

出现下面问题的可以尝试

export TORCH_NVCC_FLAGS="-D__CUDA_NO_HALF_OPERATORS__"
yes | bash ./install.sh
问题1:
/home/brian/torch/extra/cutorch/lib/THC/generic/THCTensorMathPairwise.cu(66): error: more than one operator "!=" matches these operands:
             function "operator!=(const __half &, const __half &)"
             function "operator!=(half, half)"
             operand types are: half != half
  问题2:
CMake Error at /usr/share/cmake-3.10/Modules/FindQt4.cmake:1320 (message):
   Found unsuitable Qt version "" from NOTFOUND, this code requires Qt 4.x 
Enter the following commands in the terminal.
 sudo apt-get install libqt4-core libqt4 libqt4-gui-dev
 sudo apt-get install qt4-dev-tools

问题3:

-bash: ./configure: Permission denied 

在命令前加bash就可以了

历经千辛万苦,终究出来这个画面!

python自动生成getset python自动生成字幕_深度学习_13

对于luarocks 的安装,可以自定义安装目录,如果定义到/usr/local 通常会不断地切换权限,所以最好自己建造一个文件夹,这样自己就拥有对他的权限

python自动生成getset python自动生成字幕_caffe_14

将lua 5.3 的Manifest 文件中更改安装路径,同样可以避免用到管理员权限

python自动生成getset python自动生成字幕_深度学习_15

  

luarocks 安装需要指定lua 的安装路径,这样避免使用管理员权限

python自动生成getset python自动生成字幕_caffe_16

python自动生成getset python自动生成字幕_github_17

问题4:某些库安装出错

luarocks install https://raw.githubusercontent.com/qassemoquab/stnbhwd/master/stnbhwd-scm-1.rockspec

Ubuntu 16.04+cuda 9.0+cudnn 7配置Torch运行DenseCap开源代码遇到问题 - 开发者知识库

nvcc fatal   : Value 'sm_20' is not defined for option 'gpu-architecture'
CMake Error at custn_generated_init.cu.o.cmake:207 (message):
  Error generating
  /tmp/luarocks_stnbhwd-scm-1-4197/stnbhwd/build/CMakeFiles/custn.dir//./custn_generated_init.cu.o

解决方法:

1.下载源码到本地:git clone https://github.com/qassemoquab/stnbhwd
2.修改CMakeLists.txt:
From:
IF (CUDA_FOUND)
   LIST(APPEND CUDA_NVCC_FLAGS "-arch=sm_20")
to:
IF (CUDA_FOUND)
   LIST(APPEND CUDA_NVCC_FLAGS "-arch=sm_30")
3.在源码目录里执行本地安装:luarocks make

运行时出现libcudnn5 的问题,网上大多说需要下载5的相关文件,目前我的cuda 里面时so.7 所以需要下载5。

wget http://developer.download.nvidia.com/compute/redist/cudnn/v5.1/cudnn-8.0-linux-x64-v5.1.tgz #cud8 cudnn5.1 wget http://developer.download.nvidia.com/compute/redist/cudnn/v6.0/cudnn-8.0-linux-x64-v6.0.tgz #cuda8 cudnn6.0 wget http://developer.download.nvidia.com/compute/redist/cudnn/v7.0.5/cudnn-8.0-linux-x64-v7.tgz #cuda8 cudnn7.0

如果发现由于lua5.3出现的一些数值 或者new 问题,可以利用LUA52 重新编译一次,则此时运行th 命令,会自动切换到lua52 ,而且lua53时安装的第三方包可以继续使用。 

tar -xzvf cudnn-8.0-linux-x64-v5.1.tgz

如何最简单的处理此问题,按照他的提示,只需在~/.bashrc 中添加上面下载的文件中的so.5 文件即可(我不喜欢用软连接)

python自动生成getset python自动生成字幕_caffe_18

有些包luarocks 安装不成功! 

ubuntu上安装Torch7及nn及dpnn_Linux系统教程_红联Linux门户

离线.安装torch的包(packages),如nn和dpnn

说明:安装先安装nn,再安装dpnn

1)下载nn和dpnn:

https://github.com/torch/nn

https://github.com/nicholas-leonard/dpnn

2)解压这两个文件夹。

3)终端中cd到这两个文件夹上一级目录。

4)使用luarocks install命令进行安装

luarocks install nn-master/rocks/nn-scm-1.rockspec

luarocks install dpnn-master/rocks/dpnn-scm-1.rockspec

最终是可以利用-gpu -1 可以输出densecap结果,而不使用该参数会出现 no kernel image (48)类似错误。

由于Lua 语言看的我头疼,我又在github 找到了一个北邮人写的densecap-pytorch.

六 https://github.com/soloist97/densecap-pytorch

1.将代码 git clone 下来

2.将三个提供的文件下载下来

3.在descibe.py 中指明3个文件的位置

4.python decribe.py 即可生成结果,结果是result.json

python自动生成getset python自动生成字幕_python自动生成getset_19

python自动生成getset python自动生成字幕_caffe_20

此代码中使用了torchvision 中的目标检测器:

https://github.com/pytorch/vision/blob/c8f7d772e844d707e152e2a1fa1aad26cf1b7530/torchvision/models/detection/generalized_rcnn.py

python自动生成getset python自动生成字幕_github_21

python自动生成getset python自动生成字幕_python自动生成getset_22

七 、2017模型 https://github.com/linjieyangsc/densecap

运行问题搜集:

python自动生成getset python自动生成字幕_深度学习_23

这是因为当前版本的caffe的cudnn实现与系统所安装的cudnn的版本不一致引起的。

解决办法:

1.将./include/caffe/util/cudnn.hpp 换成最新版的caffe里的cudnn的实现,即相应的cudnn.hpp.

python自动生成getset python自动生成字幕_github_24

 八、尝试一个长文 生成模型

https://github.com/lukemelas/image-paragraph-captioning/tree/master/data/captions