GETTING MY DUCKS IN A ROW

Bootcamp/2024 KT Aivle School

[KT AIVLE School 5기] AI 개발자 트랙 8주차 후기

Yoobin Park 2024. 6. 8. 23:23

2024.04.08 ~ 2024.04.12

 

이번 주는 시각지능을 이용한 미니프로젝트 4차와 꿀처럼 달콤한 휴강(투표날)이 있었다.

 

벌써 미니프로젝트를 절반(3.5)을 넘어 왔다니 역시 하루하루 뭔가 꾸준히 하다보면 역시 시간이 빠르게 지나간다.

하루를 좀 더 밀도 있게 보냈으면 좋겠는데 체력이 딸린다.

 

그리고 화요일은 국취제 상담 때문에 휴가를 사용했다 ㅜ...

 

4️⃣ 미니프로젝트 4차

🚗 차량 공유 업체의 차량 파손 여부 분류

4일 중 1 ~2일차는 차량 외관 이미지를 가지고 시각지능으로 차량 파손 여부를 분류하는 미니 프로젝트를 진행했다. 저번 2차에 이어 이번에도 조장을 맡았는데, 모델링하는 두 번째 날에 휴가를 써서 전처리까지 밖에 함께 참여하지 못했다. 하지만 주어진 실습자료 노트북을 채우기만 하면 돼서 전처리하고 남는 시간에  Inception V3와 CNN 모델링 까지 돌릴 수 있었다.

 

처음에 image rescaling을 안하고 모델을 돌리다보니 자꾸 노트북 실행이 중단됐었는데, 조원분께서 알려주셔서 모델링을 끝까지 해치울 수 있었다.

CNN 모델링 파트에서는 VGG 모델을 잘라서 모델링해봤는데, 오버피팅이 심한 모습을 볼 수 있었다. 이걸 좀 더 고쳐보고 싶었지만 한 번 돌리는 데에도 시간이 좀 걸리기도 하고, 어차피 사전훈련된 모델이 성능이 더 잘 나올 걸 알았기에 다음 cell로 바로 넘어갔다.

Inception V3 모델을 backbone으로 해서 모델 끝단만 좀 더 쌓아서 해보니 확실히 성능이 좋아졌다.

성능을 좀 높여보려고 chatGPT 물어보니 inception v3 모델에 들어가는 사진의 input_shape를 299로 rescaling하라고 코드를 고쳐줬다. 근데 255로 해도 잘 돌아가는데 왜 그런가 해서 좀 더 찾아봤더니 inception V3가 사전 훈련될 때 299 x 299 input size인 이미지에 대해서 훈련되었기 때문에 그 사이즈를 권장하는 것이라고 한다. Pytorch의 경우에는 fully-connected layer에 데이터 행렬이 들어가기 전에 어차피 adaptive average pool_2d layer를 거치기 때문에 어떤 사이즈의 이미지가 들어가든 똑같은 사이즈의 행렬이 되기 때문에 오류 없이 모델이 돌아간다고 한다.

흠... 내가 정확히 이해한 게 맞나?

https://stackoverflow.com/questions/57421842/image-size-of-256x256-not-299x299-fed-into-inception-v3-model-pytorch-and-wo

 

뭐가 됐든 성능이 좋으면 됐다.

🛰️ 인공위성 데이터로 도시 환경 개선

 

3 ~ 4일차는 인공위성 사진을 가지고 object detection으로 쿨루프 시공이 필요한 건물을 찾는 프로젝트를 진행했다.

 

강사님께서 주신 이미지는 거의 200개 정도였는데 이것만 가지고 기본 YOLO 모델을 돌려봤을 때는 bounding box를 너무 많이 잡고, 아파트 옥상 같은 다각형 옥상은 잘 인식을 못하는 모습을 볼 수 있었다. 

 

물론 IoU나 Conf 파라미터를 조정하면 됐지만, 일단 강사님께서 데이터가 적으니 직접 데이터를 수집해야 한다는 것을 강조하신만큼 데이터부터 모으기 시작했다. 데이터 수집에 제일 많은 시간을 쏟았다. 조원 한 명당 할당량을 정해놓고 수집하기도 하고, 다른 조에서 트레이딩 제안이 오기도 해서 150장 ~ 200장의 사진을 교환했다.

아파트 사진도 추가해주고... 기울인 사진들도 추가해줬다.

 

또 Roboflow로 작업하다보니 Roboflow universe에 aivle이나 cool_roof 등 키워드를 검색해서 지난 기수 에이블러나 현재 다른 에이블러가 작업한 옥상 사진도 끌어올 수 있었다. 그렇게 해서 600장을 모으고 augmentation을 적용하니 거의 2000장이 넘는 데이터를 확보할 수 있었다.

 

(참고로, Roboflow 무료 버전은 작업한 프로젝트가 무조건 Roboflow Universe에 올라간다. 발표 시간에 같은 기수 다른 분의 사진을 쓰신 분이 있었는데, 데이터를 만드신 분이 그 분 발표 끝나고 문제 제기를 하셨다. 프로젝트가 오픈소스에 올라간다는 걸 모르셨는지 기분이 좀 상하신 것 같았다...)

 

 

일단 데이터 양을 늘리니 확실히 옥상을 잘 잡는 것 같은데 이상하게 pretrained = True로 설정해놓으면 성능이 더 좋아져야 되는데도 불구하고 bounding box를 아예 못 잡는 대참사가...ㅜ

(이건 강사님께서 다른 하이퍼 파라미터 튜닝을 안해서 그렇다고 말씀해주셨다.)

 

.tune 메소드로 하이퍼파라미터 튜닝도 하니 제대로 bounding box를 잡고 옥상도 잘 분류하는 모습을 확인할 수 있었다.

 

👩‍🏫 전체 발표 참여

이번 미프 때는 전체 조별 발표에 도전해봤는데, 앞 분들이 너무 잘하셔서 맨 마지막 순서였던 나는 다른 분들 발표를 보면서 너무 똥줄 탔다. 어떤 분은 논문을 참고해서 모델이 낸 라벨링 결과 이미지를 다시 feeding 해서 데이터를 늘렸고, 어떤 분은 실제 B2G로 서비스 판매하듯 발표하셔서 상대적으로 발표자료가 화려하지 않은 나는 쭈굴해진 상태로 발표를 했다...

 

발표를 하고 강사님의 피드백을 듣고 나니 아쉬운 점이 너무 많았다.

 

1. .tune 메소드를 사용하는 과정에 시간이 너무 오래 걸려서 다른 모델의 하이퍼 파라미터를 건드려보지 못했다.

2. 모델 돌아가는 데 시간이 많이 걸렸다.

3. 수치적인 성능 지표를 제시하기 보다 육안으로 대충 봤을 때 얼마나 bounding box를 잘 잡았고, 얼마나 cool roof, generic roof를 잘 분류했는지만 보여줬다.

 

다음 번에는 이러한 부분을 보완해서 할 수 있다면 좋겠다. 항상 수치적인 지표는 중요하니까!

따스한 조원분들의 격려...감동...

 

스스로 형편 없다고 느낄 때면 조원분들이 항상 격려해주시는데, 너무 감사하다!

 

✅ 이벤트

🏆 1차 코딩테스트

 

코마가 끝나니 코딩테스트가 열린다고 한다.😂

자연과학 쪽 있을 때는 몰랐는데, 개발 쪽에 있으니 코테의 중요성이 정말 많이 느껴진다...

솔직히 그만큼 나한테 큰 벽으로 느껴진다. 차근차근 쉬운 거부터 하면 결국에는 될 거 알지만...

음...🙃