# 개발환경 구축
jetson AGX orin
jetpack 6.1
CUDA 12.6
torch-2.5.0
python 3.10
위의 requirements.txt는 보드에 맞게 깔아준 라이브러리 모음
리눅스 환경에서 sklearn과 pandas를 쓰기에는 각 환경에 다 맞춰줘야 함
때문에 baseline code에서 모두 torch로 변경해서 돌릴 예정임
# baseline code
설정값 지정
CGF라는 딕셔너리에 주요 설정값 저장
IMG_SIZE가 299인 이유는 분류 모델에 사용하는 Inception-ResNet-v2의 input size임
분류 모델을 변경할시 사이즈도 변경 고려
BATCH_SIZE 또한 컴퓨터 자원에 따라 맞게 수정해야 함
32는 보드에서 돌리기에 너무 커서 줄일 예정
데이터 로드
glob를 이용해 ./train/*/* 경로의 모든 이미지 경로를 읽고
암석 종류(rock_type)을 폴더 이름으로 가져와서 DataFrame 생성
train/암석이름/이미지.jpg 구조라서, split으로 폴더 이름 추출
Train / Validation split
Stratify 옵션으로 라벨 분포 비율 맞춰서 70:30 비율로 split
라벨 인코딩(LabelEncoder)으로 문자 → 숫자 인코딩
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html
데이터 전처리 및 커스텀 Dataset
PadSquare class
> 이미지를 정사각형으로 패딩 = 크기 통일
CustomDataset class
> 이미지 path, label, transform 받아서 이미지 로드 -> transform 적용 -> (이미지, label) 반환
적용할 transform
DataLoader 생성
train/validation용 DataLoader 각각 생성
여기선 shuffle 없이 데이터 로딩 > 개선 가능할 듯
Train
- CrossEntropyLoss 사용
- for문으로 epoch별 학습
- train/validation loss, macro F1 계산
- ReduceLROnPlateau 스케줄러 사용 (val F1 score 기준)
Validation
Validation dataset으로 예측값 얻어서
macro F1 score 계산 << 리더보드 평가지표
모델 설정
timm의 inception_resnet_v2 모델 사용 < 무거운 모델이라서 보드에서 돌릴 땐 mobilenetv3 변경 가능성
pretrained weight 불러오고, num_classes=7로 맞춤
optimizer, scheduler 설정
각각 Adam optimizer과 ReduceLROnPlateau 스케줄러를 사용함
Test 데이터셋 불러오기 & 추론
test.csv 불러와서 test dataset 생성
> inference 함수로 예측값 뽑음
> LabelEncoder의 inverse_transform으로 원래 Label 복원
Submission 파일 생성
sample_submission.csv 가져와서
예측값으로 갱신하고, csv 저장
> torch로 sklearn과 pandas를 대체할 코드 작성
> 보드에서 돌릴 때 loss 값이 안 나오는 문제 파악하기
카페 게시글
과제게시판
[DaconAIContest] - 개발환경 구축 및 baseline code // score_0.67298
신민서
추천 0
조회 134
25.05.01 21:11
댓글 0
다음검색