인공지능

2021AI엔지니어 고급반 - YOLO with deep learning 교육 프로그램 참가 후기 5일차

Razelo 2021. 8. 27. 18:46

드디어 끝이 났다. 

어제 밤과 오늘 아침이 제일 바빴다고 생각한다. 언제 이렇게 몰두해서 무언가를 해봤었는지 기억이 가물가물했는데 재밌어서 그런건지 아니면 새로운 분야라 내게 자극을 준것인지 어떤 이유에서인지 모르겠지만 정말 몰두해서 작업했다. 내가 모르는 기술 즉 처음 본 기술을 본 누군가는 그 기술이 마법같아보인다고 했다. 마찬가지다. 일반적인 코딩만 하면서 구조를 만드는 작업에서는 딥러닝을 이용한 작업에서 마주치는 문제들과 전혀 결이 다르다. 확실히 다른 분야라는 것을 느끼게 되었다. (알고리즘을 무엇을 선택하고 어떻게 관계를 맺을지 혹은 어떤 책임을 부여할지 고민하는 것과는 확연히 다른 고민을 하게 되었다. 이 프로그램의 경우 주로 어떻게 데이터셋을 구성해야 좋은 결과가 나올까? 혹은 왜 이런 결과가 나왔으며 무엇때문에 이 결과가 나온지에 대한 추론이 꼬리를 물었다. )구조를 설계하는 엔지니어링 역량이 아닌 연구역량이 즉 사이언티스트적인 역량이 필요한 곳이라는 것도 알게 되었다. 그렇게 느꼈다. 

 

4일차와 오늘 아침까지의 내용을 요약하면 다음과 같다. 

우선 4일차에서 mAP가 잘 나오지 않았다. 하지만 막상 웹캠으로 테스트를 해보면 상당히 잘 인식을 했다. 하지만 실제 그래프상에서 나타나는 것이 마음에 들지 않았다. 그래서 이것을 개선시키고자 데이터셋을 상당히 많이 고쳤다. 집어넣었다가 다시 빼고 라벨링을 수정했다가 다시 넣고 뭐 그런 작업들을 정말 많이 했다. 

 

그리고 지금까지 데이터셋을 고친 과정을 간략하게 설명하면 다음과 같다. 


1회차 학습때 데이터가 개수가 균형이 맞지 않았다. 백인이 500장, 흑인이 190장, 황인이 300장으로 진행하였다. 
또한 단체 사진도 없는 상태에서 1차 학습을 돌렸다. 
그래서 1차때는 혼자있는것은 잘 인식했지만 단체 사진을  잘 인식하지 못했다. 

잘 인식하기 위해서 2회차 학습때는 
단체 사진을 집어넣었다. 또한 사진도 각각 개수를 맞추기 위해서 500장씩 맞추어 주었다. 
또한 이목구비에 집중하기 위해서 머릿카락이 들어가거나 모자를 쓰거나 그늘이 져있는 얼굴 사진과 같은  
애매한 사진들은 제외하였다. 

또한 1차때 섞여있었던 흑백사진때문에 백인과 흑인을 혼동할 수 있다고 생각해서 
흑백사진도 제외하고 진행하였다. 그렇게 2차 학습을 진행하였고 
여기서 조금 더 개선시키기 위해서 화질이 깨진 사진을 제외하기로 했다. 

3회차때는 인식률이 화질이 깨진 단체사진때문에 떨어졌다고 생각해서 품질이 안좋다고
판단한 단체사진을 꽤많이 제외했다. 그래서 품질이 좋은 단체사진만 남겨두었고
단체사진 중에서 사람이 너무 많아서 박스가 작아지는 사진들은 제외하였다. 
그래서 3~4명으로 구성된 단체사진으로 추리게 되었다. 

그리고 조금 더 개선을 하기 위해서 3회차때 데이터셋을 조금 더 다듬고
파일이름을 변경했다. (white, black, yellow 명시적으로 바꾸었다.)

 

결과적으로는 총 3회를 학습했지만 2회차 가중치 파일이 테스트에서 가장 높은 인식률을 보였다. 

사실 이부분에 대해서는 정확히 추측만할 뿐 왜 그렇게 동작했을까에 대한 내부를 들여다볼 수 없어서 즉 원인을 알아내지 못하고 그저 유추밖에 못한다는 점이 답답했다. (어느 정도 예상은 했다. 다만 다시 학습을 돌려봤을때 그 예측에 대한 결과가 안나왔을 뿐이다. ) 이것 또한 딥러닝의 특성으로 인함이라 생각했다. 그리고 이점에 대해서 어떻게 생각하면 왜 모델을 구축하는 역량이 AI에서 중요한지에 대해서 두드러지게 나타난다고 생각했다. AI와 같은 영역이 아닌 다른 영역에서도 모델링은 중요하다. 하지만 우리는 그것을 흔히 설계라 부르며 혼동될 수도 있는 의미라 생각한다. 하지만 차이점은 분명하다. 그렇다면 구조를 설계했을 경우에는 내부에서 발생한 원인을 잡아낼 수 있을까? 당연히 잡아낼 수 있다. 단지 소프트웨어적 복잡도와의 싸움일 뿐 가능하다.

하지만 딥러닝의 내부를 들여다보는 것은 불가능하다. 즉 처음에 모델을 잘 설계하여 좋은 결과를 도출해내는 것이 중요하다는 뜻이 된다. 그리고 이 사실 역시 이 분야에서는 엔지니어링 역량보다는 연구 역량이 더욱 빛을 발한다는 사실의 증거이기도 하다. 

 

서론이 길었고 결과물을 준비하게 되었는데 

처음에는 우분투에서 터미널상에서 유튜브에서 다운받은 영상을 구동하여 얼굴 인식이 잘 이뤄지는지 확인하는 과정을 거쳤다. 하지만 속도가 상당히 느렸다. 일단 내 로컬 자체에서도 상당히 느리게 재생되었다. (처음엔 일부러 결과 확인을 잘하라고 느리게 재생해주는 줄 알았다. 그런데 노트북이 점점 따뜻해지는 것을 느꼈고 ZOOM 화면 공유를 하자 더 느려지는 것을 확인할 결과 그냥 많은 연산에 의함이라는 추측을 하게 되었다. ) 그런데 이게 ZOOM을 통해서 실시간으로 다른사람에게 전송하다보니 다른 사람들은 정말 거의 멈춘 화면을 보게 되었다. 

 

그러한 느리다는 피드백을 받아서 영상 자체를 다운받아서 결과물을 확인하는 쪽으로 방향을 바꾸게 되었다. (이 모든 과정은 알렉세이의 깃허브에 가면 모두 확인할 수 있다. 즉 영상에 라벨링 결과를 붙여서 확인하고 싶다면 mp4라는 키워드로 알렉세이의 darknet 리포지토리에서 검색하면 찾아낼 수 있다. 물론 이 과정에서 리눅스 환경에 맞게 명령어를 바꾸는 것은 필요하다. 그리 어렵지 않다.)

 

여기서 문제가 발생하는데 리눅스에서 avi영상을 재생하기 위해서는 다른 소프트웨어를 설치해야 한다. (번거롭게 USB로 윈도우로 옮겨서 확인했다.) 그런데 사실 다운받을 때 형식을 지정할 수 있던것 같은데, .avi말고 .mp4로 저장했으면 되지 않았을까? 왜 이걸 시도해보지 않았을까. 

 

결과는 나왔지만 조금 기대에 못미쳤다. 인식을 잘하는 경우도 있었지만 못하는 경우도 있었다. 사실 잘못된 인식을 하는 경우도 꽤 많았다고 생각한다. 
중간에 어두운 화면이 있을때 black으로 표시되거나 혹은 서양인이더라도 밝은 색이 안나오면 yellow로 표시되는 문제점도 발견하였다.   
데이터를 수집할때에 이목구비를 중심으로 모으게 되었지만 아무래도 황인과 백인의 피부색이 비슷하게 보이는 경우도 있고 어두운 곳에서는 흑인으로 인식하는 경우가 종종 있었다. 

이 모든 문제점들이 YOLO에서 1차적으로 대상을 인식할때 RGB 즉 색상을 기준으로 필터링하기 때문이라고 생각한다. (사실 그런 류의 조언을 이전에 해주시기도 했다.)

 

정말 오랜만에 재밌게 들은 독학아닌 공부였던 것 같다. 아 실습이라고 정정. 다만 코딩아닌 류의 실습. 

해당 분야에서 일하고 싶거나 이쪽 방향으로 조금 더 뜻이 있다면 좀 더 심도깊은 공부가 필요하겠다 생각했다.

 

팀원분들과 하루종일 밤까지도 ZOOM미팅에서 이야기하고 자기직전까지 카톡으로 서로의 상황을 확인하는 것들이 상당히 도움이 많이 되었다고 생각한다. 여태 진행했던 팀프로젝트들과 비교하면 사뭇 다른 분위기였다. 그 이유로는 5일간의 기간동안 압축되어서 밀도 높은 수업을 진행하면서 실습을 병행했고 방학이라는 점때문에 부담없이 들을 수 있다는 점도 크게 작용했던 것 같다. 사실 학기중에 진행한다면 누가되었든 프로젝트 외적인 요소들로 인해서 부담이 되지 않을 수가 없다. (물론 그렇지 않은 빌런들도 간혹 계시지만 정상적인 분이라면 그렇게 느낀다. ) 그런데 방학을 이용해서 진행되다보니 그런 부담감없이 온전히 내 시간을 쏟아부을 수 있는 시간을 갖게된 것 같다. 

이것저것 업로드하고 또 내려받아서 확인할게 많다보니 폴더가 갑자기 엄청 생겨났다. 오른쪽은 결과물로 생성한 영상이다. 싸이의 강남스타일도 만들어보았고 그냥 여러 인종의 사람들이 나오는 영상도 활용했다.

팀원 분 중 한분께서 비정삼회담 영상을 이용해서 만드신 것도 있는데 그건 나중에서야 결과가 나오긴했지만 꽤나 잘 인식했다. 그리고 한 강사님께서 마이클잭슨 영상을 추천해주셨는데 캐빈이 머리를 너무 흔들어서 인식이 잘안됬다. 그리고 검정말들이 나오면서 흑인으로 인식하는 바람에 그냥 빼버렸다. 

 

아래는 결과물을 캡쳐한 사진들이다. 영상이 저작권이 어떻게 되는지 잘 몰라서 일단 캡쳐만 했다. (영상으로 보면 조금 더 재밌다. )

 

결과는 3등을 했다. 조금 더 시간이 있었다면 더 좋은 결과물을 만들 수 있었을 것이라고 생각해서 조금 아쉽지만 그건 다른 조도 마찬가지일 터이니 만족한다. 재밌었고 새로운 것을 배웠다는 사실만으로 정말 좋은 시간이 된 것 같다. 

 

마침 딥러닝에 관심을 가지고 관련 영상을 보면서 흥미를 느끼던 와중에 신기하게도 타이밍이 절묘하게 이런 기회가 있어서 신청을 하게 되었다.

처음에는 머신러닝과 딥러닝에 대해서 어떤 환상을 가지고 있었던 것 같다. 그 환상이 언제나 멋지고 모든 것이 가능하다는 생각이들게끔하는 그런 잡히지 않는 막연한 환상이었지만 참가한 이후에는 조금 생각이 달라지게 된것 같다. (그런데 어쩌면 모든 것이 정말 가능할지도 모른다. ) 

 

멋져보이는 엣지의 기술이더라도 항상 쉽게 마법처럼 모든 것이 착착 진행되는 것은 아니다. 그 이면에 한땀 한땀 만들어내는 고생이 있고 어떻게 만들어낼까에 대한 고뇌가 있다. 그런점이 있다는 것을 느끼게 되었다. 하지만 그런 점을 알고서라도 여전히 상당히 매력적인 분야라는 생각이 들었다. 

 

마침 이 분야가 궁금했던 찰나에 좋은 경험이 되었다고 생각한다. 

반응형