i) Object Measurement

이미지에 나타난 객체의 크기를 알고싶을 수 있다.
단지 pixel수를 세어서는 크기를 알아낼 수 없기에 객체의 크기를 정교하게 측정하는 방법이 필요하다.
 Imaginea Labs에서 제안한 방법에 따라 사진상의 객체를 측정하는 과정을 단계별로 알아보자.
🤔 Reference Object
client의 사진만으로 신발사이즈를 추천해보자.
발치수 예측모델의 추론 시, 다양한 발자국 이미지를 처리하기에 Augmentation이 필수적이다.
또한, 카메라와 종이의 거리같은 요인또한 존재하기에 효과적인 solution을 만들기란 쉽지않다.
이런 scale문제는 거의 모든 client가 갖는 참조객체(Reference Object)를 image에 포함시켜 간단히 해결할 수 있다.
고객 대부분은 표준크기의 카드를 갖고 있을 것이므로 이를 보정객체(calibration object)로 활용할 수 있다.
좌측보다 우측이 좀 더 확대된 이미지
즉, 참조대상을 추가시켜 이를 해당 객체와 발을 비교하는 것으로 단순화시키는 것이다.

 

🤔 Segmentation
모델은 먼저 image를 2가지로 세분화해 추출해야한다.
 ∙ 신용카드
 ∙ 발자국
이를 위해 Mask R-CNN을 사용한다.
Mask분기를 통해 발자국, 신용카드 각각에 대한 마스크를 예측해 위 그림 우측처럼 유사한 결과를 얻는다.

이제 우린 위의 예측된 마스크를 아래처럼 개별적인 각각의 마스크로 볼 수 있다.
이제, 올바른 측정값을 얻기 위해 Mask들을 정렬해야한다.

 

🤔 회전수정
Mask를 얻은 후 회전에 대한 정규화를 수행해야한다.
회전을 수정하기 위해 각 Mask에 대해 PCA로 Eigen Vector값을 얻는다.
가장 큰 고유벡터의 방향의 객체의 크기 = 객체의 길이.
PCA의 특성상2번째 주성분부터의 고유벡터는 분산에 대한 기여도가 점점 줄어든다.
PCA이전, Mask의 차원은 좌측그림처럼 원본 이미지에 대한 차원축을 갖는 vector space에 존재한다.
PCA이후, 고유벡터들이 다른 vector space basis에 위치, 축이 가장 큰 분산의 방향을 따른다(우측그림).
 원래 좌표축과 첫번째 고유벡터사이의 각도를 이용해 얼마나 회전보정해야하는지 결정할 수 있다.

 

🤔 비율 및 측정
회전수정된 Mask를 통해 이제 발자국 측정이 가능하다.
❗️ 발자국과 신용카드의 측정값은 cm가 아닌, pixel단위라는 점에 유의
신용카드의 정확한 치수만 알면 필셀치수와 카드의 실제치수 사이 비율을 통해 신발 치수를 예측, client에게 제공해줄 수 있다.

 

 

 

 

 

 

 

 

 

 

ii) Counting

🤔 Filter 분해
아래 사진에서 포도의 알은 몇개일까?
지금까지의 소개한 개념을 기초로, 아래 접근방식 중 하나를 취할 수 있다.
  • Detection Classifier를 훈련, 열매를 검출, Bbox개수세기
    (박스가 열매를 합쳐버릴 수 있다는 단점)

  • Segmentation방법으로 접근, 군집의 속성에 따라 열매개수결정.
    (열매가 너무 작거나 크면 잘못된 결과 초래.)
    즉, 참조객체를 활용하기 곤란.

  • Regression문제로 접근, image자체로써의 열매수 측정.
    Segmentation처럼 scale문제가 존재.
1,2의 경우, 올바르게 분류되어야 함을 유의해야하고
3의 경우 회귀는 위치를 무시하는데, 위치정보는 이미지에서 중요하기에 이를 유의.

Sol) 밀도추정기술

 

🤔 밀도 추정
객체가 작고 겹치는 상황을 위해 2010년 제안된 논문.
이 방법은 Detection, Segmentation을 수행하지 않고, 위치정보도 잃지 않는다.

[Main Idea]
이미지의 patch에 있는 객체의 밀도를 추정하도록 신경망을 학습!
밀도추정을 위해 밀도를 나타내는 라벨이 필요. → 여기서는 열매 중심을 라벨로 지정.
즉, 신경망이 이 라벨을 추정하는 법을 배우는 것이다.

다만, 일부 열매는 patch에 부분적으로 걸쳐있을 수 있다.
→ 모델에 대한 grid입력 > patch_size

 

 

 

 

 

 

iii) Pose Estimation

🤔 Pose Estimation이란?
사람의 자세를 식별하기 위해 팔꿈치, 무릎, 얼굴 등을 식별하는 것. 
사람이 앉아있는지, 서있는지 등의 자세판별이 가능해 다음과 같은 곳에서 활용가능하다.

Papandreous et al; 2018

🤔 PoseNet
[1단계]

∙ Detection모델을 사용해 Interest point의 Heatmap을 식별
(일반적인 Interest point: 관절(joint or landmark), 눈, 코 등)
(Heatmap: Detection모델 classifier head에서 출력되는 점수 = threshold지정 이전값)

[2단계]
∙ Detect된 각 joint를 기준, 근처 joint의 가장 가능성있는 위치 식별.

[3단계]
∙ Hough Transform이라는 Weighted Voting Mechanism으로 1,2단계에 따라 선택된 Joint기반, pose검출.
이때, 2,3단계는 다양한 joint탐지를 위해 단순 detection모델로는 충분치 않기에 필수적이다.
그렇기에 joint와 joints사이의 offset도 예측하는 것이다.

 

🤔 다중객체의 pose estimation
단일 이미지에서 여러사람의 pose estimation을 위해 위의 step에 몇가지 기술추가가 필요하다.

1. segmentation모델을 활용, 사람에 해당하는 모든 pixel 식별
2. joint조합을 참고해 가장 가능성 높은 신체부위 식별
3. 각 사람에게 사람 pixel을 할당.
(1에서 찾은 mask의 Pixel과 2에서 식별한 가능성높은 joint를 이용.)

 

🧐 Human Pose Estimation 방식

1) Top-Down 방식

: 사람을 먼저 Detect → Detect된 자세를 추정.

정확도가 Bottom-up방식보다 높음.
검출된 사람들을 순회하며 joint들을 찾기에 속도가 Bottom-up방식보다 느리다
보통 저해상도에서 고해상도로 과정이 수행

즉, object detector를 사용해, 개별 instance를 식별(identifying), localizing → 한 사람의 포즈를 추정. 

ex) AlphaPose, Mask-RCNN


2) Bottom-Up 방식

joint를 먼저 Detect → 서로 연결해 자세를 추정.
정확도는 Top-down 방식에 비해 떨어짐.

Object Detection 과정이 없어 속도가 빨라 실시간 처리에 사용 가능
보통 고해상도에서 저해상도로 과정이 수행

즉, 확인되지 않은(identity-free) 의미론적 실체(semantic entities)를 지역화→사람 인스턴스로 그룹화

ex) OpenPose

cf) Pose Estimation Guideline

 

Pose Estimation Guide - Fritz ai

Almost everything you need to know about how pose estimation works Pose estimation is a computer vision technique that predicts and tracks the location of a person or object. This is done by looking at a combination of the pose… Continue reading Pose Est

fritz.ai

 

 

 

 

 

 

 

 

 

 

 

iv) Image Search

[핵심아이디어]: 서로 유사한 이미지에 서로 가까운 embedding이 있다.

🤔 분산 검색
유사한 임베딩 검색을 위해선?
Dataset의 image embedding에 대한 Search Index를 생성해야한다.
이 embedding index를 대규모분산데이터웨어하우스에 저장한다 가정하자.
이때, embedding과 다른 모든 embedding간의 유클리드 거리를 계산하고 가장가까운 일치항목을 표시한다.

 

🤔 빠른 검색
위의 예제에서 대규모데이터웨어하우스는 효율적 검색이 가능하지만
latency가 긴 경향이 있기에 ms로 응답시간을 얻을 수 없다.

실시간 serving을 위해 더 나은 유사 embedding searching방법을 찾아야한다.
이를 위해 ScaNN(Scalable Nearest Neighbors)를 사용할 수 있다.

 

🤔 더 나은 임베딩
더 맞춤화된 embedding을 사용할 수 있다.
ex) 얼굴유사성을 검색할 때, 얼굴을 식별하고 확인하도록 훈련된 모델의 embedding이 일반 embedding보다 더 성능이 좋다.

FaceNet:
목적: facial search
embedding최적화를 위해 얼굴특징을 기반
정렬된 일치/불일치 얼굴패치의 삼중항(triplet)을 사용.
삼중항: 일치하는 얼굴섬네일 2개 + 일치안하는 얼굴섬네일 1개

Triplet Loss:
가능한 최대거리만큼 양성쌍과 음성쌍을 분리하는 것이 목표인 함수.
라벨로 함께 군집화한 embedding생성에 사용가능.

<아래 3개의 image>로 정의된다.
 anchor이미지, 같은 label의 다른 이미지(두번째 이미지와 anchor가 양성쌍을 형성)
 다른 label을 갖는 3번째 이미지(세번째 이미지와 anchor는 음성쌍을 형성)
세 이미지에 대해 삼중항 (a,p,n)손실은 거리 d(a,p)가 0을 향하고
거리 f(a,n)이 f(a,p)보다 일정한 여유만큼 더 크게 정의된다.
이때,&nbsp; &alpha; 는 margin(= positive와 negative의 거리)을 의미.
이 손실에 대해 음성은 3가지로 나뉜다.
 Hard Negative: 양성보다 앵커에 더 가까움
 Easy Negative: 앵커에서 아주 멀리 떨어져있음

 Semi-Hard Negative: 양성보다는 멀리있으나 여유거리내에 있음

Linear Layer추가 후, Semi-Hard Negative에 초점을 맞춰 해당이미지의 삼중항손실을 최소화하도록 모델을 훈련시켜 embedding을 개선시킬 수 있다.
결과적으로 결과 embedding이 유사한 label로 clustering된다.

 

 

 

 

 

 

 

v) ETC (InternImage)

 

[논문 review] - InternImage(2023): Exploring Large-Scale Vision Foundation Models withDeformable Convolutions

📌 InternImage [CVPR 2023] InternImage: Exploring Large-Scale Vision Foundation Models with Deformable Convolutions Paperswithcode 홈페이지에서 Detection, Segmentation 등 많은 Benchmark Dataset에서 최고의 성능(SOTA)를 달성한 (무친

chan4im.tistory.com

 

 

 

+ Recent posts