CLTR 군중 현지화를 위한 종단 간 변환기 모델 - 개념
Language/Python

CLTR 군중 현지화를 위한 종단 간 변환기 모델 - 개념

뉴비뉴 2025. 5. 23.

https://github.com/dk-liang/CLTR?tab=readme-ov-file

들어가기 전에

  • 요즘 ChatGPT 와 Grok 등등 AI 가 발달 함에 따라 쉽게 지식을 습득할 수 있다는 것은 좋은 일이지만 기록하지 않는 이상 장기 기억으로 잘 넘어가지를 않는다. 전에도 게시글을 작성하고 학습했던 것 처럼 다시 시작한다!
  • Crowd Counting 는 사람들이 북적이는 곳(예: 콘서트, 지하철역, 행사 현장)에서 사진이나 영상으로 몇 명이 있는지 세는 기술, CLTR 은 이런 사람 수를 세는 데 특화된 인공지능 모델
  • 백엔드 개발자의 AI 도전기라 봐주시면 감사하겠습니다

CLTR 개념

  • 군중 위치 추정, 즉 사람들이 많은 사진에서 머리 위치를 찾아서 사람 수를 세는 인공지능 모델
  • 기존 방법들은 의사 경계 상자(가짜 상자; pseudo-bounding box) 또는 미리 설계된 위치 지도(localization map)를 사용하며, 복잡한 후처리 과정을 거쳐 머리 위치를 얻습니다. 하지만 이번 논문에서는 CLTR이라는 새로운 방법을 제안

FLOW

CLTR은 머리 위치를 찾는 문제를 "여러 점을 한꺼번에 예측하는 문제" 로 변경
  1. 사진에서 중요한 특징점(예: 사람 머리의 특징)을 찾아내고, 이를 컴퓨터가 이해할 수 있는 형태(학습 가능한 임베딩) 변환
  2. 변환기-디코더(Transformer-Decoder)라는 인공지능 기술을 사용해 이 정보를 바탕으로 머리 위치를 예측
  3. 주변 상황(맥락)을 활용해서 헷갈리는 부분을 줄이고, 더 정확한 매칭을 하도록 KMO 기반 헝가리안 매처라는 도구를 추가
    1. 이건 마치 퍼즐을 맞출 때 주변 조각을 보고 맞는 위치를 찾는 것

데이터셋

  • 컴퓨터가 학습할 수 있도록 준비된 데이터(정보) 모음 (예: 친구들 사진을 모아서 "이건 민수, 이건 지민이" 라고 이름 붙여놓은 앨범) 컴퓨터가 그 사진을 보고 사람을 인식하는 법을 배운다
  • 데이터셋은 보통 사진과 머리 위치 정보(점 또는 밀도 맵)으로 구성
  • NWPU-Crowd, UCF-QNRF, ShanghaiTech Part A, B 등등 수 많은 데이터셋이 존재한다

NWPU-Crowd

https://mailnwpueducn-my.sharepoint.com/personal/gjy3035_mail_nwpu_edu_cn/_layouts/15/onedrive.aspx?id=%2Fpersonal%2Fgjy3035%5Fmail%5Fnwpu%5Fedu%5Fcn%2FDocuments%2F%E8%AE%BA%E6%96%87%E5%BC%80%E6%BA%90%E6%95%B0%E6%8D%AE%2FNWPU%2DCrowd&ga=1

images_part1.zip, images_part2.zip ... (원본 사진)

  • 크기가 큰 사진과 높은 해상도

jsons.zip (머리 위치 정보)

  • 사진 속 사람 머리 위치를 기록한 정보가 JSON 형식으로 저장 (예: x, y 좌표로 "여기 머리가 있다!" 라고 표시) 
{
	"img_id":"0137.jpg",
	"human_num":8,
	"points":[
		[
	        1974.0918579101565,
    	    594.4244079589844
        ],
        [
        	2598.8873291015625,
        	741.5023803710938
        ],
        [
        	676.1429443359375,
        	1026.1346740722656
        ],
        [
        	1743.8290405273438,
        	1061.9303588867188
        ],
        [
        	1647.4972534179688,
        	781.5009765625
        ],
        [
        	938.0564575195312,
        	1080.0881958007812
        ],
        [
        	967.3641357421875,
        	620.226806640625
        ],
        [
        	1347.5677490234375,
        	1044.005615234375
        ]
    ],
	"boxes":[
        [
        	1889.8,
        	491.875,
        	2030.2,
        	701.125
        ],
        [
        	2518.275,
        	651.6,
        	2662.725,
        	824.4
        ],
        [
        	618.35,
        	915.65,
        	777.65,
        	1134.35
        ],
        [
        	1647.65,
        	949.125,
        	1812.35,
        	1171.875
        ],
        [
        	1586.725,
        	698.95,
        	1712.275,
        	869.05
        ],
        [
        	882.45,
        	978.225,
        	1025.55,
        	1184.775
        ],
        [
        	913.55,
        	532.85,
        	1040.45,
        	719.15
        ],
        [
        	1268.575,
        	933.35,
        	1418.425,
        	1146.65
        ]
    ]
}

mats.zip (밀도 맵; Density Map)

  • 밀도 맵은 사진에서 사람이 얼마나 밀집되어 있는지 색깔로 나타낸 지도

val.txt(검증), test.txt(테스트), train.txt(학습) 데이터 리스트

  • 검증(데이터)용 사진 목록이 적힌 텍스트 파일
    • CLTR 모델을 학습시킨 후, 얼마나 잘 배웠는지 확인하려면 테스트 필요
    • val.txt 는 그 테스트에 사용할 사진 리스트를 알려준다
    • 100장으로 테스트
  • 테스트(데이터)용 사진 목록이 적인 텍스트 파일
    • 모델을 최종적으로 평가할 때 사용하는 데이터
    • 200장으로 테스트
  • 학습(데이터)용 사진 목록이 적힌 텍스트 파일
    • 연습에 쓸 사진 리스트를 알려준다
    • 500장; 학습에 쓸 사진이 더 많다는 뜻

머신러닝

데이터 준비

  • 앞에서 말했던 데이터셋을 이용해 머신러닝으로 모델을 가르친다
    • 위에서 언급한 NWPU-Crowd 데이터셋을 사용한다

모델 설정(Transformer; PyTorch)

  • CLTR은 Transformer라는 기술을 사용, 사진에서 특징을 찾고 머리 위치를 예측
  • PyTorch 로 CLTR이 실행할 환경을 만든다

학습

  • CLTR 모델이 사진을 보고 사람 수를 예측하고, 그 예측이 정답(데이터셋의 답)과 얼마나 다른지 확인, 틀이면 "이 부분을 고쳐!" 라고 알려주면서 계속 연습
    • 사진을 넣고 CLTR이 머리 위치를 점으로 표시하고 숫자 세기
    • 정답과 비교해서 오차(예: 50명 예측했는데 45명이라는 5명 차이)를 계산
    • 오차를 줄이도록 CLTR의 "뇌"(파라미터)를 조정
    • 이 과정은 수학 공식을 사용 (손실 함수와 최적화 알고리즘), 수백 번, 수천 번 반복

pth 파일 저장

  • 위 과정의 결과를 .pth 파일로 저장
    • PyTorch 에서 torch.save(model.state_dict(), 'model.pth') 같은 코드로 저장
    • .pth 파일은 나중에 CLTR을 다시 쓰거나 테스트 할 때 그리고 추가 학습

 CLTR, 데이터셋 그리고 머신러닝에 대해 간단히 배워봤습니다.

다음에는 CLTR 설치 및 세팅하는 방법과 더 나아가 학습된 모델을 활용해 새로운 데이터를 분석하여 바운딩 박스(BBox)와 밀도 맵(Density Map) 같은 결과물을 시각화하며 모델의 성능을 알아보겠습니다.

Reference

 

GitHub - dk-liang/CLTR: [ECCV 2022] An End-to-End Transformer Model for Crowd Localization

[ECCV 2022] An End-to-End Transformer Model for Crowd Localization - GitHub - dk-liang/CLTR: [ECCV 2022] An End-to-End Transformer Model for Crowd Localization

github.com

 

 

An End-to-End Transformer Model for Crowd Localization

Crowd localization, predicting head positions, is a more practical and high-level task than simply counting. Existing methods employ pseudo-bounding boxes or pre-designed localization maps, relying on complex post-processing to obtain the head positions. I

arxiv.org

 

댓글

💲 추천 글