diff --git a/README.md b/README.md index e39de102b3f2439f4726ab2c3df2c8dbf2734381..f28f474d3f7930129fc13e40b7b873b69b4b5e3f 100644 --- a/README.md +++ b/README.md @@ -1,36 +1,47 @@ # foss-2024-2-final -## MMDetection 번역 이유 및 목표 +## 🔎 MMDetection 문서 번역 이유 및 목표 MMDetection은 AI 기술의 발전과 함께 다양한 관련 프레임워크가 등장하는 가운데, 컴퓨터 비전 분야에서 Object Detection 및 Segmentation 작업을 보다 쉽게 구현하기 위해 홍콩의 China University에서 개발한 프레임워크이다. 이 프레임워크는 특히 Object Detection과 관련된 여러 알고리즘을 효율적으로 구현할 수 있는 강력한 도구를 제공한다. 하지만 MMDetection은 홍콩에서 개발되었기 때문에 기본 문서화가 주로 중국어로 이루어져 있으며 영어로 제공되는 문서도 있지만 구체적인 설명이 부족한 부분이 존재한다. 또한 많은 최신 연구 논문들이 MMDetection을 기반으로 구현되었기 때문에 이 프레임워크는 실무와 연구에서 널리 사용되고 있지만 한국어로 번역된 공식 문서는 아직 존재하지 않아 한국어 사용자들이 접근하기에는 약간의 어려움이 있다. 위와 같은 문제점을 해결하기 위해 이번 MMDetection 번역 프로젝트의 주요 목표는 크게 두 가지로 설정하였다. 첫째, 한국어로 정확하고 이해하기 쉽게 번역하여 한국인 사용자가 MMDetection을 보다 효과적으로 활용할 수 있도록 한다. 둘째, 원본 문서에서 부족한 설명이나 세부 사항이 있다면 이를 보충하여 문서의 품질을 높인다. 이를 통해 MMDetection을 사용하는 한국어 사용자들이 보다 원활하게 프레임워크를 이해하고 활용할 수 있도록 도울 수 있을 것이다. 우선 이번 프로젝트에서는 MMDetection 프레임워크에서 가장 중요한 컨셉인 config 파일과 관련된 문서를 번역하여 해당 프레임워크에 대한 전반적인 이해가 가능하도록 하였다. 번역 하는데 있어서 MMDetection의 config 파일에 대한 정확한 이해가 선행되어야 하기 때문에 해당 프레임워크를 사용한 레포지토리를 클론하고 그 위에서 다양한 실험을 진행하여 config에 대한 개념을 완벽하게 이해하도록 노력하였다. -## 번역 Details +## 🔥 번역 Details 🔥 - AI 분야에서 흔히 사용되는 영어 단어들은 영어 표시 그대로 유지하거나 한글로 표시할 시 그에 대응하는 영어 단어를 괄호로 표시하여 혼동을 피하고자 하였다. -예시. 훈련(train), 검증(validation), 테스트(test), 하이퍼파라미터(hyper-parameter), 배치(batch), classification, detection, segmentation + +예시. 훈련(train), 검증(validation), 테스트(test), 하이퍼파라미터(hyper-parameter), 배치(batch), 최적화(optimization) classification, detection, segmentation - 컴퓨터에서 자주 쓰이는 "indexing" 역시 인덱스로 유지하였다. - 그리스어는 영어 표현 그대로 유지하였다. + e.g. gamma -> 감마, beta -> 베타 - 모델을 구성하는 세부 블럭 혹은 단위 역시 보통 영어로 표시하는 것이 일반적이라 그대로 유지하였다. + 예시. 백본(backbone), 넥(neck), 헤드(head), 스테이지(stage), 레이어(layer), 채널(channel), 컨볼루션(convolution), 피쳐 맵(feature map), 앵커(anchor), 스케일(scale), 스트라이드(stride), 레벨(level) - 모델의 이름이나 방법론과 같은 고유 명칭들은 영어 그대로 유지하였다. -예시. FPN, RPN, ROI, FC, RCNN, NMS + +예시. FPN, RPN, ROI, FC, RCNN, NMS, AP, AR, mAP + +- 클래스 이름은 영어 그대로 유지하였다. + +예시. Evaluator, Hook - Repository를 저장소로 흔히 번역하는 경우가 많지만 이는 storage의 뜻이며 repository의 더 포괄적이고 명확한 의미를 내포하기 위해 레포지토리라고 영어 그대로 번역하였다. - Configuration 혹은 config라는 단어를 그대로 번역하면 '배열', '환경 설정'이지만 AI 소프트웨어를 구성하는 측면에서 생각해봤을 때 "구성 요소 설정"이라는 닺어가 가장 근접하다고 생각되었다. 하지만 이 역시 configuration이라는 단어가 가지고 있는 온전한 의미를 함축하지 못한다고 생각되어 뒤에 번역 뒤에 config라고 추가로 적었다. 이후 각 구성요소에 대한 구체적인 이름이 부여될 시 구성 요소라는 단어를 빼고 구체적 역할에 대한 단어를 넣었다. + 예시. 그냥 'config'의 경우 '구성 요소 설정'으로 번역했지만 'Model config'의 경우 '모델 설정'이라고 번역하였다. - Field는 문맥 상 AI 소프트웨어를 구성하는 다양한 구성 요소(Model, Optimizer, Scheduler 등)들을 뜻하기 때문에 번역에서는 이를 풀어서 '다양한 구성 요소'라고 의역했으며 모호함을 없애기 위해 그 뒤에 예시들을 추가하였다. + 예시. "introduce each field in the config according~" -> "각기 다른 구성 요소(Model, Optimizer, Data Processor 등)에 대해 설명하고~" - Function은 직역하면 함수, 기능이지만 문맥 상 역할과 기능이라는 뜻이 더 잘 어울린다고 생각하였다. + 예시. "different function modules" -> "다양한 역할 및 기능" - 원문에서 "Neural Network"라는 단어가 "Model"과 혼용해서 쓰이는데 혼동을 피하기 위해 번역에서는 "모델"로 통일하였다. @@ -39,18 +50,49 @@ e.g. gamma -> 감마, beta -> 베타 - Regression을 단순 "회귀"라기엔 너무 포괄적이라 조금 더 구체화시켜 "박스 회귀"라고 번역하였다. +- Annotation을 그대로 번역하면 "주석"이지만 이는 detection task의 관점에서 완전히 틀린 번역이기 때문에 "이미지 속성 정보"라고 번역하였고 모호함을 해소하기 위해 예시를 추가하였다. + +- Metric을 번역하면 "계량" 정도로 번역할 수 있으나 AI 모델의 평가의 관점에서 "평가 지표"로 번역하였다. + + +## 🔥 추가 내용 Details 🔥 + +- 원본 문서에서는 config 파일을 코드 형식으로 보여줄 때 띄어쓰기와 '\n'이 적절하게 사용되지 않아 사용자가 문서를 읽을 때 불편함을 느낄 수 있다고 생각했다. 따라서 예시 코드 부분을 보여줄 때 각 의미단위 별로 띄어쓰기, '\n', 그리고 '#'을 적절하게 사용하여 보다 깔끔하게 시각화하였다. -## 추가 내용 Details - 원본 문서에서는 `model`과 같은 변수를 변수라고 칭하지 않지만 config 파일 특성상 변수라고 칭하는 것이 맞다고 생각되었다. 따라서 `model`, `data_loader`등을 변수라고 구체적으로 칭하였고 변수 명은 번역하지 않고 영어 그대로 두었다. -- 원본 문서에서 "ResNet and ResNext backbones"라고 한정적으로 언급했지만 조금 더 포괄성을 넓히기 위해 "ResNet 계열"로 번역하였다. +- 원본 문서에서 "ResNet and ResNext backbones"라고 한정적으로 언급했지만 조금 더 포괄성을 넓히기 위해 "ResNet 계열"로 바꾸어서 번역하였다. - 원문에서 애매하게 줄임말로만 되어있는 부분이 있어 이를 영어로 풀어서 번역하였다. + 예시. BN은 Batch Normalization의 줄임말이며 이를 배치 정규화로 번역, GN은 Group Normalization의 줄임말이며 이를 그룹 정규화로 번역 - 원문에서는 "style"이라고 단순하게 나와있는데 이를 조금 더 구체화 시켜 예시와 함께 제시하였다. + 예시. PyTorch style, TensorFlow Style +- 원문에서 Runner 클래스에 대한 설명 없이 바로 Runner라는 단어를 써서 사용자들이 혼란스러울 것이라고 생각되었다. 따라서 Runner 클래스에 대한 간단한 설명을 추가하였다. + +예시. "Runner는 MMDetection 프레임워크에서 모델을 훈련(train), 검증(validation), 테스트(test)를 하기 위한 기본적이고 필수적인 모듈이다." + +- Pipeline에 대한 설명 역시 부족하여 이에 대한 간단한 예시를 추가하였다. + +예시. 데이터 파이프라인(이미지 크기 재설정 등과 같은 데이터 전처리 과정) + +- Evaluator에 대한 설명 역시 부족하여 이에 대한 설명을 추가하여 흐름이 어색하지 않도록 구성하였다. + +예시. "Evaluator는 MMDetection 프레임워크에서 모델을 평가하는데 사용되는 모듈이다." + +- Intermediate variable이라는 애매한 설명 대신 단순 variable이라고 생각하고 번역하였다. + +- `dataset_type` 부분에 더 구체적인 예시(CocoDataset, VOCDataset, 등)를 추가하였다. + +- `test_dataloader = val_dataloader` 의미에 대한 설명이 없어 이와 관련된 내용을 추가하였다. + +- `custom_hook`의 예시 코드를 원본 문서에서 보면 빈 리스트로 되어 있다. 빈 리스트 대신 실제 어떻게 사용할 수 있는지 보여준다면 더 좋은 문서가 될 수 있다고 생각해서 직접 예시 config 코드를 만들어서 삽입하였다. + -## 힘들었던 점? +## 🤔 생각해봐야할 점 +번역한 문서가 현재 아주 빠르게 발전하고 있는 AI와 관련된 문서이고 관련 학문에 대한 정립이 온전하게 되어있지 않기 때문에 번역하는데 있어서 굉장히 까다로웠다. 예를 들어 "gradient clipping"이라는 학습 기술을 직역하면 "기울기 자르기(?)"이다. 하지만 번역된 문서에 "기울기 자르기"라고 표시해놓으면 오히려 사용자들에게 혼란을 줄 수 있고 영어 그대로 "gradient clipping"이 단어를 이해하는데 더 좋은 방식일 수 있다. 따라서 한국인 커뮤니티에서는 "그레디언트 클리핑"과 같이 영어 발음 그대로를 한국말로 번역한 단어를 사용한다. "Mixed precision training" 역시 마찬가지의 경우이다. +이러한 점을 고려해 해당 프로젝트에서는 번역 시 애매하다고 생각한 부분을 영어와 한국어 모두 표기하는 방법을 채택하였고 그 부분에 있어서 명확한 기준점이 존재하지 않고 내 주관에 기대어 했다는 점을 언급하고자 한다. diff --git "a/\353\262\210\354\227\255\355\216\230\354\235\264\354\247\200.md" "b/\353\262\210\354\227\255\355\216\230\354\235\264\354\247\200.md" index 9629174e9f08dfe49542bf7c38aff54eef2e26da..c9bd110aa1b8dd79b0721d60733e1bbcb0be55a4 100644 --- "a/\353\262\210\354\227\255\355\216\230\354\235\264\354\247\200.md" +++ "b/\353\262\210\354\227\255\355\216\230\354\235\264\354\247\200.md" @@ -342,18 +342,18 @@ test_cfg = dict(type='TestLoop') # 테스트 Loop 유형 ## 최적화(optimization) 설정(config) -`optim_wrapper`는 최적화 관련 설정을 구성하며 최적화와 관련된 다양한 기능(미분값 한계 설정, 혼합 정밀도 훈련 등)들을 제공한다. 더 자세한 내용은 최적화 문서에서 확인할 수 있다. +`optim_wrapper`는 최적화 관련 설정을 구성하며 최적화와 관련된 다양한 기능(gradient clipping, mixed precision 등)들을 제공한다. 더 자세한 내용은 최적화 문서에서 확인할 수 있다. ``` optim_wrapper = dict( # 최적화 기능 설정 - type='OptimWrapper', # 최적화 기능의 유형, 혼합 정밀도 훈련을 활성화하려면 AmpOptimWrapper로 변경 + type='OptimWrapper', # 최적화 기능의 유형, mixed precision 방법론을 활성화하려면 AmpOptimWrapper로 변경 optimizer=dict( # 최적화 설정. PyTorch에서 모든 종류의 최적화 함수들을 지원. 자세한 내용은 https://pytorch.org/docs/stable/optim.html#algorithms 참고 type='SGD', # 확률적 경사 하강법 lr=0.02, # 기본 학습률 momentum=0.9, # 가속을 사용한 확률적 경사 하강법 weight_decay=0.0001 # 확률적 경사 하강법의 가중치 감쇠 정도 ), - clip_grad=None, # clip_grad를 None으로 설정하면 미분값 한계 설정(gradient clipping) 비활성화. 사용법은 https://mmengine.readthedocs.io/en/latest/tutorials/optimizer.html에서 확인 + clip_grad=None, # clip_grad를 None으로 설정하면 gradient clipping 비활성화. 사용법은 https://mmengine.readthedocs.io/en/latest/tutorials/optimizer.html에서 확인 ) ```