23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
안녕하세요! SKT AI Fellowship 4기 6번 과제를 연구한 팀 Aegis입니다. 이 글이 저희의 마지막 글이 될 것 같습니다. 지금부터 저희가 과제를 수행하기 위해서 했던 공부들을 공유하려고 합니다.
과거엔 주로 TV 방송으로 미디어를 즐겼다면, 최근엔 유튜브나 OTT를 통해 대부분의 미디어를 접하게 됩니다. 미디어의 종류와 양이 풍부해짐과 동시에 이를 관리하는 시스템에 부하를 가하고 있습니다. 요즘 초등학생들과 이야기해봐도 깜짝 놀랄 때가 많죠. 교육적으로나 사회적으로나 미디어의 즉각적이고 효과적인 관리는 필수적이죠.
따라서 저희는 아직 현업에 적용하기엔 부족하지만 잠재력은 충만한 솔루션을 통해 데모 웹애플리케이션까지 만들어 보았습니다. 그럼 이야기 시작하겠습니다🙂
연구계획서와 연구과정 게시글에서 저희가 유해콘텐츠의 필터링을 어떻게 할 것인지에 대해 충분한 설명을 했기 때문에 궁금하신 분들은 앞선 글을 확인해주세요😊
최종 보고서에서는 앞선 아이디어에서 어떤 수정과정과 어떤 결과물이 있었는지에 대해 초점을 맞추려고 합니다.
데이터셋의 모호성과 부족한 양 문제를 해결하기 위하여, 방송통신위원회의 심의 기준표를 바탕으로 데이터셋을 개선하였습니다.
최초의 Real time Transformer based HOI 모델을 개발하였고 benchmark 데이터셋에 대해 유의미한 결과물을 보였습니다.
실시간 화상 채팅 웹애플리케이션을 만들고 채팅 상황에서 특정 유해 상황이 발생했을 때 필터링(모자이크)을 하도록 하였습니다.
비디오 필터링 웹애플리케이션을 만들어 비디오를 업로드하면, 유해 콘텐츠가 등장하는 시간대를 타임로그로 찍어주고, 해당 장면을 모자이크 된 영상을 다운받도록 만들었습니다.
그럼 상세하게 VTD 모델을 어떻게 만들게 되었고, VTD 모델의 성능은 어느정도인지 설명하고, 데모 영상을 보여드리겠습니다!
저희는 kaggle과 웹크롤링을 통해 여러 class에 대해 이미지를 수집하고 회의를 거쳐 해당 이미지의 적합성을 의논하였습니다. 이후, HOI의 task에 맞추어 LabelImg를 이용해 이미지를 라벨링하였습니다.
추가적으로, 중간평가때의 피드백인 데이터의 모호성과 양의 부재를 해결하기 위하여, 기존 데이터셋을 방송통신심의위원회의 SafeNet 등급기준에 따라 새롭게 분류하였습니다. 따라서 총 5가지의 class에 대해 1220장의 train data와 285장의 test data를 구축하여 사용하였습니다.
새롭게 구축한 데이터셋을 이용하니, 기존의 데이터셋을 사용할 때에 비하여 성능이 눈에 띄게 증가하였습니다.
먼저 반복되는 이야기지만, HOI task를 이용한 VTD 모델을 이용하게 된 Motivation에 대해 간단하게 말씀드리겠습니다.
Human Object Interaction이란 화면에 등장하는 사람과 물체간 상호작용을 <human, verb, object> 형식으로 예측하는 task입니다. 따라서 Object detection과 같이 이미지내에서 bounding box와 class가 무엇인지뿐만 아니라 **“전체적인 이미지의 상황”**을 예측할 수 있어야합니다.
사람은 이미지를 볼 때, 단순히 “물체”로 상황을 추정하는 것이 아닌 해당 장면에서 여러가지 물체들의 상호 작용을 추정하며 이미지 전체의 상황을 이해합니다.
따라서 진정으로 모델이 “유해 콘텐츠”인지 아닌지를 파악하기 위해서는 “유해 상황”을 판단해야한다고 생각해서 HOI 모델을 적용하게 되었습니다.
HOI 모델들을 간단히 살펴보자면, HOI 모델은 Object detection의 상위 task이기에 Object detection 모델의 기본틀에서 head 부분을 변형하는 방식을 주로 사용했습니다.
따라서, HOI task의 연구는 CNN base의 Object detection 모델인 FC-RCNN을 변형하는 방식에서 시작하였고, 이후 Transformer 구조 기반으로 좋은 성능을 보여준 DETR 모델의 Decoder 부분을 변형해 성능을 끌어올리는 양상이 주를 이루었습니다.
모델의 성능을 향상시키기 위해서 많은 연구가 이루어졌습니다. “논문 소개 (CPC, MSTR, Iwin)” 하지만, 위와 같은 방식을 이용하면, 모델의 성능은 높아졌으나 기본적인 DETR의 한계점을 극복할 수 없고 무엇보다 “속도”는 고려되지 않았습니다.
HOI 모델을 유해콘텐츠를 필터링하기 위한 도구로 사용하기 위해서는 속도도 빠르고 성능도 준수한 모델이 필요했습니다. 따라서 저희는 HOI task에서 둘 간의 trade off를 고려한 연구가 없다고 판단하였습니다. 따라서 이를 해결하기 위한 새로운 모델 VTD을 개발하였습니다.
저희는 HOI 모델에서 발생하는 trade off의 가장 큰 원인이 object detection 모델의 framework라고 생각했습니다. 아래 도표를 보시면 VIDT+가 가장 합리적인 FPS 대비 가장 좋은 성능을 나타냄을 알 수 있습니다.
따라서 저희는 속도와 성능간 Trade off가 가장 적은 모델로 사용하는 VIDT+를 선정해 head 부분을 변형하기로 결정하였습니다.
ViDT+(ICLR 2022) 모델은 input image의 feature를 추출할 때 Swin Transformer를 사용하여, Transformer의 특징인 Contextual information과 hierarchical을 부여하였습니다.
Encoder 단에서 Patch와 DET token 전체에 대해서 Self attention을 취하지 않고, Reconfigured attention module을 활용하여 Patch와 DET token 각각 따로 Self attention을 취하고 마지막 단계에서만 Cross attention을 하는 효율적인 연산을 하였습니다.
Decoder에 DET token를 입력하고 Patch token을 EPFF Module로 fusion 해준 fused multi-scale token을 활용해 여러 scale의 결과물을 사용해 deformable attention을 취함으로써 inference time을 높이고, 작은 scale의 feature도 이용할 수 있도록 하였습니다.
Neck 구조를 이용함으로써 auxiliary loss를 사용해 성능을 올릴 수 있습니다.
결론적으로, VIDT+모델을 이용함으로써 hierarchy과 contextual information을 확보하고 30 FPS 이상의 inference time을 확보할 수 있었습니다.
저희가 만든 모델은 ViDT+ 모델의 전체적인 구조를 유지하며, HOI detection에 맞게 decoder 부분 Task specific하게 변경하였습니다.
input이 들어오게 되면, Swin transformer 구조를 이용해 계층적으로 patch들을 patch token으로 embedding 시키고 Reconfigured attention 연산을 수행해 계층적 정보를 담은 token들과 HOI query를 얻게 됩니다.
이후 patch token과 HOI query간에 cross attention을 수행합니다.
이후, Triangle Decoder로 들어가기 전에 query를 3개로 복사하여 self attention 연산을 수행하는데, human과 object 모두 object detection으로 간주할 수 있기 때문에 parameter sharing하였습니다.
따라서 이름은 Triangle Decoder이지만, Object Detection을 위한 decoder와 interaction detection을 위한 decoder 2개가 사용되었습니다.
마지막으로 Graph Theory를 사용한 Information Fusion block을 통해 산출물로 구하고자 하는 <human, interaction, object> Triplet 내 정보 간 결속성을 부여하였습니다.
결론적으로 아래와 같은 이점을 얻을 수 있었습니다.
CNN의 Low resolution feature map을 사용하지 않고 Swin transformer를 활용해 계층적 feature map을 뽑아냄으로써 Small object에 대해서 좋은 성능 확보
Transformer의 long range depedency로 인한 Contextual information 확보
Task Specific decoder 이용함으로써 보다 Optimal한 결과물 확보
Information Fusion block을 이용한 decoder간 정보 공유 통한 triplet의 결과물간 결속성 부여
저희는 유해 콘텐츠 중 특히 폭력성에 맞추어 데이터를 수집하였습니다. 하지만, 폭력 데이터의 특성상 웹에서 가볍게 크롤링할 수 없고 데이터 수위도 높았기 때문에 사진 수집과 정제 과정이 시간이 많이 들고 어려웠습니다.
Kaggle에 데이터가 잘 존재하지 않아 수작업으로 이미지를 캡쳐하는 방식을 주로 사용하였고, 직접 labelimg로 annotation 파일을 직접 만들었다.
다만, HOI task를 통해서 “유해 콘텐츠”를 정확하게 분류해낼 수 있을지에 대한 검증이 필요했습니다.
따라서 저희는 base model인 QPIC의 head 부분을 fine tuning함으로써 폭력성 데이터셋에 대한 성능을 확인함으로써 “유해콘텐츠”를 분류해낼 수 있다는 가설에 대한 잠정적 검증을 먼저 하였습니다.
뿐만 아니라 새로운 VIDT+기반의 모델을 사용함에 있어서 해당 모델이 HOI detection에 적합한지를 확인하기 위해서 VIDT+와 QPIC을 합친 모델을 먼저 사용해 성능을 평가하였습니다.
최종적으로 VTD를 benchmark dataset에 대하여 평가하였고, 저희가 구축한 dataset으로 유해 콘텐츠를 detection 할 수 있도록 마일스톤을 만들고 진행하였습니다.
중간 평가 전에 정리한 아이디어들을 하나하나 실행해감에 있어서 진행할 실험들이 많았고, 저희의 생각대로 결과물이 하나라도 나오지 않았다면, 본 모델을 만들기 더 어려웠을 것 같습니다.
HOI Detection을 유해콘텐츠 필터링에 사용하자고 제안했을 시에 HOI detection에 대한 논문 트랜드를 모르는 상황이었습니다. 따라서 저희는 대부분의 HOI 모델을 survey하고 이들을 그룹화 시키며, 다른 domain의 논문도 survey해 VTD 모델을 만들어내는데 많은 시간 투자를 하였습니다.
모델을 만들고 훈련시키는 것과 이를 이용해 서비스를 만드는 것은 다른 이야기였습니다. 저희는 이 모델을 onnx 형태로 바꾸어 서버에서 inference하게 만드는 것 뿐만 아니라, 인프라, 프론트, 백을 모두 진행하는데 공을 들였습니다.
로컬에서와 서비스에서의 결과물이 다른 에러가 발생하여 이를 해결하는 것이 어려웠고 다같이 화상회의를 하며 밤을 새며 이 문제를 해결하였습니다.
저희가 설계한 VTD모델로 GeForce 3080Ti 환경에서 HICO-DET 데이터셋으로 실험을 진행한 결과는 아래와 같습니다.
SOTA 모델인 QAHOI 모델에 비해서 mAP는 다소 떨어지지만, FPS는 36.0으로 실시간 inference가 가능한 수준으로 나타났습니다.
따라서 위의 도표에서도 확인 가능하다시피, 성능과 속도의 Trade Off를 잘 해결했다고 이야기할 수 있습니다.
데이터셋의 개선과 VTD 모델의 적용을 통해 bounding box의 흔들림이 현저히 줄어들고 inference가 잘 일어남을 확인할 수 있었습니다.
아래의 첨부파일을 통해 확인이 가능합니다. (첨부 파일 참고 : 중간발표 산출물.mp4 & 현재 산출물.mp4)
저희의 시스템 구성도는 다음 그림과 같습니다. 전체적인 서비스는 쿠버네티스 환경에서 배포를 진행하였고, 젠킨스와 깃허브, 도커허브와 ArgoCD를 활용하여 CI/CD 파이프라인을 구축하였습니다.
이를 통해 지속적인 업데이트가 용이하게 되어 서비스의 확장성을 높일 수 있었습니다. 유저 간 connection을 위한 소켓 서버와 프레임 예측을 위한 inference 서버는 독립적으로 구성하여 각 서버의 부하를 분산시킬 수 있었습니다.
저희는 웹 애플리케이션을 통해 화상통화 중 필터링 나이 선택에 따라 손가락욕, 목조르기 그리고 흡연에 대해 모자이크가 일어나도록 발생하였습니다. 본 영상과 같이 실시간으로 해당 상황에 발생하자마자 필터링이 가능함을 확인하였습니다.
영상은 파일 첨부에서 확인 가능합니다. 필터링 연령을 버튼을 통해 선택함에 따라 모자이크 되는 class가 달라지는 것을 확인 가능합니다.
(첨부 파일 참고 : 화상통화 중 필터링_12.mp4 vs 화상통화 중 필터링_15.mp4 vs 화상통화 중 필터링_19.mp4)
비디오 웹 애플리케이션에서는 영상을 애플리케이션에 드롭하면, 해당 영상에서 유해장면이 발생하는 time을 time log에 표시하였습니다.
또한 영상에서 inference가 일어난 bounding box에 대해서 흡연이나 손가락 욕과 같은 물체가 유해한 경우엔 해당 물체에만 모자이크를, 목조르기 찌르기와 같은 상황적 장면에 대해서는 사람과 물체를 포함한 bounding box에 모자이크를 적용하여 다운이 가능하도록 하였습니다.
영상을 드롭하고 다운받는 과정에서 속도를 높이고 bounding box의 예측이 매 frame 마다 발생해 흔들리는 것을 방지하기 위해 모자이크 박스를 대략 5~10 프레임 마다의 예측에서 치도록 설정하였는데 해당 상황에 본 영상에서는 물체가 가끔 모자이크를 벗어나게 하는 상황이 발생하게 하였습니다.
서비스에 사용하기 위해서는 전체적인 수정과정이 더 필요하겠지만, 저희는 본 애플리케이션을 통하여 영상 편집이나 검수 과정에서 저희의 모델이 어떻게 사용될 수 있을지 방향성을 제시했다고 생각합니다.
(첨부 파일 참고 영상 : 비디오 필터링 애플리케이션.mp4)
OTT서비스에서의 자동 영상 유해 수준 평가 및 필터링
현재는 디테일한 유해 콘텐츠의 차단 기준은 결국 인간에게 의존하고 있습니다. 저희는 유해 수준이 일정 수준 이상이라고 판단 시, 유해 콘텐츠를 즉각 차단하고 모호한 기준선에 있는 유해 콘텐츠들이 속하는 프레임을 알려줄 수 있습니다. 이는 아래와 같은 활용 가능성이 있습니다.
넷플릭스, 왓챠 등 온라인 미디어 플랫폼 기업에서 적은 인력으로 빠르게 해당하는 영상의 관련 등급을 책정할 수 있습니다.
온라인 메신저 및 SNS 관련 기관에서 유해 콘텐츠를 자동으로 찾아내 차단하고, 유포자에 대해 분석할 수 있습니다.
방송사, 영화 제작사, 크리에이터 등 영상 편집이 필요한 기관에서 유해도가 높은 프레임으로 빠르게 접근해 편집할 수 있습니다.
실시간 유해 행위 필터링
Dataset을 폭력성에서 다른 것으로 바꿈으로써 미디어 뿐만 아니라 실제 운동경기나 CCTV 범죄 등 다양한 실시간 상황에서의 위험성을 감지할 수 있을 것으로 기대합니다.
성능
영상에서 더 적합하게 사용하게 위하여 훈련을 영상으로 시키거나 Object Tracking을 이용하여 성능을 향상할 수 있습니다.
속도
Multiple instance learning을 이용하면 optimization 과정에서 속도와 성능 모두 높일 수 있습니다.
확장성
MLOps를 사용함으로써 확보가 어려운 유해 데이터셋에 대한 지속적인 학습이 가능하고 VLP를 이용하면 이미지 데이터가 아닌 자연어를 이용해서도 학습이 가능할 것으로 예측됩니다.
저희의 여정은 여기까지였습니다. AIF를 진행하는동안 훌륭한 멘토님께 많이 배웠고, 현업에서 어떤식으로 모델을 사용할 수 있을지 많은 아이디어를 얻어갈 수 있어 정말 행복한 시간이었습니다.
멘토님, 운영자분들 좋은 피드백 많이주신 관계자 및 심사위원분들께 정말 감사합니다!!
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.