목록[AI]/[딥러닝 | 이슈해결] (11)
개발자로 후회없는 삶 살기
서론대회로 수행하고 있는 EAST 모델은 데이터를 로드하는 과정에서 geometry map, scoremap을 만들기 때문에 적은 데이터임에도 불구하고 1에폭당 10분이 넘게 걸렸습니다. 이를 해결하는 과정을 기록합니다. 본론- 데이터 로딩 과정EAST 모델 데이터 셋의 __getitem__은 위처럼 전처리된 데이터를 반환하기에 로딩 시간이 굉장히 오래 걸렸습니다. - 최적화로 시간 줄이기1. 기본 소요 시간제공받은 베이스라인 코드는 1 에폭에 13분이 소요됩니다. 2. AMP 적용with torch.cuda.amp.autocast(): loss, extra_info = model.train_step(img, gt_score_map, gt_geo_map, roi_mask)optimizer.zero..
서론 부스트캠프 대회에서 모델과 학습 파라미터는 고정한 채, 데이터 조작으로만 성능을 향상시켜야 하는 조건이 이었습니다. 현업에서도 데이터의 중요성이 강조되는 가운데 어떠한 데이터 처리로 성능을 향상시킬 수 있었는 지 단계별로 나열해 보겠습니다. 본론 - 초기 조건 학습 데이터 : 100장 에폭 : 30 모델 : base East 모델 - 모델 성능 비교군으로 사용할 베이스 라인 모델을 잡기 위해 초기 조건으로 학습시킨 결과는 다음과 같습니다. 변인 통제를 정확히 하고 고정 베이스라인 모델에 다양한 데이터 처리를 하여 좋은 결과만 앙상블 조합 후보로 둘 것입니다. - 1차 데이터 클렌징 1. 모든 기호와 단어는 뗀다. 2. 스탬프는 지운다. 직인 말고도 단어가 적힌 스탬프도 지운다. 3. ignore되는..
서론딥러닝 모델의 학습/추론 프로세스에는 많은 단계가 포함됩니다. 각 실험의 반복이 빠를수록 제한된 시간과 리소스로 더 효율적인 성능 최적화를 할 수 있습니다. 아래 과정으로 성능 최적화 기법을 적용해 보겠습니다. 본론- 모델 설정backbone : vit-base_path16_224input size : [224, 224]epoch : 1무거운 모델이 성능 면에서 비교하기 쉬울 것 같아서 VIT로 선택했습니다. 1 에폭만 돌려서 학습 속도의 차이를 확인해 보겠습니다. - 기본 Baseline 코드기법을 적용하지 않은 학습 결과입니다. 1 에폭이 동작한 시간과 사용한 메모리 양을 나타내었습니다. - With AMP-> AMP란?모델의 파라미터를 32-bit가 아닌 16-bit로 표현하여 배치 사이즈를 늘..
서론사설망에서 서버 간 통신으로 GPU 풀을 이용하는 과정을 기록합니다. 본론-> 깃허브https://github.com/boostcampaitech6/level2-objectdetection-cv-05/pull/20 feat: gpu pool 기능 구현 by SangBeom-Hahn · Pull Request #20 · boostcampaitech6/level2-objectdetection-cv-05Overview live 커스텀 코드에 적용할 수 있는 gpu pool 시스템을 구현했습니다. Change log logger/ support/ utils/ consumer.py publisher.py To Reviewer support/ 에 publisher의 메세지 큐를 제어할 커넥션 연결 컴포넌트와gi..
서론 MMdetection을 이용해서 convnext 백본 cascade rcnn 모델 학습 파이프라인을 제작하는 과정을 공유합니다. 본론 - mmdetection/configs에 config 파일 만들기 python tools/train.py \ ${CONFIG_FILE} \ [optional arguments] 학습을 할 때 config 파일을 인자로 주기 때문에 config 파일을 커스터마이징하면 원하는 동작을 수행할 수 있습니다. faster_rcnn r50의 config 파일입니다. faster_rcnn은 위 4개의 파일로 학습을 진행하며 각 파일을 수정하면 됩니다. 주의사항 🚨 faster_rcnn r101 같은 경우는 r50의 config를 베이스로 재정의할 수 있습니다. 재정의를 할 경우 ..
서론albumentation를 사용해야하는 이유와 다양한 활용 방법을 알아봅니다. 본론- albumentation 장점albumentation 토치 비전보다 빠르고 종류도 많고 탐지나 세그먼트 데이터에도 증강을 적용할 수 있습니다. def _transforms(self): return A.Compose([ A.RandomResizedCrop(height=150, width=300, scale=(0.3, 1.0)), A.Resize(100, 100), ToTensorV2() ])또한 사용 방법도 토치 비전과 동일해서 기존 코드에 바로 적용할 수 있습니다. A.Compose로 토치 비전과 동일하게 증강을 적용하기 위한 객체를 생성합니다. image = Imag..
서론Multi Node Single GPU 환경에서 GPU를 효율적으로 사용하기 위해서 GPU 풀을 구현해봅니다. Spring 쓰레드 풀과 같은 개념으로 GPU를 미리 할당 받아서 모아 두어 효율적으로 사용하기 위한 목적으로 볼 수 있습니다. 본론- 구현 목적다수의 GPU로 모델 학습을 돌리다보면 GPU를 100% 효율적으로 사용하기 어려울 수 있고, 프로젝트 종료 후에 실제 학습을 돌린 시간을 보면 절반도 안되는 경우가 있습니다. 그 이유는 누군가는 모델을 안 돌리고 있을 수 있고, 누군가는 모델을 돌리고 싶지만 현재 자신의 GPU를 돌리고 있어서 다른 실험을 할 수 없을 수 있습니다. 이렇게 되면 GPU utilization이 떨어집니다. 따라서 6개의 GPU의 사용성을 올리기 위해서 개개인의 GPU..
서론 모델 학습에서 가장 중요하다고 할 수 있는 데이터, 그러한 데이터를 불러오고 배치 사이즈만큼 feeding 할 수 있는 데이터셋과 데이터 로더를 깊게 다뤄봅니다. 본론 - 데이터 셋과 데이터 로더를 극한으로 공부해보자 1) 데이터 초기화하여(대입) x, y 정의하기 2) 데이터를 읽기 데이터 셋의 역할은 다음과 같습니다. 1. __init__ 데이터의 타입(자연어, 이미지)에 따라 다르지만 보통 이미지의 경우 학습할 데이터의 경로를 적습니다. 또한 증강 정의, 컬럼 삭제 등 초기화 작업을 수행합니다. 이처럼 정형 데이터라면 데이터를 읽어서 x 변수 y 변수를 초기화할 수 있고 이미지 데이터라면 데이터를 읽어서 증강을 선언하는 것이 일반적입니다. 2) __len__ 이것은 단순하게 총 길이를 나타내면..