ArgumentParse 란 ?
코드를 실행할 때, 하나의 Script 내에서 분명 다양한 상황들이 존재할 겁니다.
그 때마다 일일이 지정하기 번거로우니 여러 상황에 따라 'argparse' 를 불러와 (호출), 호출 시 인자(argument)값을 할당하할 수 있다고 합니다.
그래서 argparse를 이용하면 다양한 유형의 인자값들을 효율적으로 처리할 수 있기 때문에, 복잡한 모델을 다룰 때 굉장히 편리하다고 하네요.
Argparse 의 사용 예시는 아래의 링크 참고 !
https://engineer-mole.tistory.com/213
그래서인지 다양한 모델의 코드를 분석할 때마다 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 |