1 - 3 일 주제: CNN 으로 이미지 이진 분류 문제를 풀기
- 1일차 - 이미지 데이터 정리 및 전처리
- 2일차 - CNN 모델 설계, 학습, 평가
- 3일차 - 전이학습 및 파인튜닝
1일차 - 이미지 데이터 정리 및 전처리
shutil
import shutil
shutil.copyfile("./test1/test1.txt", "./test2.txt")
shutil.copy("./test1/test1.txt", "./test3.txt")
shutil.copy2("./test1/test1.txt", "./test4.txt")
splitfolders
import splitfolders
splitfolders.ratio(input='넣을 데이터 경로', output='내보낼 경로', seed=2023, ratio=(.8, .1, .1))
이러한 모듈을 활용하여 zip 파일 안에 있는 파일을 구글드라이브로 업로드 후 코드 상에서 압축 풀기, 경로 이동, 복사, directory 명 변경 등을 처리 후에 train, valid, test 에 맞게 파일을 분류하는 작업이 필요했다. 처음하는 것이기도하고 이런 부분에서 저는 웹개발만 경험이 있던 터라 매우 미숙했지만 정말 좋은 경험을 했습니다. 이러한 교육에 목말라 했던 저는 진짜 너무너무 에이블스쿨에 감사함을 느끼고 열심히 공부하고 있습니다..ㅠㅠㅠ
2일차 - CNN 모델 설계, 학습, 평가
모델을 설계하는 것 자체는 반복적으로 실습을 했어서 쉬웠지만 문제는 val_accuracy가 0.5에 고정이 되면서 학습이 되지 않는 현상이 있었는데 이는 모델 설계에서 문제가 있어서 gradient 가 학습을 하는 방향으로 가지 않기 때문이라는 것을 배웠습니다. 원인은 이미지 데이터의 수가 너무 작아서 생겼었던 문제였습니다. 모델의 레이어를 깊게 쌓지 않도록 해서 해결했습니다.
그리고 Batch normalization 이나 Dropout 레이어에 대한 이해도가 낮은 상태에서 진행하다보니 마구잡이 식으로 모델을 설계하던 저의 모습에 살짝 현자타임? 이 왔었습니다 :|
그래도 부족한 부분을 미니 프로젝트 후 주말에 학습을 진행했습니다!
3일차 - 전이학습 및 파인튜닝 (오프라인)
전이학습은 제가 pretrained model 들을 딕셔너리에 넣어서 반복문을 돌면서 학습하도록 설정한 코드를 공유해서 팀원들끼리 모델들을 나눠서 학습해보고 비교를 했었고, PPT 제출을 당시에 없어서 적당히 PPT를 만들었었고, 저는 발표하는 조들을 보면서 저희는 단지 배우는 것에 집중한 반면에 다른 조들은 다름을 추구하며, 데이터 자체에 대한 탐구, 연구, 고민을 토대로 피피티를 만든 것이 보여서 많이 본받을 수 있었습니다.
4 - 5 일 주제: YOLO 모델을 활용하여 동전, 지폐 구분하기
- 4일차 - 폴더 세팅, annotation 파일 처리, YAML 생성 > YOLO 모델을 학습 및 평가
- 5일차 - 이미지 데이터 전처리, 다양한 detect 방식 등 자유 실습
4일차 - 폴더 세팅, annotation 파일 처리, YAML 생성 > YOLO 모델을 학습 및 평가
예비군 작계 훈련을 받고 와서 4일차 미니 프로젝트를 빠졌습니다.
5일차 - 이미지 데이터 전처리, 다양한 detect 방식 등 자유 실습 (오프라인)
팀원이 제공해준 자료를 토대로 집에서 학습을 한 후에 아래 사진과 같이 직접 현금을 찍어서 detect 해보면서 더 좋은 성능을 내기 위해서 필요한 것이 무엇인지 토의를 했습니다.
수업 초반에 강사님께서 모델에 신경쓰기보다 데이터 전처리를 강조해 주셔서 이를 위해서 팀원끼리 회의하는 시간을 가졌고, 역할분담을 해서 각자 진행을 했습니다.
저희 조의 경우는
- mosaic augmentation
- rotation augmentation
- add background image
- label 일부 영역 가리기
제가 mosaic augmentation을 찾아서 기존에 있던 이미지 데이터가 정면에서 깔끔하게 찍혀 있기 때문에 현금이 장애물에 가려지거나 렌즈 영역에서 벗어날 때 detection이 되지 않는 부분을 해결에 줄 것이라고 보았고, 확인을 위해 적용 및 학습을 진행했습니다. 다른 조원 분들은 가로 방향으로 지폐들이 찍혀 있어서 rotation을 적용하는 것을 해보거나, background 이미지에 유사한 형태가 있을 때 오탐지하는 것을 해결하기 위해서 background 이미지를 레이블 없이 그냥 넣어주는 방법 등을 시도해 보았습니다.
mosaic augmentation 후 YOLOv5s 를 학습한 결과는 아주 약간의 성능향상이 되었으며 100원짜리 동전의 경우에는 성능이 매우 낮아서 원인을 한번 알아보고 싶어졌습니다!
느낀점
저는 적극적으로 이번에는 팀장이 되지 않았습니다. 항상 제가 조장을 하다보니 다른 조장들은 어떤 방식으로 팀을 이끌고 역할분담을 나누는지 확인하고 싶었기 때문입니다. 하지만 이번에는 다같이 하자는 분위기가 조성되다보니 크게 팀장이 주도하는 것은 없이 중간만 가자는 마인드로 진행이 되었습니다.
이번에 저는 발표한 조들을 보았을 때 눈에 들어오는 것이 있었습니다.
- 어느 조는 팀원과 관계없이 인공지능에 대한 딥한 지식을 바탕으로 색다른 주제를 혼자 가져와서 피피티를 구성후 발표를 하는 것을 보았습니다. 이는 팀플에는 맞지 않는 행동이었으나, 팀원과 합의하에 했겠구나 생각하고 일단 발표를 하는 것이 대단해 보였습니다.
- 저와 친분이 두터워진 에이블러님도 뜬금 발표를 하시는 것을 보고, 큰 그림을 잘 그리셨다는 인상을 받았습니다. 일단 해당 미니 프로젝트 주제에 대한 이해도가 높아서 먼저 앞서서 자신의 코드를 공유하고 못따라오시는 분들을 빨리 쫒아오게 만들면서 소통을 앞서서 진행한 것으로 알고 있습니다. 그렇다보니 3일치 분량을 1일차에 다 해버리셔서 2,3 일차를 진행하면서 PPT에 넣을 요소에 대한 고민을 진지하게 할 수 있었을 것으로 봤습니다. <- 이 점을 토대로 팀끼리는 코드를 다같이 공유하는 방식은 정말 좋다고 느꼈고, 협업에 대한 고민도 하게 되는 계기가 되었습니다. 그리고 무엇보다 피피티 만들때를 이미 기획을 다 해두어서 조원들이 혼선을 느끼지 않도록 명확하게 지시하고 컨펌을 받는 것이 인상 깊었습니다.
- 어떤 조는 특별히 미니 프로젝트 주제와 관련해 내공이 있지는 않았지만, 흥미로운 주제나 자료를 가져와서 이를 보여주는 형식으로 짧게 발표하는 것을 보고, 임팩트가 있고, 부담 없이 발표를 보기에 좋았습니다. 이런 방식으로 고민해보고 저도 발표를 시도해보면 좋겠다는 생각이 들었습니다.
발표한 조들과 강사님께서 마무리로 말씀하신 부분들을 종합했을 때 추가로 공부해볼 부분은 아래와 같습니다.
- 이미지 데이터 자체를 전처리 모듈을 활용 하는 방식
- YOLO 모델의 하이퍼 파라미터를 수정하기
- 동영상 detect 해보기
- 모델 저장 및 로드
- 모델 평가 및 활용
- tensorboard 로 시각화
미니프로젝트에 참고한 사이트
'Experience > - KT AIVLE School' 카테고리의 다른 글
KT AIVLE School 11주차 정리 - 미니프로젝트 5차 (0) | 2023.04.14 |
---|---|
KT AIVLE School 10주차 정리 - 미니프로젝트 4차 (0) | 2023.04.09 |
KT AIVLE School 9주차 정리 - 코딩 테스트 후기 (0) | 2023.03.31 |
KT AIVLE School 7주차 정리 - Object Detection (0) | 2023.03.15 |
KT AIVLE School 7주차 정리 - 전이 학습과 파인 튜닝 (0) | 2023.03.15 |
KT AIVLE School 7주차 정리 - Colab에서 이미지 파일 정리 (0) | 2023.03.15 |
댓글