amy-hyunji / CS470

CS470 final project
1 stars 1 forks source link

모델 #6

Open NaJeehye opened 3 years ago

NaJeehye commented 3 years ago

[목표] textVQA fine-tuning 시켜서 training 하기

[기한 목표] ~11.20 : textVQA 다시 학습 & pretrained model학습 ~11.21 : 모델 팀 회의후, 결론 내기

NaJeehye commented 3 years ago

dataset download시 (ubuntu 기준) //dropbox 데이터가 너무 커서 다운이 잘 안되므로, wget를 개별적으로 다 해서 살펴봐야함.

//======================= mkdir pre-trained-models cd pre-trained-models wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AAC467iM_vQEHzJPKeSDdd-ja/pretrained-models/best_model.tar wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AAAstCvRzGPukOnqupbbZOJHa/pretrained-models/evalai_test.json wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AAAwh2pnuhK7sQCNBx-n9JJfa/pretrained-models/evalai_val.json

//=================================== cd .. mkdir vocabs cd vocabs wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AAAsh4wvfr23zyEHp8ZSsPKza/data/vocabs/fixed_answer_vocab_stvqa_5k.txt wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AAAUjcJTWJzBAuszte2KBsEoa/data/vocabs/fixed_answer_vocab_textvqa_5k.txt

//=================================== cd .. mkdir evaluation cd evaluation wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AABqzgIT3XBNGIixgXtCaBQOa/data/evaluation/stvqa_eval_df_test.pkl wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AACuq0Xw4gWgjfpT6fmFx1BTa/data/evaluation/stvqa_eval_df.pkl wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AACVYaHJGtSmsfIGXY7sucV4a/data/evaluation/tvqa_eval_df_test.pkl wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AABUWaSjULW27rYnLGMP0u5qa/data/evaluation/tvqa_eval_df.pkl

//===== 아래쪽이 큰덩어리임에 유의 cd .. mkdir stvqa cd stvqa wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AAAN5Adbk3_qQmRQ9ddie7cIa/data/stvqa/stvqa_test_imdb.npy wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AADdHQ8i1dAD7dtTZH9O782ga/data/stvqa/stvqa_train_imdb.npy wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AACFqtjJRDGBMk7A--AfFSVIa/data/stvqa/stvqa_val_imdb.npy

mkdir stvqa_test_obj.lmdb cd stvqa_test_obj.lmdb wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AADLsAG7SLpFEB3Sje_F35jaa/data/stvqa/stvqa_test_obj.lmdb/data.mdb wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AABp1UAe7F45tf3RZvW2Yv0Ha/data/stvqa/stvqa_test_obj.lmdb/lock.mdb

cd .. mkdir stvqa_test_ocr.lmdb cd stvqa_test_ocr.lmdb wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AABu0V7iHa3KJ0RWkYn_hD_Ha/data/stvqa/stvqa_test_ocr.lmdb/data.mdb wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AABp1UAe7F45tf3RZvW2Yv0Ha/data/stvqa/stvqa_test_obj.lmdb/lock.mdb

cd .. mkdir stvqa_trainval_obj.lmdb cd stvqa_trainval_obj.lmdb wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AACiUHt7Gj15AT263z9e6CG7a/data/stvqa/stvqa_trainval_obj.lmdb/data.mdb wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AAAQZcu2DCsF3fJH646Nwjrca/data/stvqa/stvqa_trainval_obj.lmdb/lock.mdb

cd .. mkdir stvqa_trainval_ocr.lmdb cd stvqa_trainval_ocr.lmdb wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AACER67wlAdGTnqAhq-uQAkma/data/stvqa/stvqa_trainval_ocr.lmdb/data.mdb wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AACyAXAnlut5fNog7bfjKeSba/data/stvqa/stvqa_trainval_ocr.lmdb/lock.mdb?dl=0

//=================================== (data가 pwd가 되도록) 해당 것이 큰 덩어리임 cd .. cd .. mkdir textvqa cd textvqa wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AAA0JiTo2qs9FVUaqusP9R3Ba/data/textvqa/tvqa_test_imdb.npy wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AAD3_VsEL_DoGGj8If8i93-Da/data/textvqa/tvqa_train_imdb.npy wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AACxHbS1_P-7UEfabyEuxNvPa/data/textvqa/tvqa_val_imdb.npy

mkdir tvqa_test_obj.lmdb cd tvqa_test_obj.lmdb wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AADer5SCqmKM16OesQpRryANa/data/textvqa/tvqa_test_obj.lmdb/data.mdb wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AADLL7HskzZn4OjfpPDjbJYta/data/textvqa/tvqa_test_obj.lmdb/lock.mdb

cd .. mkdir tvqa_test_ocr.lmdb cd tvqa_test_ocr.lmdb wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AAB1qg_hIfNTOUPCDaJQ_lGZa/data/textvqa/tvqa_test_ocr.lmdb/data.mdb wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AABkbDmByTOqjXPr-IEJxitua/data/textvqa/tvqa_test_ocr.lmdb/lock.mdb

cd .. mkdir tvqa_trainval_obj.lmdb cd tvqa_trainval_obj.lmdb wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AAAdPd6Yz2IsPQS_dFUjyz8na/data/textvqa/tvqa_trainval_obj.lmdb/data.mdb wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AADs_Mxx5pFXZJOfiMYPWIFCa/data/textvqa/tvqa_trainval_obj.lmdb/lock.mdb

cd .. mkdir tvqa_trainval_ocr.lmdb cd tvqa_trainval_ocr.lmdb wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AADHHI58aFQuAim4BSJqC2HZa/data/textvqa/tvqa_trainval_ocr.lmdb/data.mdb wget https://www.dropbox.com/sh/dk6oubjlt2x7w0h/AACbwDa_bkdk3nMg9EnClEXAa/data/textvqa/tvqa_trainval_ocr.lmdb/lock.mdb

//======================================끝

//11-21일 stvqa_val_imdb.npy 빼먹어서 추가합니다.

amy-hyunji commented 3 years ago

Helpful Issues

cjs0410 commented 3 years ago

sam-m4c와 성능 비교할 수 있는 textvqa model

qa model

cjs0410 commented 3 years ago

11/22 모델 팀 회의

NaJeehye commented 3 years ago

참조할 만한 곳!

NaJeehye commented 3 years ago

변화 방법

사용 서버: ubuntu 사용 GPU: RTX 2080 *2

단순히 방법을 변화시켜서 하기

1. SARTIALLY의 layer를 추가해본다. (4->5개 (6개는 gpu가 터져서 실패함)/ epochs 수가 낮은 이유는 gpu memory가 터져서)

# => 위의 문제를 해결 하기위해서, 중간에 학습했던 것을 이어서 학습하는 epochs에 대한 기록을 해줄 필요가 있다. (--more_training 에대한 옵션을 training에 줘서 해보자.) 
## 1-1. TVQA만 학습 :A Localized, Compositional Video Question Answering Dataset
    ### tag tvqa_changed1 => 이후 하려고 하니깐, 다른 분들이 1500mib 정도만 processes를 돌렸는데도 터져서 못 돌림.
    ### [Validation] Current VQA: 0.40772005915641785 at 6498 | Best VQA: 0.40547996759414673 at 6137 (17 epochs)
## [실패]1-2. TVQA 전부 학습 => shared memory의 부족때문에 불가능함. (어차피 stvqa, tvqa 맥락은 비슷한 데이터 셋이니까,넘기도록 하자.: epoch 1도 못넘기고 실패함)
## 1-3. STVQA만 학습: 장면 기반한 데이터셋 (100 epochs)
    ### tag stvqa_changed1
    ### [Validation] Current VQA: 0.40905630588531494 at 24500 | Best VQA: 0.41286149621009827 at 10290

결론: 시도는 했지만, 논문에서 만큼의 성능을 기대하기가 어렵다. (아직 beam search를 안했으니, 아래 4번에서 성능 개선의 여지가 있는지를 살펴보도록 하겠다. 하지만, 논문의 결과를 보면 그렇게 까지 나아지지 않을 것같긴하다.)

2. [실패] VizWiz 라는 새로운 데이터셋을 이용해서 시도해보기

=> 어차피 stvqa에 해당 이미지가 포함되어있던 거였음...

3.[실패] share3,5,7,9를 바꿔보기 : matrix_type_map (datasets에 있는 내용중에 하나인)

# build_map "3" :["1","31","32"], "5":["3","51","52"], ...
'''if self.needs_spatial:
        # In the first iteration expand all the spatial relation matrices
        if "spatial_adj_matrices" not in entry:
            entry["spatial_adj_matrices"] = {}

            build_map = {
                "3": ["1", "31", "32"],
                "5": ["3", "51", "52"],
                "7": ["5", "71", "72"],
                "9": ["7", "91", "92"],
            }
'''
## 3-1.share5 ## => memory 부족해서 결국 실패 ==> beach_size 줄여서 다시 시도해보기

4. [Finally]Finding Beam Search

=> conifgration 변화시켜서 보았는데. 변화없음

Model과 App을 연결하는 역할

init 부분까지 작성하고 진수님께 전달해드렸는데, 해당 코드중에서 "self.model.load_state_dict(torch.load(self.textVQA_pretrained))"에 문제가 발생할 가능성 있음(train.py에서 직접적으로 load_state_dict를 불러왔는데, state_dict가 매치되지 않는 현상이 벌어짐) 아마 다른 방법으로 접근을 해야할 것같기도함. 아에 "evaluator.py"의 코드를 더 파보는 것이 맞는 접근 방법인 것같음

cjs0410 commented 3 years ago

-최적화 TensorRT를 통한 최적화 https://github.com/NVIDIA-AI-IOT/torch2trt 원래 모델과 같은 방법으로 사용할 수 있음.

참고했던 웹사이트: https://eehoeskrap.tistory.com/414 혹시 우리가 사용하는 model에 적용되지 않으면 위 웹사이트에 제시된 방법 사용해야함

-인터페이스 원문 코드의 다양한 함수에서는 dataloader를 이용하여 batch_dict를 얻는다. 이를 잘 이용해보면 dataloader에서 split이 ["test"]인 dataset을 하나 가져와서 이 dataset에 있는 image, question을 우리가 원하는 image, question으로 바꾸면 가능할 것 같다. 다만 batch_dict안에 있는 key의 이름과 value의 type을 모르는 것이 문제이다.

cjs0410 commented 3 years ago

mmf demo 로컬에서 구현하기 위한 세팅 (https://colab.research.google.com/drive/1Z9fsh10rFtgWe4uy8nvU4mQmqdokdIRR?usp=sharing#scrollTo=V1ROyH7yG11V)

우선 우리 팀 깃을 clone한 후, git checkout popup를 통해 popup branch를 연다. 구글 크롬에서 extention에 들어가서 load unpacked를 하면 'Ask your question'이 다운받아진다.

cd CS470 mkdir model_data wget -O ~/CS470/model_data/answers_vqa.txt https://dl.fbaipublicfiles.com/pythia/data/answers_vqa.txt wget -O ~/CS470/model_data/vocabulary_100k.txt https://dl.fbaipublicfiles.com/pythia/data/vocabulary_100k.txt wget -O ~/CS470/model_data/detectron_model.pth https://dl.fbaipublicfiles.com/pythia/detectron_model/detectron_model.pth wget -O ~/CS470/model_data/pythia.pth https://dl.fbaipublicfiles.com/pythia/pretrained_models/vqa2/pythia_train_val.pth wget -O ~/CS470/model_data/pythia.yaml https://dl.fbaipublicfiles.com/pythia/pretrained_models/vqa2/pythia_train_val.yml wget -O ~/CS470/model_data/detectron_model.yaml https://dl.fbaipublicfiles.com/pythia/detectron_model/detectron_model.yaml wget -O ~/CS470/model_data/detectron_weights.tar.gz https://dl.fbaipublicfiles.com/pythia/data/detectron_weights.tar.gz tar xf ~/CS470/model_data/detectron_weights.tar.gz

pip install yacs cython matplotlib pip install git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI

git clone https://github.com/facebookresearch/mmf.git mmf cd mmf sed -i '/torch/d' requirements.txt pip install -e .

cd cd CS470 git clone https://gitlab.com/meetshah1995/vqa-maskrcnn-benchmark.git cd vqa-maskrcnn-benchmark python setup.py build python setup.py develop

script.js파일에서 ajax를 통해 vqa.py로 데이터 전송하려고 시도중. vqa.py에서는 flask를 통해 데이터를 받은 후 모델을 통해 prediction얻은 뒤 다시 script.js에 전달해야함.

깃헙에 올려둔 ajax-flask 폴더에 있는 파일들을 CS470에 옮겨서 테스트 중.