ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [08.27 P Stage Day5] - 🔥 First Week Retrospective(Image Classification)
    네이버 부스트캠프 AI Tech 2기 2021. 8. 28. 19:44
    728x90
    반응형

    첫번째 P Stage 전체 회고

    😵‍💫 개요 및 아무말 대잔치

    사실 본 글은 매일 매일 회고를 하면서 작성해야 하는데, 이번주는 유독 특별한 한 주였던 터라 수업을 듣고 나면 바로 대회 문제를 직행했다. 그래서인지 깜빡 해버렸다.(엄청난 핑계 ...😃)

    그래서 이번주를 돌아보면서 느낀 모든 것들을 정리해 보려고 한다.

    여러가지 좋았던 점들을 이야기 해보겠다. 요약을 하자면 ~

    1. Competition이라는 환경의 경험
    2. 나만의 서버를 통해서 자유롭게 학습을 진행할 수 있던 점(Colab과는 다른 환경),
    3. 딥러닝 모델 파이프라인을 전체 다 구현할 수 있던 점
    4. 이제 딥러닝이라는 넘과 좀 더 친해진 것 같은 느낌적 느낌

    정도 겠다.

    아쉬웠던 점들도 몇가지 있다.

    1. 물론 지금 팀 피어세션이 잘 진행되고 있지만, 팀 피어세션을 통해서 더 자유로운? 분위기를 만들었으면 좋겠다..
    2. 내 스스로 딥러닝 모델 성능 이슈에 대해서 더 시간 투자를 하지 않았던 점?(뭐.. 이번주에는 모델링 파이프라인을 경험하고자 했던 것이니 큰 문제는 아닐 것 같다.)
    3. 좀 더 코드를 꼼꼼히 보자?

    정도 겠다.

    📖 배운 것들

    이전, U Stage 에서는 전체적인 이론들을 학습했었다. 뭐, PyTorch 의 여러가지 기능들 및 문법이나 Python 문법, 딥러닝의 도메인 지식들 등등 과제가 있었지만, 코드 단계에서 단위로 구현하다 보니 전체적인 흐름이 그려지지 않았다.

    하지만, P Stage 에서는 이전 U Stage에서 부분적으로 학습했던 여러가지 프로세스를 통합적으로 구현하면서 전체적인 프로세스를 경험할 수 있었다.

    (!!!!!! 역시 네이버는 다 생각이 있구나?!??!?!😝)

    참 많은 것들을 배운 것 같다.

    1. Data Loading & Preprocessing

    : 이 단계는 원하는 딥러닝 목적에 맞게 데이터를 수집하고 로딩하는 단계이다. 또한 적당한 모델에 들어가기 이전에 적절히 데이터를 가공하는 작업도 진행한다.

    2. Data Set & Loader & Augmentation

    : PyTorch에서는 Data Set이라는 하나의 틀(?) 형태로 데이터를 다루는 것 같다. 안에 기본적인 init함수, getitem, len 함수 같은 구현할 것들과 이를 통해서 딥러닝이 학습이 진행될 때, 사용한다는 것을 알았다.

    또한 Loader라는 것에서 Augmentation을 적용한다. transfer 라는 것에 다양한 Augmentation 기능들이 구현되어 있다. 적절히 생각을 하고 적용하는 작업을 수행했다. 이 또한 모델의 성능에 영향이 가는 부분이기 때문에 전략이 필요할 것이다.(Crop, Resize, 등등)

    3. Pre-Trained Model Loading (Transfer Learning)

    : models 안에 있는 pre-trained 모델을 불러와서 모델을 구성할 수 있다. 나는 이전에 모델을 만들때, 모든 것을 Custom 하게 만드는 것인줄만 알았는데 최근에는 모델이 워낙 좋다보니 기존 모델을 사용하고 나머지 (전처리, 하이퍼파라미터 튜닝, 앙상블) 등등에서 성능이 좌우한다고 들었다.

    4. Training

    : 적절한 epoch와 batch size 만큼 돌아간다. 재밌는 점은 그냥 우리가 흔히 아는 for 문 2개로 동작한다는 것이다. 전에 deep learing 모델 train 함수를 볼때는 너무 복잡한 코드이기만 했는 데, Base Line으로 제공된 코드를 혼자 리뷰하면서 부분적으로 뜯어보니 각각의 의미를 알게 되었고, 물론 백지상태에서 처음부터 구현하는 것은 아직 무리겠지만, 다음에 비슷한 코드가 나온다면 더 친근하게 접근하고 해석할 수 있을 것 같다. 내가 원하는 Batch size, Model을 통해서 Train을 진행하고 acc 와 loss 를 구하는 코드를 짜보면서 어떤 식으로 코드가 흘러가는 지 알 수 있었다.

    5. Inference

    : 본 Infernce 부분은 기존에 짜 놓은 코드를 통해서 이용했다. 하지만 그냥 넘어가지는 않고, 코드 리뷰를 진행했다. 위에서 만들어 놓았던 모델을 가지고 Test Dataset을 돌려서 얼마의 정확도가 나오는 지 확인하는 부분이다.

    ✏️ 스스로 해결해보려고 했던 것들

    1. 주피터 노트북을 통해서 전체적인 파이프라인 구현 → Python 파일로 모듈화 진행
    2. : 많은 사람들이 주피터 노트북의 사용 편리함 때문에 ipynb 에 다 때려놓고 코드를 작성하는데, 모듈화를 해 놓으면 코드 유지보수같은 객체지향의 장점을 최대 활용할 수 있는 장점이 있다. 그래서 처음에는 Baseline 코드를 보지 않고 전체 프로세스를 혼자서 구현했다. 그 후, 모듈화를 진행했다.
    3. bus error가 나는 경우가 있었다. → Model의 input과 output이 맞지 않는다는 점..이었다.
    4. 서버에서 자꾸 shared memory 머시기 문제와 프로세스가 죽는 경우가 발생했다. → num_worker를 줄여서 해결했다.

    Peer Session 회고

    : 각자 진행했던 작업에 대해서 리뷰하는 시간을 가졌고, 여러가지 팀 전략을 짜 놓았다. (이는 최종 Wrap Up Report에 정리하겠다.)

    반응형
Designed by Tistory.