일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- python 문법
- Numpy data I/O
- Numpy
- seaborn
- Python
- Operation function
- pivot table
- 카테고리분포 MLE
- boolean & fancy index
- namedtuple
- Python 유래
- Python 특징
- VSCode
- 가능도
- Array operations
- linalg
- subplot
- 부스트캠프 AI테크
- 딥러닝
- type hints
- unstack
- ndarray
- 최대가능도 추정법
- dtype
- scatter
- groupby
- 표집분포
- Comparisons
- 정규분포 MLE
- BOXPLOT
- Today
- Total
또르르's 개발 Story
[Stage 1 - 01] BaseLine 작성 본문
1️⃣ Goal
- [BaseLine 작성] (추가 : 3/29, 기간 : 3/29 ~ 3/29)
- [데이터 전처리]
- Face Recognition (추가 : 3/29)
- Cross-validation 사용 (추가 : 3/29) - [모델]
- ResNet 152층 시도 (추가 : 3/29)
- Efficient Net 시도 (추가 : 3/29)
- Pre-trained 모델에 Fine-tuning 하기 (추가 : 3/29) - [Training]
- 앙상블 시도 (추가 : 3/29)
- Hyperparameter 변경 (추가 : 3/29, 기간 : 3/29 ~)
- Learning Schedular 사용 (추가 : 3/29)
2️⃣ Learning
없음.
3️⃣ Main Task
1) BaseLine 작성
1-1) Dataset 구성
class TrainDataset(Dataset):
def __init__(self, img_paths, transform):
self.img_paths = img_paths
self.transform = transform
def __getitem__(self, index):
image = Image.open(self.img_paths[index])
if self.transform:
image = self.transform(image)
label = make_label(self.img_paths[index])
return image, label
def __len__(self):
return len(self.img_paths)
1-2) DataLoader
train_dst = TrainDataset(train_data_list, transform)
test_dst = TestDataset(test_image_paths, transform)
train_iter = torch.utils.data.DataLoader(train_dst, batch_size=BATCH_SIZE, shuffle=True)
test_iter = torch.utils.data.DataLoader(test_dst, batch_size=BATCH_SIZE, shuffle=False)
1-3) ResNet-50
아래 코드를 참조했습니다.
[ResNet] 논문 리뷰 & 구현 (Pytorch)
안녕하세요, 소신입니다. 이미지 인식에서 엄청난 반향을 일으켰던 ResNet 입니다. Residual (잔차)를 학습한다해서 ResNet이라는 이름이 붙었습니다. # 기존 접근 방식의 문제점을 해결하기 위해 등장
wolfy.tistory.com
여기서 주의할 점은 마지막 classifier에서 input_dim과 output_dim (class 개수)를 맞춰주어야 합니다.
1-4) Make CSV function
Submission.csv를 만들어서 출력합니다.
from pandas import Series, DataFrame
def make_csv(model,data_iter,device, epoch):
with torch.no_grad():
model.eval()
all_predictions = []
for batch_in in data_iter:
model_pred = model.forward(batch_in.view(-1, 3, 512, 384).to(device))
_,y_pred = torch.max(model_pred.data,1)
all_predictions.extend(y_pred.cpu().numpy())
submission['ans'] = all_predictions
submission.to_csv(os.path.join(test_dir, 'submission'+str(epoch)+'.csv'), index=False)
print("submission.csv is generated")
model.train() # back to train mode
print ("Done")
2) Hyperparameter 설정
- Batch size : 80
- Loss : cross entropy
- Optimizer : Adam
- Learning Rate : 0.01 (epoch 10 단위 당 1/10씩 감소)
- Epoch : 30
4️⃣ Sub Task
1) Jupyter notebook에서 GPU 사용량 확인
Jupyter noteook에서는 google colab과 다르게 GPU 사용량을 확인하기 어려웠습니다.
따라서 GPUtil 모듈과 thread를 사용해서 2분에 한 번 check가 가능하게 만들었습니다.
ref) github.com/anderskm/gputil
import GPUtil
from threading import Thread
import time
class Monitor(Thread):
def __init__(self, delay):
super(Monitor, self).__init__()
self.stopped = False
self.delay = delay # Time between calls to GPUtil
self.start()
def run(self):
while not self.stopped:
print('\r')
GPUtil.showUtilization(useOldCode=True)
time.sleep(self.delay)
def stop(self):
self.stopped = True
monitor = Monitor(120)
하지만 모델을 train하는 부분에 같이 겹쳐서 나와서 쓸모가 없...
2) glob 기능
glob는 조건에 만족하는 모든 파일의 path를 가지고 올 때 많이 사용합니다.
train_data_list = [filepath for filepath in glob.iglob(f'input/data/train/images/*/*.jpg', recursive=True)]
4️⃣ Evaluation
1) BaseLine 작성
BaseLine 작성은 기본 CNN 구조 DataLoader와 ResNet 모델을 사용해서 만들었습니다.
추가적인 hyperparameter 수정이 필요합니다.
2) Hyperparameter 설정
Batch size는 더 늘리고 싶었지만, GPU 용량 초과로 80 정도로만 사용했습니다.
Accur와 f1 score는 다음날 확인합니다.
3) 차후 목표
ResNet 151층 시도, 데이터 전처리로 정확도 높이기
'[P Stage 1] Image Classification > 프로젝트' 카테고리의 다른 글
[Stage 1 - 06] 최적의 Hyperparameter 찾기 (0) | 2021.04.05 |
---|---|
[Stage 1 - 05] Remote Server에서 NNI (Auto ML) 사용하기 (0) | 2021.04.04 |
[Stage 1 - 04] Focal Loss (0) | 2021.04.02 |
[Stage 1 - 03] Model & Optimizer (0) | 2021.04.01 |
[Stage 1 - 02] Data Processing (0) | 2021.03.30 |