본문 바로가기
Vision/Machine Learning

[Tip] Google Colab 환경에서 Argumentparser 사용

by 노력하는류 2023. 7. 3.

ArgumentParse 란 ?

코드를 실행할 때, 하나의 Script 내에서 분명 다양한 상황들이 존재할 겁니다.

그 때마다 일일이 지정하기 번거로우니 여러 상황에 따라 'argparse' 를 불러와 (호출), 호출 시 인자(argument)값을 할당하할 수 있다고 합니다.

그래서 argparse를 이용하면 다양한 유형의 인자값들을 효율적으로 처리할 수 있기 때문에, 복잡한 모델을 다룰 때 굉장히 편리하다고 하네요.

 

Argparse 의 사용 예시는 아래의 링크 참고 !

https://engineer-mole.tistory.com/213

 

[python] ArgumentParser 사용법

개요 Python의 실행시에 커맨드 라인 인수를 다룰 때, ArgumentParser(argparse)를 사용하면 편리하다. 다양한 형식으로 인수를 지정하는 것이 가능하다. 처음에 argparse를 사용할 생각으로 여러가지 포스

engineer-mole.tistory.com

 

 

 

그래서인지 다양한 모델의 코드를 분석할 때마다 argparse 가 자주 등장하던데,

모델 동작 여부를 시험하기 위헤서 간단하게 google colab을 사용하여 돌려보니 계속 아래와 같은 오류가 발생했습니다.

usage: ipykernel_launcher.py [-h] [--database DATABASE] [--src_dir SRC_DIR]
                             [--save_dir SAVE_DIR] [--patch_size PAT_SIZE]
                             [--stride STRIDE] [--step STEP]
                             [--batch_size BATCH_SIZE]
                             [--results_clean RESULTS_CLEAN]
                             [--results_noisy RESULTS_NOISY] [--ip IP]
ipykernel_launcher.py: error: unrecognized arguments: -f /root/.local/share/jupyter/runtime/kernel-5a6d4d7f-b1eb-427d-aaf8-a00a53f5f307.json
An exception has occurred, use %tb to see the full traceback.

SystemExit: 2

!pip install argparse 도 해보았는데 계속 에러가 발생하고 arparse error 에 관해서만 계속해서 찾아보던 중

하필 colab 에서 argparse 가 실행이 안된다는 걸 겨우 찾았습니다.. 

 

왜? 인지는 모르겠음. 

아무튼 이런 코드들을 jupyter notebook 이나 colab 에서 실행할 경우, argparse 의 namespace를 이용하여 dict 형태로 코드를 바꾸면 된다는데...

무슨 원리인지 전혀 이해는 안되지만 어쨌든 해결 방법은 아래와 같습니다.

 

 


 

아래 예시 코드를 가져온 링크 : https://studyingfox.tistory.com/10

import argparse
 
parser = argparse.ArgumentParser()
parser .add_argument("-d", "--A", required=True)
parser .add_argument("-m", "--B", type=str, required=True)
 
args = vars(parser.parse_args())

위의 코드를 colab 에서 실행하면 에러가 뜨는데,

이를 아래와 같이 easydict 로 받아서 실행하면 에러없이 실행이 됩니다 !

import easydict
 
args = easydict.EasyDict({ "A": dataset , "B": name.model })

 


그래서 내가 쓰고 싶은 코드를 변경하면??

import argparse
parser = argparse.ArgumentParser(description='')
parser.add_argument('--database', dest='database', default='bsd500', help='database with images')
parser.add_argument('--src_dir', dest='src_dir', default='./data/', help='dir of data')
parser.add_argument('--save_dir', dest='save_dir', default='./data', help='dir of patches')
parser.add_argument('--patch_size', dest='pat_size', type=int, default=41, help='patch size')
parser.add_argument('--stride', dest='stride', type=int, default=41, help='stride')
parser.add_argument('--step', dest='step', type=int, default=0, help='step')
parser.add_argument('--batch_size', dest='batch_size', type=int, default=128, help='batch size')
parser.add_argument('--results_clean', dest='results_clean', default="./img_clean_patches", help='file with clean patches')
parser.add_argument('--results_noisy', dest='results_noisy', default="./img_noisy_patches", help='file with noisy patches')
parser.add_argument('--ip', dest='ip',type=float, default="0.3", help='noise intensity in the training')
args = parser.parse_args()

위 코드가 아래와 같이 easydict 에 의해 간단하게 변환되며 colab 에서 에러없이 실행도 잘 됩니다.

from easydict import EasyDict

args = EasyDict()
args.database = 'bsd500'
args.src_dir = './data/'
args.save_dir = './data'
args.patch_size = 41
args.stride = 41
args.step = 0
args.batch_size = 128
args.results_clean = "./img_clean_patches"
args.results_noisy = "./img_noisy_patches"
args.ip = 0.3

'Vision > Machine Learning' 카테고리의 다른 글

Image Inpainting for Irregular Holes Using Partial Convolutions  (0) 2023.06.28
GAN (Generative Adversarial Networks )  (0) 2023.06.20
Context Encoder  (0) 2023.06.17
SRCNN ( Super-Resolution CNN )  (0) 2023.06.16
AlexNet  (0) 2023.06.15