[Pytorch] QATM : Quality-Aware Template Matching For Deep Learning을 다시 구현해 보았습니다.
논문 개요
QATM은 2019년 3월 18일 발표된 새로운 Deep learning을 이용한 template matching 기법입니다.
종래의 방법으로는 어려웠던, 샘플 화상 N매와 템플릿 화상 M매에서의 매칭을 가능하게 해, 한층 더 미분 가능한 조작만으로 기술하는 것으로 학습하는 것도 가능하게 되어 있습니다.
원래 tensorflow+keras의 코드는 구현되어 있었지만, 그것이 약간 어중간한 일도 있어, 익숙한 Pytorch로 다시 구현해 보았습니다.
다만, 이번의 실장에서는 공간 계산량의 점에서 샘플 화상 1장과 템플릿 화상 M장에서의 실장에만 머물고 있습니다.
논문 소개
논문 arxiv : htps : // 아 rぃ v. rg/아bs/1903.07254
원래 코드 (tensorflow + keras) : htps : // 기주 b. 코 m / cp ぅ sx / 쿠 TM
이번에 구현 된 코드 (pytorch) : htps : // 기주 b. 코 m / 카 또 1729 / 쿠 TM_py와 rch
문제 설정
거친 동작 원리로서는, 우선 샘플 화상이 있는 영역 $s$와 템플릿 화상 $t$의 사이에, 「어떻게 매치하고 있는가」의 지표 $Quality(s,t)$가 정의되고 있다 로서,
\begin{equation}
R^* = argmax_R \left\{ \sum_{r\in R}max\left\{Quality(r,t)\mid t \in \bf{T}\right\} \right\}
\end{equation}
되는 $R^*$를 찾아 간다. 여기서 $\bf{T}$는 복수의 템플릿 이미지이다.
Quality 함수 결정
$ s $는 샘플 이미지의 템플릿 $ t $와 같은 크기의 패치입니다.
$f_s$, $f_t$를, $s$, $t$를 학습된 모델에 넣어 꺼낸 특징량 맵으로 해, $\rho(\cdot)$를 이 둘 사이의 거리를 측정하는 함수로 한다 (여기서 코사인 유사도 사용)
특정 패치 $ s $에 대해 템플릿 $ t $가 일치 할 확률의 우도 함수는 다음과 같이 정의됩니다.
\begin{equation}
L(t\mid s) = \frac{\exp\{\alpha\cdot\rho(f_t, f_s)\}}{\sum_{t'\in \bf{T}} \exp\{\alpha\cdot\rho(f_{t'}, f_s)\}}
\end{equation}
$\alpha$는 양의 상수이다.
이것은 $\alpha$를 학습하는 파라미터로 한 softmax 계층으로 생각할 수도 있다.
이것을 이용하여
\begin{equation}
QATM(s,t) = L(t\mid s)\cdot L(s\mid t)
\end{equation}
이 $ QATM (s, t) $는 $ Quality (s, t) $로 사용됩니다.
구현
동작 원리로서는 실제로 이것 정도이므로, 나머지는 논문중에서 실장하고 있던 코드( htps : // 기주 b. 코 m / cp ぅ sx / 쿠 TM )를 보면서 무엇을 하고 있는지 쫓아가면 됩니다.
이것을 Pytorch로 다시 구현할 때, 원래 코드 자체는 샘플 이미지 1장에 대해 템플릿 이미지 1장의 경우에만 대응하고 있던 것을, 샘플 이미지 1장에 대해 템플릿 이미지 여러장으로의 매칭을 가능하게 합니다. 했습니다.
또한, 원래의 구현에서는, 템플릿 화상이 샘플 화상내에 없는 경우가 고려(할 수 있다고 논문에 써 있는데) 되어 있지 않았기 때문에, 이것도 고려에 넣어, 확률치가 낮은 것을 시작하도록(듯이) 했습니다.
이번에 구현 된 코드 (pytorch) : htps : // 기주 b. 코 m / 카 또 1729 / 쿠 TM_py와 rch
실행 결과
준비한 데모 이미지로 실행해 보겠습니다.template1_1.png
에서 template1_4.png
는 샘플 이미지에 존재하지만 template1_dummy.png
는 존재하지 않습니다.
이 상황에서도 올바르게 탐지되었음을 알 수 있습니다.
python qatm.py -s sample/sample1.jpg -t template --cuda
template1_1.png
template1_2.png
template1_3.png
template1_4.png
template1_dummy.png
Reference
이 문제에 관하여([Pytorch] QATM : Quality-Aware Template Matching For Deep Learning을 다시 구현해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kamata1729/items/11fd55992c740526f6fc
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
논문 arxiv : htps : // 아 rぃ v. rg/아bs/1903.07254
원래 코드 (tensorflow + keras) : htps : // 기주 b. 코 m / cp ぅ sx / 쿠 TM
이번에 구현 된 코드 (pytorch) : htps : // 기주 b. 코 m / 카 또 1729 / 쿠 TM_py와 rch
문제 설정
거친 동작 원리로서는, 우선 샘플 화상이 있는 영역 $s$와 템플릿 화상 $t$의 사이에, 「어떻게 매치하고 있는가」의 지표 $Quality(s,t)$가 정의되고 있다 로서,
\begin{equation}
R^* = argmax_R \left\{ \sum_{r\in R}max\left\{Quality(r,t)\mid t \in \bf{T}\right\} \right\}
\end{equation}
되는 $R^*$를 찾아 간다. 여기서 $\bf{T}$는 복수의 템플릿 이미지이다.
Quality 함수 결정
$ s $는 샘플 이미지의 템플릿 $ t $와 같은 크기의 패치입니다.
$f_s$, $f_t$를, $s$, $t$를 학습된 모델에 넣어 꺼낸 특징량 맵으로 해, $\rho(\cdot)$를 이 둘 사이의 거리를 측정하는 함수로 한다 (여기서 코사인 유사도 사용)
특정 패치 $ s $에 대해 템플릿 $ t $가 일치 할 확률의 우도 함수는 다음과 같이 정의됩니다.
\begin{equation}
L(t\mid s) = \frac{\exp\{\alpha\cdot\rho(f_t, f_s)\}}{\sum_{t'\in \bf{T}} \exp\{\alpha\cdot\rho(f_{t'}, f_s)\}}
\end{equation}
$\alpha$는 양의 상수이다.
이것은 $\alpha$를 학습하는 파라미터로 한 softmax 계층으로 생각할 수도 있다.
이것을 이용하여
\begin{equation}
QATM(s,t) = L(t\mid s)\cdot L(s\mid t)
\end{equation}
이 $ QATM (s, t) $는 $ Quality (s, t) $로 사용됩니다.
구현
동작 원리로서는 실제로 이것 정도이므로, 나머지는 논문중에서 실장하고 있던 코드( htps : // 기주 b. 코 m / cp ぅ sx / 쿠 TM )를 보면서 무엇을 하고 있는지 쫓아가면 됩니다.
이것을 Pytorch로 다시 구현할 때, 원래 코드 자체는 샘플 이미지 1장에 대해 템플릿 이미지 1장의 경우에만 대응하고 있던 것을, 샘플 이미지 1장에 대해 템플릿 이미지 여러장으로의 매칭을 가능하게 합니다. 했습니다.
또한, 원래의 구현에서는, 템플릿 화상이 샘플 화상내에 없는 경우가 고려(할 수 있다고 논문에 써 있는데) 되어 있지 않았기 때문에, 이것도 고려에 넣어, 확률치가 낮은 것을 시작하도록(듯이) 했습니다.
이번에 구현 된 코드 (pytorch) : htps : // 기주 b. 코 m / 카 또 1729 / 쿠 TM_py와 rch
실행 결과
준비한 데모 이미지로 실행해 보겠습니다.template1_1.png
에서 template1_4.png
는 샘플 이미지에 존재하지만 template1_dummy.png
는 존재하지 않습니다.
이 상황에서도 올바르게 탐지되었음을 알 수 있습니다.
python qatm.py -s sample/sample1.jpg -t template --cuda
template1_1.png
template1_2.png
template1_3.png
template1_4.png
template1_dummy.png
Reference
이 문제에 관하여([Pytorch] QATM : Quality-Aware Template Matching For Deep Learning을 다시 구현해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kamata1729/items/11fd55992c740526f6fc
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
준비한 데모 이미지로 실행해 보겠습니다.
template1_1.png
에서 template1_4.png
는 샘플 이미지에 존재하지만 template1_dummy.png
는 존재하지 않습니다.이 상황에서도 올바르게 탐지되었음을 알 수 있습니다.
python qatm.py -s sample/sample1.jpg -t template --cuda
template1_1.png
template1_2.png
template1_3.png
template1_4.png
template1_dummy.png
Reference
이 문제에 관하여([Pytorch] QATM : Quality-Aware Template Matching For Deep Learning을 다시 구현해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kamata1729/items/11fd55992c740526f6fc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)