인공지능

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

Razelo 2021. 8. 26. 10:46

오늘은 4일차가 되었다. 

3일차에 학습을 완료하고 테스트를 진행했는데 조금 부족한 부분이 있어서 오늘 개선시키기로 했다. 

하지만 방향을 어디로 잡을지에 대해서 고민이 있어서 강사님께 궁금한점을 여쭤보고 이를 통해 방향성을 잡기로 했다. 

아래는 내가한 질문과 그에 대한 답변의 요약본이다. 

 

주의: 말씀을 급하게 받아치느라 잘못들은 내용이 있을 수도 있음. 

 

개요: 일단 현재까지의 상황을 말씀드리면 
일단 지금 두명이 (인종별) 데이터를 돌려보았다. 
학습이 끝나고 그래프도 잘 나왔고 
가장 좋은 인식률이 93프로가 나왔다. 

이후에 테스트 이미지로 확인해보았는데 
흑인 백인 황인이미지를 줬을때 모두 잘 인식했다.
웹캠으로 제 얼굴을 확인했을때도 yellow(황인)로 잘 인식했다.  
하지만 아직 부족한 부분이 있어서 어느 방향으로 개선할지 고민중이다. 

문제점: 
만약 흑백이거나 혹은 황인인데 조금 밝은 필터를 썼을 경우 인식하지 
못할 수도 있을 것이라는 의견이 있었다. 그리고 어두운 곳에서 찍거나 
애매하게 색이 변조된 사진 등 사진이 깔끔하게 나오지 않은 경우에 인식을 잘 못할 것이라는
의견이 있었다. 단체사진도 나와있는 인물을 전부 다 인식하지 못했다. 

그래서 이 부분들을 해결하고 동시에 성능도 개선할 생각이다. 
정확도도 높일 생각생각이다. 
학습을 돌릴 경우 내부를 알 수 없다. 왜 그 결과가 나왔는지 알 수 없다. 그러니 가장 좋은 것은 직접 돌려보고

그래프를 보고 결정을 내리는 것이 가장 좋다.  

피부톤 위주로 했을떄와 오늘 새롭게 이목구비 인식으로 개선했을때의 weight파일을 구분해라. 그래야 나중갔을때 바꿀 수 있다. last weight와 final weight, best weight를 저장해두고 새로운 데이터를 추가했을때 만약 그 결과가 좋지 않다면 이전에 저장해둔 weight파일을 다시 활용하는 것도 좋은 방법이다. 
 
추가해서 학습할때는 처음부터 학습하는게 가장 좋다. 
왜냐면 랜덤으로 뽑기 때문이다. 

best weight 이든 last weight이든 일단 저장해놔라. 나중에 쓸일있음. 

2차 데이터셋 추가할 때도 만약 이목구비만 딱 찝어서 데이터셋을 새롭게 구성할 것이라면
eye.jpg 혹은 nose.jpg라고 해서 만약 눈코입만따로 할거면 파일이름 따로 해서 구분해라. 그렇게 명확히 구분해놓는 것이 나중에 데이터를 관리할 때 편하다.   

질문:
피부 하얀 황인 혹은 필터를 입힌 황인을 추가하게 되면 황인에 대한 인식은 높아질 수 있지만 
백인이랑 혼동할 수도 있다고 생각한다. 
그래서 이 문제를 어떻게 해결할지 고민중이다. 
그래서 일단 지금으로서는 이목구비만 딱 집중해서 라벨링을 할 생각입니다.
이렇게 하는 것에 대해서 조언을 들을 수 있을까요? 

저희가 크롤링하면서 모으다보니 이미지크기가 들쑥날쑥 합니다. 
이점이 인식률에 영향을 미치나요? 

강제적으로 축소 혹은 늘리다보니 좀 떨어질 수도 있다. width와 height가 cfg파일에 고정시켜놓았기 때문에 너무 큰 이미지는 학습 돌릴때 cfg파일 사이즈에 맞춰서 축소된다. 즉 결과에 안좋은 영향을 끼칠 수 있다. 

 

사실 사이즈는 맞추는게 더 좋다. 


좋은 이미지 즉 잘 선별된 이미지들만 있을때 학습을 돌려보면 된다.

인식률을 높이는데 있어서 이미지를 더많이넣는게 더좋나요 
아니면 적은 데이터라도 라벨링을 잘치는게좋나요?
따로 따로 영향을 받을 수 있다. 
그래프를 보고 판단해라. 데이터양을 늘리는건 오버피팅을 조금 뒤로 밀 수 있다. 
같은 이미지를 계속 보는게 오버피팅이다. 
다른 관점에서 봐야 한다. 데이터셋에서 양과 품질은 트레이드 오프가 아니다. 
-> obj.data에서 train에서는 무조건 내리고
accuracy에서는 내릴거다. 
오버피팅 -> 쏠리는 현상 -> 이미지를 많이 넣는게 무조건 좋지는 않다는 뜻이다. 
           뒤에서 오버피팅이 발생하면 안좋다. 
그러니 다양한 이미지로 구성하는게 좋다. 

저희가 백인이 500장, 흑인이 190장, 황인이 300장을 넣었는데
 각각 인종별 이미지를 비슷한 수로 맞추는 것도 인식률을 올리는데 도움이 되나요?
데이터 개수 맞추는게 제일 좋다. cfg 배치사이즈랑 연관있다. 랜덤으로 뽑을때
많이 넣은 클래스의 이미지만 오버피팅이 느리게 발생하는 문제도 있을 수 있다. 
클래스별로 학습할때 참조하는 이미지 개수를 맞춰야 학습이 잘되기 때문이다. 

단체이미지 혹은 여러명이 길거리에 있는 곳에서도 인식하고 싶은데 
이렇게 할려면 많은 사람이 나온 곳에서 인종별로 라벨링을 치는게 도움이 될까요?
사람 너무 많으면 박스가 작아져서 피쳐추출이 잘 안될수도 있다.
3~4명으로 하는게 제일 좋다. 

원래 어제는 피부톤에 초점을 맞춰서 흑백사진이나 애매한 사진은 모두 제외했다.
그런데 어떤 사진에서든 인식하기 위해서는 이목구비에 초점을 맞추는게 좋겠다고 
생각했다. 이목구비 자체에 초점을 맞추는게 맞는 방향인지 조언을 듣고 싶습니다. 

머리카락제외하고 이목구비에 초점을 두려고 한다. 
근데 이게 백인을 인식할때 금발까지 라벨링을 치면 조금 도움이 될 것 같긴한데, 
이대로 두는게 나을까요? 
아니면 아예 이목구비쪽만 라벨링 치는것으로 방향을 잡는게 나을까요?

너무 고해상도를 넣는건 좀 오버일 수 있다. 
사이즈를 지금 416으로 해놨기에 엄청 큰건 완전 작게 들어간다. 
width, height -> 416으로 되있기 때문이다. 

너무 흐린건 일단 제외하는게 좋고 사실 고해상도가 더 안좋다. -> 사이즈를 고정해놓은 상태인데
고화질로 라벨링을 해버리면
학습할때 정해놓은 사이즈에 맞춰서 아주 작게 축소가 되버린다. -> 안좋다. 

할일: 
1. 옆모습을 추가하자. (귀전까지!)
2. 단체사진(3~4명있는거)  
3. 500장으로 각자 사진 개수 맞추기 
4. 흑백이나 색바랜사진은 인식률에 안좋은 영향을 미칠 수 있다. 
  1차 필터링이 RGB 기준이기 때문에! 그러니 잘나온 컬러사진만 넣읍시다.

 

아직 사용은 하지 않았지만 사실 face와 관련하여 아주 양질의 데이터가 제공되는 곳이 있다. 

https://github.com/joojs/fairface

 

GitHub - joojs/fairface: FairFace: Face Attribute Dataset for Balanced Race, Gender, and Age

FairFace: Face Attribute Dataset for Balanced Race, Gender, and Age - GitHub - joojs/fairface: FairFace: Face Attribute Dataset for Balanced Race, Gender, and Age

github.com

 

그리고 한가지 중요한 사실을 알게 되었다. YOLO에서 학습을 돌릴때 1차적으로 RGB를 가장 우선으로 본다는 것이다. 색이 어떻게 되는지를 기준으로 본다는 사실 덕분에 흑백이미지 혹은 빛바랜 이미지들을 제외하는 방향으로 나아갈 수 있었다. 

 

4일차때는 주로 성능개선에 중점을 두었던 것 같다. 이미지들도 모두 500장으로 맞추었고 흑백사진들을 선별하여 걸러내었고 애매한 이미지들 특히 너무 그림자가 져서 애매한 사진들이거나 인종을 특정하기 어려운 인물들의 사진을 걸러냈다. 따라서 이를 통해 성능을 개선할 것이라고 생각한다. 또한 사진 양이 상당히 많이 늘었기 때문에 오버피팅이 좀 뒤로 밀려서 나중에 나타날 것이라고 생각한다. 

 

중간점검을 해봤는데 결과가 별로 좋지 않다. 

90퍼센트정도는 나올줄 알았는데 85%에서 머물고 있다. 어딘가에 문제가 있다고 생각되는데 데이터셋에서 어느 것이 문제인지 특정하기가 아직은 어렵다. 일단 결과를 보고 가장 best한 weight파일이 나올때까지 기다려야겠다. 

 

사진을 올리면서 팀원들의 진행상황을 체크하면서 중간점검을 진행했는데 문든 이런 생각이 들었다. 

내가 추가한 이미지들 중에서 gather.jpg라는 이미지가 있는데 단체사진만 모아놓은 이미지였다. 그런데 분명 강사님 말씀은 단체사진은 너무 많은 사람이 있으면 박스 이미지가 너무 작아지니 3~4명이 적당하다고 했다. 그리고 생각해보았는데 나는 그것보다 훨씬 많은 사람들을 라벨링했던것같다. 그래서 mAP가 90이상으로 진입하지 않을 수도 있겠다라는 생각을 했다. 

 

즉 단체이미지를 빼야겠다.

반응형