728x90
2020-07-30
- 지난 시간에는 대표적인 영상 특징 SIFT와 SURF의 특징과 영상 분할을 위한 다양한 방법, 특징 기술자 등 영상 관련하여 살펴보고, 병렬 처리 프로그래밍인 openmp에대한 개념과 간단한 실습, 그리고 간단한 윈도우 어플리케이션 해킹 실습을 진행하였습니다. 이번 시간에는 지난번에 기계어로 부팅 가능 이미지를 만들었던 것에서 개선하여 어셈블리어를 이용한 부팅이미지를 구현해보고, 어제 학습한 내용에 이어서 openmp의 기초적인 내용 학습을 마무리 하고자 합니다. 또 나머지로 특징 기술자 다음으로 영역 기술자와 주성분 분석, 그리고 이를 이용한 고유 얼굴 검출 및 얼굴 인식 과정에 대해 학습을 진행하고자 합니다.
- 어셈블리어를 이용한 부팅 이미지 구현 과정에서 일반 nasm 어셈블러 대신 nska라고 하는 어셈블러를 이용하여 이전에 기계어로 직접구현했던것 보다 간단하게 만들었습니다. 처음에는 Date Byte인 DB 명령어를 이용하여 16비트 값 하나하나 작성했던것 처럼 부팅 관련 이진값들을 입력해주었습니다. 중간에 공백 칸들은 공백으로 예약된 REVB Reserved Byte 명령어를 이용하여 공백이 필요한 부분들은 간단하게 공백을 삽입하여 기계어와 동일한 형태로 구현하였으며, QEMU 에뮬레이터에서 정상적으로 동작하는 모습을 확인하였습니다.
- 하지만 이러한 방식은 기계어로 코딩한 것과 별 차이가 없어 문자열을 사용하거나 다른 어셈블리 명령어를 활용하여 개선된 어셈블리 코드를 작성하였습니다. 여기서 추가로 사용한 명령어로 DW Data Word 데이터 워드를 저장하는 DW 명령어, 데이터 더블 워드 크기로 저장하는 DD등이 있었으며, 이전의 어셈블리 코드가 16진수만을 입력하였던것과 비교하면 문자열과 여러 명령어를 통해 훨씬 간결해진 코드를 구현할수 있었으며, QEMU와 Bochs 상에서 정상적으로 부팅이 되고 문자열이 출력되는 모습을 확인하였습니다.
- 또한 어제에 이어서 openmp 학습을 마무리 하였습니다. 오늘의 경우 병렬 프로그래밍에서 동기화를 다루는 방법과 중첩 스레드, 작업 분할 지시어, 스케줄링과 테스크 등의 개념들에 대해서 전반적으로 살펴보고 실습을 진행하였습니다. openmp는 스레드 기반 병렬프로그래밍으로 하나의 프로세스 내부에서 동작하다보니 스레드 안에 스레드를 생성하는 경우 중첩 스레드로 처리하는 방법에 대해 이해가 필요하였습니다. 그래서 중첩 스레드가 어떻게 생성이 되고 데이터들의 범위가 정해지는지, 그리고 병렬 처리할 작업들을 스레드마다 균일하게 배분할것인지 동적으로 배분할것인지에 대한 작업 분할 지시어, 그리고 작업 단위인 테스크를 어떻게 효율적으로 처리할지에 대한 스케줄링 기법과 여러개의 스레드가 같은 데이터를 동시에 다루는걸 막기위한 동기화 로직 등 지난 시간에는 간단한 연산과 사용법, 예제들을 살펴보았다면 오늘은 조금더 고급적인 활용 방법들을 살펴볼수 있는 시간을 가졌습니다.
- openmp 수업을 마무리하고나서 영상 처리 일부분을 마저 진행하였습니다. 우선 지난 시간 SIFT 특징 기술자에 대해 살펴보면서 특징 기술자가 무엇인지 그리고 어떤 구성요소를 가지고 있는지, 계산하는 과정을 다루었다면 이번시간에는 개선된 특징 기술자와 영역을 다루는 기술자, 주성분 분석 방법과 이를 이용한 얼굴 인식에 대해 학습을 할 수 있었습니다.
- 우선 개선된 특징 기술자로 PCA-SIFT와 GLOH를 살펴보았습니다. SIFT의 경우 4 x 4 x 8 = 128바이트 크기를 차지하는 만큼 일반 영상에는 특징들이 많이 존재하므로 컴퓨터의 성능이 크게 저하될수 있습니다. 그래서 이런 벡터의 정보를 손실을 줄이면서 차원수를 줄이는 기술인 PCA를 적용한 SIFT 즉, PCA-SIFT에 대해서 살펴보고, 이와 별개로 SIFT 기술자가 사각 마스크에서 적용되었다면, 원형 마스크를 사용한 GLOH 기술자에 대해서 간단히 학습하였습니다.
- 다음으로 영역 기술자에 대해서 살펴보았습니다. 특징 기술자가 하나의 특징점, 키포인트에 대한 추가적인 정보였다면 영역 기술자는 공간에 대한 정보를 나타낸다고 할수 있습니다. 영역 기술자는 전역 기술자와 지역 기술자가 존재한다고 할수 있는데, 전역 기술자인 경우 대표적으로 에지가 많이 활용된다고 합니다. 하지만 전역 기술자로서는 영상의 일부분 변화를 처리할수 없기 때문에 지역 기술자를 위주로 학습하였습니다.
- 지역 기술자에서는 아까 특징 기술자에서 상당히 계산량이 많았던 관계로 지역 이진 패턴 방법들이 주로 사용된다고 합니다. 대표적인 LBP Local Binary Pattern은 특징점 주위에 마스크를 씌워 이에 픽셀들의 대응쌍을 찾는데 이 픽셀 쌍은 이진값을 가지는게 특징이 됩니다. 이를 통해서 해당 영역에 대한 텍스처 정보를 보존할수 있어, 얼굴 인식 문제에 적용하는 경우 얼굴을 여러가지 셀로 분할하고 각 셀에 대한 LBP 히스토그램을 만듦으로서 얼굴 인식을 위한 모델을 만든다고도 합니다.
- 마지막으로 주성분 분석과 고유 얼굴, 즉 얼굴 인식에 대해서 살펴보면서 마무리 하였습니다. 주성분 분석은 큰 차원의 벡터를 최대한 정보 손실을 줄이면서 저차원의 벡터로 만드는 기술이라 할수 있습니다. 여기서 고유 얼굴은 입력 얼굴과 평균 얼굴의 차이 영상이라 할수 있습니다. 이 고유 얼굴에 주성분 분석을 적용하여 저차원의 고유 벡터를 구하게 되고 이 고유벡터와의 가장 거리가 가까운 고유 얼굴을 찾음으로서 누구의 얼굴인지 판단하는 기술임을 정리하였습니다.
300x250
'미분류' 카테고리의 다른 글
카이스트 vr-ar (0) | 2020.08.01 |
---|---|
2020-07-31 (0) | 2020.07.31 |
2020-07-29 (0) | 2020.07.30 |
2020-07-28 (0) | 2020.07.30 |
2020-07-27 (0) | 2020.07.30 |