손 글씨 (숫자) 분류 AI 해커톤

알고리즘 | CV | 분류 | 제어 | Accuracy

  • moneyIcon Prize : 참가시 최소 50 XP, 특별상 데이콘 후드
  • 455명 D-9

 

파이토치 데이터 증강법 (점수: 0.835)

2021.11.17 05:19 4,062 Views language

안녕하세요. 파이토치의 트랜스폼을 이용하여, 데이터 증강(토치비전 트랜스폼)으로 모델 성능을 향상하고자 하였습니다. 혹시 잘못 된 부분이나 질문은 덧글 부탁드립니다. 감사합니다. 

(리더보드의 점수 0.835는 하이퍼파라미터에서 dropout=0.5, epoch=500 번 정도에 해당하는 점수입니다.)

Code
로그인이 필요합니다
0 / 1000
척척석사
2021.11.17 07:50

꼭 수행해보고 싶은 테크닉이었습니다! 잘 정리해주셔서 감사합니다 :)

brotherhoon88
2021.11.17 08:34

공유 감사합니다 :)

자몽허니블랙티
2021.11.24 10:34

좋은 글 감사합니다!

brotherhoon88
2021.11.27 12:22

마가리따님 궁금한게 있어서요.
마가라따님의 코드를 적용해서 좋은 스코어를 얻었습니다.
궁금한점 트레이닝 시 매번의 애폭마다 다른 트랜스폼드 이미지가 들어가는건가요?
아니면 한번 변형이 되면 동일한 트랜스폼드 이미지로 픽스되는건가요?

데이터셋의 변형만을 확인할 수 있지 증가(augmentation)는 보이지 않는것 같아서요.

마가리따
2021.11.28 16:40

안녕하세요. 엄밀히 말하면 데이터 개수 증가는 없습니다. 트랜스폼만 적용한 이유는 두 가지 입니다. 1) 데이터 개수를 증가시켜서 메모리에 올려두거나 디스크에 넣어두고 학습하면 코스트 낭비라고 생각했습니다. 2) 변형 된 데이터 픽스해두고 그걸로만 학습시키면 generalization 관점에서 손해일거라고 생각했습니다.

트랜스폼은 매 에폭마다, 매 배치마다 변형 메소드의 argument로 들어간 확률만큼 변형이 일어납니다. 위 노트북에서 "학습 데이터에 트랜스폼을 해주었을 때, 데이터가 어느 정도로 변형 되는지 확인" 아래 셀을 보시면, 루프가 배치나 에폭이라고 생각하시면 될거 같습니다.

추가로 위 코드와 같이 커스텀데이터셋 클래스를 만들고, 트레인로더에서 데이터를 불러오도록 하면, 각 배치의 모든 데이터가 각각 (확률에 따라 다르게 만들어진) 다른 트랜스폼 식이 적용됩니다.

brotherhoon88
2021.11.29 13:16

매번의 epoch마다 새롭게 변형된 trainset이 적용된다는 개념이 맞나요??
마가리따님 덕분에 적은 메모리에서도 효율적으로 트레이닝이 된 것 같습니다.

마가리따
2021.12.01 01:26

넵 맞습니다. 대신에 원본 trainset 그대로 학습에 이용하지는 못하기 때문에 트랜스폼 적용하지 않은 코드도 사용하면 더 좋을 것 같습니다.