Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

support visual genome #1

Open
wants to merge 12 commits into
base: pytorch-1.0
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
131 changes: 131 additions & 0 deletions README_ja.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
# Bottom-up-attentionのインストール
Bottom-up-attentionのclone

```bash
$ git clone git@github.com:peteanderson80/bottom-up-attention.git
$ cd bottom-up-attention
```

# データセットの作成

データセット作成用作業ディレクトリの作成

```bash
$ cd data
$ mkdir vg
```

Visual Genomeのデータ( https://visualgenome.org/api/v0/api_home.html )のダウンロード

```bash
$ cd vg
$ wget https://visualgenome.org/static/data/dataset/objects.json.zip
$ wget https://visualgenome.org/static/data/dataset/relationships.json.zip
$ wget https://visualgenome.org/static/data/dataset/object_alias.txt
$ wget https://visualgenome.org/static/data/dataset/relationship_alias.txt
$ wget https://visualgenome.org/static/data/dataset/object_synsets.json.zip
$ wget https://visualgenome.org/static/data/dataset/attribute_synsets.json.zip
$ wget https://visualgenome.org/static/data/dataset/relationship_synsets.json.zip
$ wget https://cs.stanford.edu/people/rak248/VG_100K_2/images.zip
$ wget https://cs.stanford.edu/people/rak248/VG_100K_2/images2.zip
$ wget https://visualgenome.org/static/data/dataset/image_data.json.zip
$ wget https://visualgenome.org/static/data/dataset/region_descriptions.json.zip
$ wget https://visualgenome.org/static/data/dataset/question_answers.json.zip
$ wget https://visualgenome.org/static/data/dataset/attributes.json.zip
$ wget https://visualgenome.org/static/data/dataset/synsets.json.zip
$ wget https://visualgenome.org/static/data/dataset/region_graphs.json.zip
$ wget https://visualgenome.org/static/data/dataset/scene_graphs.json.zip
$ wget https://visualgenome.org/static/data/dataset/qa_to_region_mapping.json.zip
$ for i in *.zip;do unzip $i;done

```

データセットの前処理の実行。このコマンドのみ python2 で実行する必要がある。

```bash
$ cd ../../
$ python2 data/genome/setup_vg.py
```
# faster-rcnn.pytorchのインストール

Python 環境の作成。ここからはpython 3.6.9にて実施

```bash
$ cd ../
$ python -m venv env
$ source env/bin/activate
$ pip install -U pip
```

レポジトリのclone。

```bash
$ cd ..
$ git clone git@gh01.base.toyota-tokyo.tech/ko-koga/captioning/faster-rcnn.pytorch-master.git
$ cd faster-rcnn.pytorch
$ git checkout -b origin/visual-genome
```

依存ライブラリのインストール

```bash
$ pip install scipy==1.1 torch==1.0.0 torchvision==0.2.2 pycocotools
$ pip install -r requirements.txt
```

ライブラリのビルド

```bash
$ cd lib
$ python setup.py build develop
$ cd ..
```

Visual Genomeデータセットへの参照作成

```bash
$ mkdir data
$ cd data
$ ln -s ../../bottom-up-attention/data/genome .
$ ln -s ../../bottom-up-attention/data/vg .
$ cd ..
```

ベースモデルの設置

```bash
$ mkdir data/pretrained_model
```

作成した `data/pretrained_model` ディレクトリに `resnet101_caffe.pth` を設置する。

# 学習の実行

下記のコマンドで学習を実行する。GPU一枚のときは `--mGPUs` オプションは省略する。
```bash
$ python trainval_net.py --dataset vg --net res101 --bs 16 --nw 4 --lr 1e-3 --lr_decay_step 5 --cuda --mGPUs
```
完了すると `models/res101/vg/` 以下に `faster_cnn_1_20_12145.pth` などの名前でモデルが保存される。なお `faster_cnn_(session)_(epoch)_(checkpoint).pth` という命名規則になっている。

# 推論の実行

学習したモデル及びラベル情報をを参照するようにする。
```bash
$ cd data/pretrained_model
$ ln -s ../../models/res101/vg/faster_rcnn_1_20_12145.pth .
$ ln -s ../../../../../bottome-up-attention/data/genome/1600-400-20/objects_vocab.txt .
$ cd ../../

```

推論を実行する
```
$ python demo.py --net res101 --checksession 1 --checkepoch 20 --checkpoint 48915 --dataset vg --cfg cfgs/res101.yml --cuda --load_dir data/pretrained_model/ --image_dir data/objects
```

`--checksession` `--chechepoch` `--checkpoint` にて読み込むモデルを指定するので学習したモデルに該当する数字を指定する必要がある。
`--image_dir` 以下に存在する画像ファイルに対して実行し、同じディレクトリに `元のファイル名_det.jpg` というファイル名で結果ファイルが作成される。

# 別の学習済みモデルを用いる場合

`faster-rcnn.pytorch/data/pretrained_model` 以下に `faster_rcnn_1_20_48915.pth` をコピーする。推論実行時に `--checkpoint` を `48915` に指定する。
1 change: 1 addition & 0 deletions cfgs/res101.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
ANCHOR_SCALES: [4,8,16,32]
EXP_DIR: res101
TRAIN:
HAS_RPN: True
Expand Down
11 changes: 5 additions & 6 deletions demo.py
Original file line number Diff line number Diff line change
Expand Up @@ -165,12 +165,11 @@ def _get_image_blob(im):
load_name = os.path.join(input_dir,
'faster_rcnn_{}_{}_{}.pth'.format(args.checksession, args.checkepoch, args.checkpoint))

pascal_classes = np.asarray(['__background__',
'aeroplane', 'bicycle', 'bird', 'boat',
'bottle', 'bus', 'car', 'cat', 'chair',
'cow', 'diningtable', 'dog', 'horse',
'motorbike', 'person', 'pottedplant',
'sheep', 'sofa', 'train', 'tvmonitor'])
pascal_classes = ['__background__']
with open(input_dir + "/objects_vocab.txt") as f:
for line in f.readlines():
pascal_classes.append(line.strip())
pascal_classes = np.asarray(pascal_classes)

# initilize the network here.
if args.net == 'vgg16':
Expand Down
4 changes: 2 additions & 2 deletions trainval_net.py
Original file line number Diff line number Diff line change
Expand Up @@ -171,8 +171,8 @@ def __len__(self):
elif args.dataset == "vg":
# train sizes: train, smalltrain, minitrain
# train scale: ['150-50-20', '150-50-50', '500-150-80', '750-250-150', '1750-700-450', '1600-400-20']
args.imdb_name = "vg_150-50-50_minitrain"
args.imdbval_name = "vg_150-50-50_minival"
args.imdb_name = "vg_1600-400-20_train"
args.imdbval_name = "vg_1600-400-20_val"
args.set_cfgs = ['ANCHOR_SCALES', '[4, 8, 16, 32]', 'ANCHOR_RATIOS', '[0.5,1,2]', 'MAX_NUM_GT_BOXES', '50']

args.cfg_file = "cfgs/{}_ls.yml".format(args.net) if args.large_scale else "cfgs/{}.yml".format(args.net)
Expand Down