comfyui 디테일러 남자얼굴 제외하기 #2

1탄 - comfyui 디테일러 남자얼굴 제외하기 #1
첫번째 방법을 테스트해보고 잘 작동한다면 그대로 써도 된다

문제는 디텍터라는 것이 하나만 사용했을때 신뢰성이 높지 않다는 것이다.

특히나 애니의 경우 그림체가 천차만별이기에 남녀구분의 난이도가 높다

포켓몬에서 남녀를 잘 구분하던 모델이라도 죠죠나 마음의소리 같은거로
넘어가면 ai입장에서 쉽지 않은것이다.

뭐 그정도 극단적이지 않더라도 그냥 나루토->원피스 이렇게만
되도 작동오류가 나는 경우가 많다. 이렇게 오류가 나는 근본적 원인은

판단근거가 애매하고 복잡하기 때문이다.

 

그렇기에 발상을 바꿔서 단순하게 갈 필요가 있다.

컴퓨터가 십진수를 안쓰고 0과 1의 이진수, 디지털이 된 이유는

3이라는 애매한 숫자보다 있다,없다를 명확하게 나타내는게

확실하게 오류가 줄어들기 때문이다.

 

여기서도 같은 방식으로

좀더 남녀구분을 잘하는 디텍터를 찾는 것보다

단순하게 얼굴을 다 찾는 디텍터와

단순하게 남자만 찾는 디텍터를 조합해서

모든 얼굴에서 남자 얼굴을 제외하면 여자 얼굴만 남는다는 

단순무식하면서도 명쾌한 논리로 가는 것이 훨씬 신뢰도가 높다는 것이다.

그 방식을 사용해서 모든얼굴에서 남자얼굴만 찾아서 제거한 결과이다.

여러번의 실험과 실사용결과 1탄에서의 모델보다 월등히 높은 신뢰도를 보여줬다

 

다만 이때 필수는 남자를 찾는 모델인데

다행히도 누군가가 만들어놨다. 만든 본인은 왜만든지 모르겠다고 했지만

https://civitai.com/models/1311477/adetailer-facelessugly-man-face-seg

 

찾은 결과를 비교해서 겹치는 부분을 제거하는 것은

segs filter (intersection) 을 쓰면 된다.

모두 impact-pack에 다 있다

ioa_threshold는 얼마나 겹칠때 제거할 것인가를 나타낸다

0.1이면 10%이상 겹치면 제거하라는 의미이다. 

남자 얼굴이 덜 찾아지긴 했지만 10%이상은 겹치므로 제거되어서 여자얼굴만 남게 된다

 

아쉽게도 남자얼굴 디텍팅도 신뢰도가 그렇게까지 높진 않다

여자 얼굴을 디텍팅하는 경우가 상당히 많은데 그것을 막기위해

여자얼굴은 못찾게 기준점수를 70점이상올릴 필요가 있다

그래서 남자 디텍터의 bbox_threhold를 70으로 맞췄다

저건 남자다움이 70점 이상일때만 찾아낸다는 뜻이다

 

그럼에도 불구하고 사실 이 예시는 좋은 예시가 아니다

여자야 어쨌든 남자의 경우 저정도면 조금만 삐긋해도 남자디텍팅 실패할 미모(?)이기 때문이다

 

그러므로 절대 착각하지 않도록, 대머리에 뚱보에 나이 많은 아저씨로

상대를 조져줘야할 필요가 있다

이정도쯤되면 솔직히 얼굴만 떼어뒀을때 판단이 애매하지만(눈썹이랑 입술이 참.. -_-)

대머리점수라는 치트가 강력하게 작동하므로 남자로 분류된다

 

하지만 위에서 디텍팅 한계를 70까지 상당히 높이면서 오는 부작용이 하나 있는데

얼굴이 일부분일 경우 잡지 못하는 경우가 있다는 것이다

 

위는 대머리로 만들어줬지만 남자디텍팅에 실패해서 아래에 빈회색만 프리뷰만 보인다

이럴경우 bbox_threhold 좀 낮추면 잡아주지만 반대로 여자도 남자로 잡을 확률이 높아진다

다시 이렇게 애매하고 복잡해질때는 

새롭게 단순한 방법을 찾는게 좋다. 여기서 좋은 방법은 

눈깔을 디텍팅해서 얼굴과 눈이 겹치는 얼굴만 남기는 것이다

이 경우 faceless 남자는 물론 눈이 안보이는 얼굴들은 반드시 제외가 가능하다

 

즉, 어떤 예외사항이 발생하면 해당 예외사항을 저격하는 방법을 추가함으로써

디텍팅의 신뢰도를 높여나갈 수 있다

게다가 디텍터는 찾는 시간도 1초도 안걸리기에 얼마든지 추가해도 부담이 없다는 큰 장점이 있다

그러니 이것저것 약점을 보완하다보면 나중엔 정말로 정확하게 원하는 것만 찾아낼수 있을것이다