16주차

J. Hwang·2024년 11월 24일
0

Boostcamp AI Tech

목록 보기
16/25

Day 1. Monday

✏️ 복습

👶 Mentoring

  • 첫째 주 대회 진행 상황 보고
  • multi-label 부분 처리
    → Binary Cross Entropy
    → segmentation_models.pytorch/examples/camvid_segmentation_multiclass.ipynb
  • paperswithcode.com
  • Segmentation Models (smp) 활용하기
    SOTA 모델을 무작정 활용하기 보다는 잘 알고 있는 라이브러리를 이용하는 것이 베이스라인 코드를 작성하는데는 더 적합하다. (MONAI는 3d 의료 segmentation에 너무 특화되어 있어서 오히려 불편할수도)
  • 통일된 베이스라인 코드로 실험하기
  • 이번 대회의 경우 간단한 작업이므로 100 epoch 이내로 수렴시키는 것이 좋다.
  • 256 x 256으로 여러 라이브러리/모델로 실험해서 잘 나온 것만 1024 x 1024를 적용하는 것이 전략적임
  • 탐색할 범위를 미리 정해두고 각자 역할을 나눠 augmentation 실험하기
    • Architecture : UNet, DeepLabV3, ...
    • Encoder : ResNet, Den, Eff, ViT, ...
    • Resize : 512, 1024, ...
    • Loss
    • Hyperparameter
    • Augmentation : Brightness, Contrast, Blur, Zoom, ...
  • Albumentations demo 페이지를 활용하면 웹 상에서 미리 augmentation을 적용해서 어떻게 되는지 확인할 수 있다.
  • Albumentations OneOf 기능 사용해보기 : augmentation의 종류가 많아지면 조금씩만 적용해도 많이 달라지기 때문에 비슷한 계열의 augmentation끼리 OneOf해서 n개 중 하나를 p의 확률로 적용하도록 설정하여 데이터 증강을 할 수도 있다.
  • prediction 시각화 코드 만들어서 무엇이 잘 되고 무엇이 잘 안되고 있는지 실험 후 분석할 수 있어야 한다.
  • 팀 내에서 조건 고정하기 (split 등)
  • 대회 후반부에 상위권 모델들끼리 앙상블, TTA 적용하기
  • 뼈가 많이 겹치는 손등에 대한 모델만 따로 만들어보는 것도 좋은 방법

🙌🏻 Peer Session

  • 1024 x 1024는 20 epoch만 되어도 0.96의 점수를 얻음 (필요 이상의 epoch 돌리기 X)
  • smp로 encoder 갈아끼우면서 실험할 필요성
  • 베이스라인 코드 만드는 방법
  • augmentation 실험 계획 → 내일 만나서 실행하기
  • Github issue, commit, push, pull request 방법
  • 추가 베이스라인 코드 작성 역할 분담
    • visualization
    • ensemble
    • wandb
    • early-stopping
  • private dataset과 가장 유사한 k-fold set 정하기

📋 Memo

오늘 멘토링에서 지난 주 우리가 진행한 상황들을 보고하는 발표를 하면서 모더레이터 역할이 완전히 마무리되었다. 생각보다 날카롭게 질문이 들어와서 좀 깨졌고 그만큼 내가 코드에 대한 이해가 아직도 많이 부족하구나 느껴져서 슬펐다. 아무튼 우리 팀이 다들 엄청난 실력을 가지고 있는 것은 아니지만 열심히 잘 하는 사람들은 모였기에 잘 굴러가고 있는 것 같아서 좋다. 나도 더 열심히 해서 원리부터 잘 이해하고 있는 사람이 되어야지.


Day 2. Tuesday

✏️ 복습

🙌🏻 Peer Session

  • 학습 코드에 wandb 적용하는 부분 추가 → develop branch에 업로드
  • ensemble 코드 작성 완료 → ensemble branch에 업로드 후 develop branch에 merge
  • augmentation 실험 계획 (pixel value 관련)
    CLAHE, GaussianBlur, Sharpen, RandomBrightnessContrast
  • 시각화 코드 완성 → 라벨링 오류 찾기

📋 Memo

오늘 처음으로 새 팀원들을 만났다. 성남 교육장까지 가는 것은 힘들었지만 직장인처럼 건물로 들어가니 기분은 신선했다. 모여서 중간 중간 잡담하고 장난치고 바로 앞에서 같이 봐야할 부분 공유하고 논의하고 하니 좋았다. 다 같이 으쌰으쌰하고 저녁까지 함께 먹고 더 친해질 수 있었던 날이라 아주 알찬 하루였다!


Day 3. Wednesday

✏️ 복습

🙌🏻 Peer Session

  • smp를 활용해 UNet++ architecture에서 encoder 갈아끼우는 실험
  • inference.py 디버깅 필요 → 왜 test image를 못 찾나
  • 잘못된 라벨링 찾기 with my 시각화 코드
  • augmentation할 때 A.OneOf 적용해보기
  • early stop 추가
  • 2차 augmentation 실험 (geometric augmentation)
    • hyperparameter 설정은 1차와 동일
    • HorizontalFlip, Rotate
  • 손목만 보는 모델 만들기
  • k-fold 실험
  • 잘못된 라벨 찾기

📋 Memo

이벤트가 많아서 바쁜 날이었다. 데일리 스크럼 뿐만 아니라 피어 세션에도 지금까지 대회 진행한 내용들을 서로 공유하고 피드백 받고 앞으로의 계획을 세우고 하는 것도 바쁜데 컴퍼니 데이에서 회사에 대해서도 정보를 얻고 두런두런에서 이력서 작성법에 대해 특강을 들으니 꽉 차서 바쁜 하루가 금방 지나갔다. 전부 소화하기 힘들어서 배탈이 나고 있는 요즘이지만 집중해서 효율적으로 시간을 쓰고 남는 시간에 보충할 수 있도록 최대한 노력해봐야겠다.


Day 4. Thursday

✏️ 복습

🙌🏻 Peer Session

  • Monai UNet++가 가장 성능이 좋음
  • 손목 모델 실험

    • geometric augmetation 없이 pixel value 조정하는 augmentation만 이용
    • crop과 masking 2가지 방법 (을 이용하려고 했으나 멘토님 조언에 따라 crop만 이용)
    • image size = 512, train batch size = 8, test batch size = 4
    • test image crop할 방법 → 노가다? contour?
  • wandb 업데이트 진행 상황 보고

  • fold 실험 내용 진행 상황 → 3/5 진행 중

  • relabeling 진행 상황

    • label 잘못된 케이스 찾아내는 중
    • 이 외에도 outlier 기록 (네일아트, 각도, finger 특이 케이스 등)
  • contour를 따로 따보면 작은 새끼 손가락 끝부위도 잘 detection하지 않을까?

📋 Memo

성능을 높이려는 시도로 손목만을 보는 모델을 만들기로 했다. 어떻게 할지 감이 잡히지 않아서 가만히 있으려고 했는데 아무도 먼저 하려고 하지 않아서 어차피 다들 모르는거 내가 도전해봐야겠다 하고 시작했다. 구체적으로 어떻게 해야할지는 유리의 도움으로 아이디어를 생각해낼 수 있었는데 막상 구현해보니 이런 저런 문제들에 부딛혀서 아직 학습을 시작하지 못했다. 도전해보는 것은 재미있어서 꽤 집중력을 들여서 했는데 시간은 없고 빠르게 문제를 해결해야 한다고 생각하니 밤늦게까지 고생하게 되었다ㅠㅠ 그래도 열심히 파고들어서 문제를 해결해볼 수 있도록 해야겠다.


Day 5. Friday

✏️ 복습

🙌🏻 Peer Session

  • 팀 회고지 작성
  • augmentation이 그리 효과적이지 못함
  • 손목 모델 실험
    • main.py에서 CLASSES → 손목 부위 8개 뼈만 남겨둬야 하는 것에 유의!!!
  • 1024 x 1024 실험 → 17시간 소요 중
  • Timm transformer (ViT, Swin, HRNet)를 smp에 적용해서 실험 돌리기
  • wandb 시각화 문제 : 기학습된 모델 불러서 inference하는 부분의 문제를 해결해서 결과 시각화 가능!!
  • server to server 파일 전송하기
    chmod 600 orbitx.pem scp -r -i orbitx.pem -P portnum filename.py root@ip:/data_root
  • k-fold 실험
    • fold 0이 validation과 리더보드 점수 간 차이가 가장 적음
    • fold 1이 리더보드 성적이 가장 좋음

📋 Memo

어제부터 밤새 손목 모델 관련해서 고민하고 자료 뜯어본 결과 crop해서 annotation을 수정할 수 있게 되었고 그것을 바탕으로 모델 실험 시작을 할 수 있었다. 처음엔 막막해보였는데 열심히 붙어서 문제가 해결되니 뿌듯하다. 이런 경험을 양분 삼아서 앞으로도 계속 발전할 수 있으면 좋겠다.

profile
Let it code

0개의 댓글