Skip to main content

Featured

YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors review

 YOLO 버전이 v7 버전으로 논문이 발표되었다. papers with code에서 쉽게 확인할 수 있으며 이 논문은 모듈 최적화 기법 위주이다. CSPNet이라던지 RepVGG 같은 관련 네트워크들을 간단하게 공부하고 논문을 이해하는 것을 추천한다. 아래는 official github이며 ReadMe를 보면 쉽게 사용 방법을 알 수 있다. https://github.com/wongkinyiu/yolov7 또한 본 논문은 아래와 같다. Wang, Chien-Yao, Alexey Bochkovskiy, and Hong-Yuan Mark Liao. "YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors." arXiv preprint arXiv:2207.02696 (2022). 그렇다면 간략하게 논문에 대해 알아보도록 한다. - Abstract YOLOv7이 알려진 모든 detector들보다 정확도와 속도 면에서 성능을 능가하고 있다고 설명한다. 또한 이 네트워크를 오직 COCO 데이터셋으로만 훈련했다고 설명한다. 다른 네트워크들보다 확실히 좋은 성능을 내고 있다는 것으로 abstract에서 소개하고 있다. - Introduction  이 논문에서 제안한 real-time detector는 주로 mobile GPU나 GPU 장치를 지지할 수 있다는 것을 희망한다고 한 것을 보아 GPU가 필요하다는 것으로 이해하였다. 또한 이 논문에서 제안된 방법들의 개발 방향을 현재 real-time detector들의 개발 흐름과 다르다고 설명한다. 훈련 과정의 최적화에 집중했다고 한다. 그래서 중점적인 것이 정확도를 향상시키기 위한 훈련 cost를 강화화는 최적화된 모듈과 최적 기법이라고 설명한다.  논문의 제목에서 나오는데 제안된 모듈들과 최적 기법들을 trainable bag-of-freebies라고 칭한다. 최근에, model re-pa...

What is Direction Cosine Matrix 2 - DCM 1

뱡향 코사인 행렬(DCM:Direction Cosine Matrix)라고 불리는 이 행렬은 3-by-3로 총 9개의 성분으로 기준 좌표계에서 다른 좌표계사이의 회전 관계를 정의할 때 사용하고 도형 또는 어떠한 물체의 회전을 표현할 때 사용한다(더 다양한 분야에도 쓰일 수 있다).


Fig 1. Frame A and Frame B

위와 같은 관계를 가진 좌표계가 있다고 하자 두사이의 회전 관계를 정의하기위한 DCM은 다음과 같이 표현한다.

$$\begin{bmatrix}\hat{b}_1 \\ \hat{b}_2 \\ \hat{b}_3\end{bmatrix}=C^A_B\begin{bmatrix}\hat{a}_1 \\ \hat{a}_2 \\ \hat{a}_3\end{bmatrix}$$

여기서 $C^A_B$는 좌표계 A에서 좌표계 B로 변환하는 DCM이라고 명명하며 다음과 같다.

$$C^A_B=\begin{bmatrix}c_{11} & c_{12} & c_{13} \\c_{21} & c_{22} & c_{23}\\c_{31} & c_{32} & c_{33}\end{bmatrix}$$

$$\hat{a}_{i} \quad is \quad each \quad 3-by-1 \quad matrix,\quad i=1,2,3$$

$$\hat{b}_{j} \quad is \quad each \quad 3-by-1 \quad matrix,\quad j=1,2,3$$

또한 DCM의 각 요소는 다음과 같이 각 좌표계의 basis의 내적으로서 정의된다.

$$\begin{cases}c_{11} = \hat{a}_1\cdot\hat{b}_1 \\c_{12} = \hat{a}_1\cdot\hat{b}_2\\c_{13} = \hat{a}_1\cdot\hat{b}_3\\c_{21} = \hat{a}_2\cdot\hat{b}_1\\c_{22} = \hat{a}_2\cdot\hat{b}_2\\c_{23} = \hat{a}_2\cdot\hat{b}_3\\c_{31} = \hat{a}_3\cdot\hat{b}_1\\c_{32} = \hat{a}_3\cdot\hat{b}_2\\c_{33} = \hat{a}_3\cdot\hat{b}_3\end{cases}$$

이를 요약하여 내적관계로 표현하면 다음과같다.

$$\hat{a}_i\cdot\hat{b}_j = ||a_i||_2||b_j||_2cos\alpha$$

내적 연산 정의에 따라 $\alpha$는 두 축 간의 사이 각도를 의미한다. 단적인 예를 들기위해 서로 마주보는 좌표계를 정의해서 설명한다.

Fig 2. Frame Example 1

각 Frame의 1번째 단위 기저 벡터를 내적을통해 계산면 다음과 같다.

$$\hat{a}_1\cdot\hat{b}_1=||\hat{a}_1||_2||\hat{b}_1||_2cos(\pi)=-1$$

그러면 같은 방식으로 Frame A의 첫번째 기저 벡터 그리고 Frame B의 2번째 기저벡터를 내적을 통해 계산하면 다음과 같다.

$$\hat{a}_1\cdot\hat{b}_2=||\hat{a}_1||_2||\hat{b}_1||_2cos(\pi/2)=0$$

이러한 방식으로 $C^A_B$의 요소를 모두 계산하면 다음과 같다.

$$C^A_B = \begin{bmatrix}-1 & 0 & 0 \\0 & 0 & 1 \\0 &1 &0 \end{bmatrix}$$

그러면 서로 마주보고있는 좌표계가 아니라 살짝 틀어져서 보고있는 예를 들어본다.

Fig 3. Frame Example 2

$\hat{a}_1$과 $\hat{b}_1$는 서로 직교하므로 내적이 0임을 바로 알 수 있다. 그리고 $\hat{a}_2$는 $\hat{a}_1$을 기준으로 30도 차이가 있다. 이를 가지고 DCM을 계산하면 다음과 같다.

$$C^A_B = \begin{bmatrix}0 & \sqrt{3}/2 & -1/2 \\0 & 1/2 & \sqrt{3}/2 \\1 &0 &0 \end{bmatrix}$$

그럼 $C^A_B$는 Frame A에서 Frame B사이의 관계를 표현한 DCM임을 알고 있다. 반대로 Frame B에서 Frame A의 관계는 $C^B_A$이다. 이는 다음과 같이 역행렬로 구해지는대 DCM의 특성에 따라 Transpose(전치)로 정의할 수 있다. 

$$C^B_A = {C^A_B}^{-1}$$
$${C^A_B}^{-1} = {C^A_B}^{T}$$

직관적으로 이해를 해보면 DCM의 각 성분들은 두 좌표계 사이의 basis의 내적임을 알 때 $C^A_B$의 경우 Frame A의 기저 벡터들을 Frame A 기준으로 표현된 Frame B의 부합되는 기저들로 정사영 한다는 것이다. 이런 관점에서 $C^B_A$은 반대로 Frame B 기준으로 표현된 Frame A 기저 벡터들로 정사영 한다고 생각하면 좀 쉽게 이해될까 적어본다.

그러면 간단한 예시를 하나 더 들어본다.

Frame B는 기준 좌표계 Frame A에 대해 $\hat{a}_1$에 대해 45도 회전한 형태라고 가정한다. 그리고 Frame A에서 다음과 같은 벡터가 존재한다.
$$\vec{u^A}=[0\; 0.7071\; 0.7071]^T$$

Fig 4. Frame Example 3

위의 그림에 포함된 정보를 통해 다음과같이 Frame A에서 Frame B에 대한 DCM을 다음과 같이 구할 수 있다.

$$C^A_B=\begin{bmatrix}1 & 0 & 0 \\ 0 & 0.7071 &0.7071 \\ 0 & -0.7071 & 0.7071 \\ \end{bmatrix}$$

그렇다면 주워진 벡터 $u$는 Frame B에서 어떻게 표현될지 궁금한 것이다. 다음과 같이 계산하면 된다.

$$\vec{u}^B =C^A_B \vec{u}^A $$

여기서 주어진 벡터를 $\vec{u}^A$로 표현했는데 이는 Frame A서 표현된 벡터라는 의미이다. 마찬가지로  $vec{u}^B$는 Frame B에서 표현한 벡터 $u$ 이다. 결과적으로 Frame A에서 Frame B로의 DCM을 곱 연산을 통해 쉽게 구할 수 있다.
    
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
clear all;
close all;
clc;
 
deg2rad = pi/180;
 
u_a = [0 0.7071 0.7071]';
 
dcm_A_B = angle2dcm(45*deg2rad,0,0,'xyx');
 
u_b = dcm_A_B * u_a;
 
%%%%%%% Result %%%%%%%%%
% u_b =
%          0
%     1.0000
%     0.0000
cs

이렇게 DCM에 간단한 사용 방법과 일부 특성을 확인해보았다.
이 글을 통해 어떤 기준 좌표계를 기준으로 얼마나 회전되어있는 다른 좌표계를 알 때 주어진 벡터를 기준 좌표계, 상대 좌표계로 어떻게 변환되는지 알 수 있을 것이다.

Comments