안경잡이개발자

728x90
반응형

C언어 프로젝트는 빌드(Build)를 위한 순서를 Makefile을 이용해서 명시하곤 합니다. 이를 더욱 간단하게 만들기 위해서 CMake라는 도구가 도입되었습니다. 다시 말해 CMake대표적인 C/C++ 프로젝트 빌드(Build) 도구입니다. 흔히 어떤 오픈소스 프로젝트를 빌드하거나 할 때 CMake를 이용하여 빌드했던 경험을 떠올려보세요.

 

윈도우(Windows)에서 CMake를 설치하는 방법은 간단합니다. 가장 먼저 CMake의 공식 홈페이지에서 다운로드 페이지로 접속합니다. 

 

▶ 설치 경로: https://cmake.org/download/

 

저는 윈도우(Windows) 운영체제를 이용하고 있으므로 윈도우 버전으로 설치했습니다.

설치 과정에서는 기본적으로 [Next] 버튼을 눌러서 쭉 설치를 진행하시면 됩니다.

또한 CMake를 언제 어디서든 이용할 수 있도록 하기 위해서 시스템 경로(System Path)에 추가할 수 있도록 합니다.

설치가 완료되었습니다.

설치 이후에는 다음과 같이 명령 프롬프트(CMD)에서 cmake 명령을 입력하면 사용 방법(Usage)에 대한 내용이 등장합니다.

 

 

728x90
반응형

728x90
반응형

2020년 02월 기준으로 최신 MinGW 설치 프로그램은 다음의 경로에서 설치 가능하다.

 

https://osdn.net/projects/mingw/releases/68260

 

mingw-get-setup.exe 파일을 다운로드 받아서 설치를 진행하면 된다.

기본적인 설정 그대로 설치를 진행한다.

기본 설정 그대로 진행한다.

일반적으로 Basic Setup으로 설치를 진행하는데, 보이는 패키지를 모두 선택해서 설치하도록 해준다.

이제 [Installation] - [Apply Changes]를 눌러 설치를 진행한다.

[Apply]를 눌러 설치한다.

설치가 진행되고 있는 모습이다.

[시스템] - [고급 시스템 설정] - [환경 변수] - [시스템 변수] - [Path] 변수 선택 및 C:\MinGW\bin 경로 추가

 

이후에 gcc -v 명령어를 입력하면 다음과 같이 GCC가 성공적으로 설치된 것을 확인할 수 있다.

728x90
반응형

728x90
반응형

Zephyr Project의 소스코드를 받아서 보드(Board)에 올리기 위해서는, 기본적으로 Zephyr Project 개발 환경을 구축해야 합니다. "Getting Started" 페이지로 이동하면 상세한 설명이 나와 있습니다. 또한 Zephyr Project는 다양한 운영체제에서 구동시킬 수 있다는 점이 장점입니다. 저자의 경우 윈도우에서 개발환경을 구축하고자 하여, 윈도우에서의 진행 방법을 포스팅하고자 합니다.

 

▶ 프로젝트 시작 가이드: https://docs.zephyrproject.org/latest/getting_started/

 

기본적으로 프로젝트 시작을 위한 종속성 패키지를 설치하기 위하여 Chocolatey를 설치할 필요가 있습니다. Chocolatey는 Windows 운영체제 전용 패키지 매니저로, 다양한 소프트웨어를 검색하고 손쉽게 설치 및 업그레이드할 수 있도록 해줍니다. 파이썬에서의 패키지 관리 도구(PIP)나 리눅스에서의 다양한 패키지 관리 도구를 떠올리시면 Chocolatey가 어떤 역할을 하는지 이해되실 겁니다. 설치 이후에는 choco라는 커맨드를 이용해 명령을 날릴 수 있습니다.

 

 

일단 Choco를 설치하기 위하여 가장 먼저 PowerShell을 우클릭한 뒤에 [관리자 권한으로 실행] 버튼을 눌러 관리자 권한으로 실행합니다.

Chocolatey 설치 페이지에서 나와 있듯이 아래와 같은 명령어(Command)를 복사하여 PowerShell에 붙여넣기 해줍시다.

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

아래 그림에서 설명으로 나와있듯이, 설치 과정에서 참고해야하는 다양한 사항들이 적혀 있습니다.

아무튼 명령어를 입력하면 다음과 같이 설치가 완료됩니다. 저는 경고 메시지가 등장했지만, 일단 귀찮으니까 넘어가겠습니다. (큰 문제 없이 진행되므로 일단 무시했습니다.)

아무튼 설치 이후에, PowerShell에서 choco 명령을 입력했을 때 다음과 같이 버전이 출력이 된다면 정상적으로 설치가 된 것입니다.

이후에 설치된 choco 패키지 매니저를 이용하여, 명령어들을 하나씩 입력하여 설치를 진행합니다. 총 4개의 명령어를 입력하게 되면 차례대로 git, python, ninja와 같은 도구(Tools)들이 설치가 됩니다. 이후에 최종적으로 west를 설치하도록 유도하고 있습니다. 한 번 따라가 보겠습니다.

저자의 경우 모든 도구가 이미 설치가 되어 있는 상태라서 다음과 같이 출력이 되는 것을 알 수 있는데, 처음 설치하는 경우 모든 패키지를 설치하는 과정에서 몇 분 가량이 소요됩니다.

또한 저자는 다음과 같이 파이썬(Python) 3.8 버전이 설치가 되었으나, Python 3.8 버전의 사용을 원치 않았습니다. 또한 Python 3.8 버전 설치 이후에 pip 명령이 정상적으로 동작하지 않아서 다음의 명령어를 통해 Python 3.8 버전을 제거한 뒤에 Python 3.7 버전을 설치했습니다.

choco uninstall python 
choco install python --version=3.7.2 

이후에 시스템 변수에서 path 변수에 있는 Python 3.8 버전의 경로를 제거한 뒤에, 새롭게 설치된 Python 3.7 버전의 설치 경로를 넣어주었습니다. 아무튼 설치가 잘 되었는지를 확인하기 위해 python 및 git 명령을 실행해보고, 정상적으로 설치가 되었는지를 추가적으로 확인해주세요.

그리고 아무튼 west까지 잘 설치되었다면 성공입니다.

저자의 경우 위 과정에서 설치한 Python 및 Git이 이상하게도 정상적으로 동작하지 않아서 고생했습니다. 잘 안 되면 그냥 Python이나 Git을 따로 설치해서 시스템 변수에 잘 넣어주기만 해도 동작하는 것 같습니다.

 

※ Zephyr Project 소스코드 불러오기

 

이제 다음 그림에서 나오는 명령어들을 이용하여 Zephyr Project의 소스코드를 불러올 수 있습니다. 이 때 git을 포함하여 아까 설치했던 도구들 중에서 제대로 설치가 안 된 것이 있다면 오류가 발생할 수 있습니다. 애초에 west 명령을 이용해도, 실제로는 git clone 명령을 이용해서 Zephyr Project 소스코드를 받아오는 것이기 때문입니다.

실제로 아래 명령어 중에서 west init zephyrproject 부분을 통해, 전체 Zephyr Project 소스코드를 원하는 폴더에 다운로드 받게 됩니다.

cd '원하는 폴더'
west init zephyrproject
cd zephyrproject
west update

※ 필요한 파이썬 패키지 설치 

 

이후에 zephyr 소스코드 폴더의 scripts 폴더로 이동하여 필요한 패키지를 모두 설치하시면 됩니다.

따라서 저는 웹 사이트에서 소개하고 있는대로 scripts 폴더로 이동하여 모든 관련 패키지를 설치해주었습니다.

※ 소프트웨어 개발 툴 체인 설치

 

또한 소프트웨어 개발 툴 체인(Tool Chain)을 설치해야 합니다.  Tool Chain이 설치되어 있어야 정상적으로 컴파일러, 어셈블러, 링커 및 종속성 라이브러리들을 포함하여 Zephyr 애플리케이션을 빌드할 수 있습니다. 다만 기본적으로 Zephyr SDK는 윈도우 운영체제를 지원하지 않기 때문에 윈도우에서 이러한 기능을 이용하기 위해서는 3rd-party toolchain을 설치해야 합니다.

제가 대상으로 하는 보드(Board)는 Arm Cortex-M7 core 기반이기 때문에, 저는 GNU ARM Embedded 툴 체인을 설치했습니다. 

공식 GNU ARM Embedded 설치 경로로 이동하여 설치합니다.

[Downloads] 버튼을 눌러 설치를 진행할 수 있었습니다.

Zephyr Project 커뮤니티에 의하면 7-2018-q2-update 버전이 오류 없이 정상적으로 동작한다고 합니다. 따라서 저는 Windows 10을 이용하고 있으므로 다음과 같은 Windows 32-bit 버전을 다운로드 하였습니다.

다음과 같이 설치를 완료했습니다. 참고로 설치할 때는 설치 폴더에 공백이 들어가지 않도록 그냥 C 드라이브와 같은 곳에 그대로 설치를 진행해주세요.

이후에 환경 변수 설정을 해줍니다. 웹 사이트에서는 두 개의 환경 변수(Environment Variables)들을 넣어주어야 한다고 하네요.

ZEPHYR_TOOLCHAIN_VARIANT: gnuarmemb
GNUARMEMB_TOOLCHAIN_PATH: 툴 체인이 설치된 경로

따라서 저는 문서에서 요구하는 대로 다음과 같이 추가해주었습니다. 

※ Blinky Application 빌드하기 ※

 

이제 Blinky Application을 빌드할 수 있습니다.

제가 쓰고 있는 보드는 STM32 Nucleo F767ZI 보드이기 때문에 다음과 같이 명령어를 입력했습니다.

cd '해당 폴더'/zephyrproject/zephyr
./zephyr-env.cmd
west --zephyr-base ./ build -p auto -b nucleo_f767zi samples/basic/blinky

▶ 가능한 오류 상황 1) GCC 관련 오류

 

저는 다음과 같이 C Compiler와 CXX Compiler를 찾지 못하는 오류가 발생했습니다.

따라서 GCC 경로 설정을 해주면 됩니다. 만약에 윈도우(Windows) 사용자 중에서 GCC가 설치되어 있지 않으신 분이라면 MinGW를 설치하신 뒤에 시스템 변수로 등록해주시면 됩니다. 저자의 경우 처음에 Visual Studio가 설치되어 있었기 때문에 Visual Studio와 연동된 GCC를 사용하려고 했는데, 결국 그냥 MinGW로 설치한 GCC를 이용해서 진행했습니다.

 

▶ 가능한 오류 상황 2) ZEPHYR_BASE 설정 오류

 

또한 zepyer-env.cmd를 실행했다고 하더라도, 다음과 같이 ZEPHYR_BASE가 설정되어 있지 않다는 오류가 나올 수 있습니다. 이 경우에는 수동으로 ZEPHYR_BASE의 위치를 설정해주어야 합니다. 따라서 west 명령어를 실행할 때 --zephyr-base 옵션을 주어야 합니다. 제가 넣어 준 명령에서는 --zephyr-base ./라는 부분이 들어가 있습니다. 이것은 현재 폴더를 ZEPHYR_BASE 폴더로 설정하겠다는 것입니다.

▶ 가능한 오류 상황 3) 보드 모델명 오류

 

또한 보드(Board) 모델 이름을 잘못 기입하면 다음과 같이 보드 이름을 찾을 수 없다는 메시지가 나올 수 있습니다.

이 경우에는 가능한 보드 모델 이름들이 쭉 나열되기 때문에, 자신의 보드 이름과 동일한 것을 찾아서 잘 기입해주시면 됩니다.

 

▶ 가능한 오류 상황 4) CMake 불가능 오류

 

또한 다음과 같이 /cmake/app/boilerplate.cmake 파일을 찾을 수 없다는 메시지가 나올 수 있습니다. 이 경우 ZEPHYR_BASE를 설정했는지 확인해주시고, CMake를 CMake 공식 홈페이지를 통해 다시 설치하셔야 할 수도 있습니다. 이러한 오류 메시지는 'Cannot specify sources for target "app" which is not built by this project' 라는 메시지와 함께 등장할 수 있습니다.

▶ 가능한 오류 상황 5) 기타 오류

 

이외에도 기타 오류로 의해 실행이 안 될 수도 있습니다. ninja: error: loading 'build.ninja'라는 ninja 관련 설정 파일을 찾을 수 없다는 오류 메시지가 나올 수도 있습니다. 저는 그럴 때 그냥 jephyrproject 프로젝트 파일을 통째로 삭제한 뒤에 다시 'Zephyr Project 소스코드 불러오기' 단계부터 다시 시작했더니 오류 없이 동작했습니다.

 

이를 포함해 다양한 이유로 Configuring incomplete, errors occurred! 와 같은 메시지가 나올 수 있습니다. 나는 분명히 하라는 대로 거의 완벽하게 잘 한 것 같은데, 빌드가 안 되는 경우 마찬가지로 jephyrproject 프로젝트 파일을 통째로 삭제한 뒤에 다시 'Zephyr Project 소스코드 불러오기' 단계부터 다시 시작해보는 것이 도움이 될 수 있습니다. (저자의 경우 도움이 되었습니다.)

 

▶ 정상적으로 빌드(Build)가 되었을 때

 

정상적으로 빌드가 완료되었을 때는 다음과 같이 행복한 문구만 등장합니다.

※ 플래시(Flash) 및 애플리케이션 실행 

 

이제 빌드가 완료되어 .elf 파일을 얻게 되었습니다. 따라서 이렇게 만들어진 펌웨어(Firmware) 파일을 플래시(Flash)하여 보드에 업로드하면 됩니다. 다만 윈도우 사용자의 경우 플래시 과정에서 OpenOCD가 필요할 수 있습니다.

 

▶ OpenOCD 설치 경로: https://gnutoolchains.com/arm-eabi/openocd/

 

Download OpenOCD for Windows

Download pre-built OpenOCD for Windows OpenOCD is an open-source tool that allows debugging various ARM devices with GDB using a wide variety of JTAG programmers. You can download the pre-built OpenOCD for windows from this page: Each build above includes

gnutoolchains.com

최신 버전의 OpenOCD를 다운로드 받아줍니다.

압축을 푼 이후에 bin 폴더와 share 폴더를 C:\Program Files\OpenOCD 경로의 안으로 옮긴 뒤에, C:\Program Files\OpenOCD\bin을 시스템 변수의 Path에 등록합니다.

그리고 위와 같이 환경 변수를 하나 추가합니다. OPENOCD_DEFAULT_PATH의 값으로 C:\Program Files\OpenOCD\share\openocd\scripts를 넣습니다. 이제 한 번 나와 있는 대로 west flash 명령을 이용하여 플래시(Flash)를 진행해보도록 합시다.

다만 저자의 경우 OPENOCD-NOTFOUND not found; install it or add its location to PATH 라는 메시지가 등장했습니다. 하지만 분명히 OpenOCD는 설치를 마친 상태였으므로, 안 되는 이유가 잘 납득이 안 되어 컴퓨터를 재부팅해보았습니다. 그랬더니 다음과 같이 오류 없이 잘 동작하게 되었습니다.

플래시를 진행하는 과정에서 Windows 컴퓨터와 보드(Board)가 연결된 상태라면, 이제 정상적으로 보드가 플래시 된 겁니다. 실제로 보드를 확인해 보시면 보드에 내장된 LED가 반짝반짝 빛나게 됩니다. 별 거 아닌 예제일 텐데, 자꾸 오류가 발생해서 오랜 시간이 소요되었네요.

728x90
반응형

728x90
반응형

설치 경로는 다음과 같습니다. 

 

https://docs.microsoft.com/ko-kr/visualstudio/productinfo/installing-an-earlier-release-of-vs2017

 

Visual Studio 2017 이전 릴리스 설치

이 문서에서는 Visual Studio 2017의 이전 릴리스 설치에 대한 지원을 제공합니다.

docs.microsoft.com

[이전 릴리스 설치] 부분에서 원하는 버전의 설치 파일을 클릭하여 다운로드를진행하면 됩니다.

설치 파일을 실행하여 인스톨러를 불러옵니다.

약 1분 이내로 인스톨러가 준비됩니다.

여기에서 자신이 원하는 워크로드를 선택하여 설치하시면 됩니다. 저는 C++ 개발환경을 설치했습니다.

설치 완료 이후에는 재시작하면 됩니다.

컴퓨터 재시작 이후에는 Visual Studio를 실행한 뒤에 로그인을 해줍니다.

이제 간단히 하나의 프로젝트를 만들 수 있습니다.

하나의 소스 파일을 추가해보겠습니다.

대략 hello.c 라는 파일입니다.

소스코드 작성 및 실행을 해보니까 너무 잘 동작하네요.

728x90
반응형

728x90
반응형

※ 오토 인코더의 구성요소

 

1) 인코더(Encoder): 얼굴 이미지를 '인코딩(Encoding)' 하는 역할을 수행한다. 얼굴 이미지가 입력으로 들어 오면 그 이미지를 Representation 벡터(Vector)로 변환한다. 다시 말해 Representation에는 입력 이미지의 어떠한 특징(Feature)들이 임의의 형태로 저장된다.
2) 디코더(Decoder): 압축된 Representation을 다시 얼굴 이미지로 되돌리는 역할을 수행하는 파트다.

이러한 인코더와 디코더를 합친 구조를 흔히 오토 인코더(Auto-Encoder)라고 부르는데, 주로 차원 축소, 데이터 압축이나 Generative Model의 기능으로 인공지능 분야에서 많이 활용되고 있다.  사실 이러한 AE는 GAN과 더불어 현재 Generative Model의 주축이라고 할 수 있는데, 자세한 내용에 대해서 궁금하신 분께는 VAE 논문을 읽어 보는 것을 추천한다.

아무튼, 오토 인코더 자체는 어떤 이미지를 '압축'했다가 다시 '복원'하는 과정을 수행해주는 모델이라고 할 수 있다. 이러한 구조가 DeepFakes 분야에서 유용한 이유는, 기본적으로 오토 인코더는 중간 레이어라고 할 수 있는 Representation Layer가 '얼굴의 특징'을 잡아내고 있기 때문이다.

예를 들어 오바마 사진을 넣어서 학습을 시키면, 오바마가 가지고 있는 얼굴의 특징들이 Representation Layer에  남아 있게 된다. (Controllable 한지는 잘 모르겠다.) 특징이라고 하면, 다음과 같은 것들이 있다.

- 눈썹의 위치
- 입술의 모양
- 눈의 크기
- 등등

 

아무튼 이러한 Feature들을 Representation Layer에서 인코딩된 정보로서 포함하게 된다.

 

 

※ 오토 인코더의 학습

 

기본적으로 머신러닝 모델 학습에 있어서는 다음과 같은 용어를 알고 있으면 좋다.

- 손실(Loss): 모델에 입력으로 넣는 이미지가 복원(Reconstruction)된 이미지와 얼마나 다른지를 정량화한 것이다. 학습 초반에는 당연히 손실 값이 크고, 학습이 잘 되고 나면 손실 값이 낮다. 학습을 시킨다는 것은 손실 값 자체를 낮추기 위해 모델을 Update하는 것을 의미한다. 일반적으로 FaceSwap에서는 오토 인코더의 Loss 값이 0.01 미만으로 떨어졌을 때, 상당히 DeepFakes 영상이 그럴싸하게 나온다.

- 가중치(Weights): 흔히 모델의 파라미터 값이라고 불리는 Weight 값은, 모델 그 자체의 값을 의미한다. 이미지 자체가 원래 고차원의 Vector 형태로 주어지며, 모델은 여기에 임의의 가중치 값을 곱하여 연산을 수행한다. 사실 모델을 Update한다는 의미도 이 가중치를 업데이트하는 것을 의미한다.

 

※ FaceSwap의 동작 원리

 

이제 이러한 오토 인코더를 이용하여 어떻게 DeepFake가 만들어지는지 자세히 알아보자.  DeepFakes 모델은 오토 인코더 모델을 재미있게 변형하여 만들어졌다.  바로 학습 과정에서 두 영상이 '공통된 인코더(Shared Encoder)'를 사용하고, 서로 다른 디코더(Decoder)를 이용하도록 하면 된다.

그러면 Encoder에서는 두 얼굴에서 공통적인 특징들(눈썹의 위치, 코의 위치, 얼굴 각도 등)을 효과적으로 추출할 수 있게 되고,  두 얼굴에서 서로 다른 특징들(눈썹의 모양, 코의 모양, 얼굴의 형태 등)은 Decoder 파트에서 구분하여 이미지를 복원(Reconstruction)하게 된다.

그렇게 학습을 하고 나면, Source의 이미지를 Encoder에 넣어서 추출된 '눈썹의 위치, 코의 위치, 얼굴 각도' 등의 Representation을 다시 Decoder에 넣게 되면, 해당 위치에 맞게 Target의 이미지의 인물이 가지는 정체성(Identity)이 입혀지게 된다.  다시 말해 해당 인물이 누구인지를 알려주게 되는 정체성 정보는 Decoder 파트가 처리하게 되어 DeepFakes 비디오가 만들어지는 것이다.

 

 

※ 학습(Training) 실습

 

이제 지난 시간에 추출했던 이미지를 가지고 학습을 진행해보자. Input A는 Source이며, Input B는 Target이 된다. 다시 말해 Source 동영상의 얼굴 부분에 Target(피해자) 동영상에 존재하는 사람의 얼굴 정체성(Identity)를 삽입하는 것이다. 즉, Input A에 Input B의 얼굴이 삽입된다. 예를 들어

 

- Input A: 부시(Bush)

- Input B: 오바마(Obama)

 

위와 같이 설정하면 부시 미국 전 대통령이 연설하는 동영상에 오바마 미국 전 대통령의 얼굴이 삽입된다.

이제 학습이 진행됨에 따라서 모델 파일을 저장할 경로를 [Model Dir]에 기록한다. 이후에 [Train] 버튼을 누르면 학습이 진행된다.

※ 학습이 안 되는 경우

 

원래는 학습(Training)이 정상적으로 진행이 되며 모델이 학습됨에 따라서 Face Swapping이 얼마나 잘 되는지 [Preview]에서 보인다. 하지만 저자의 경우 AMD 그래픽 카드를 가지고 있어 호환 문제로 다음과 같은 크래시(Crash)가 발생하였다.

이런 문제가 발생하는 경우, 선택할 수 있는 방법은 여러 가지가 있는데, 대략 다음과 같다.

 

- FaceSwap을 CPU 버전으로 설치 및 실행하여 CPU만 가지고 학습을 진행하기

- Google Colab과 같은 무료 GPU 서비스를 이용하여 학습을 진행하기

- 개인용 학습 워크스테이션을 구축하여 리눅스 서버상에서 학습을 진행하기

- 별도로 AWS 등에서 GPU 서버를 구축하여 학습을 진행하기

 

 

  사실상 이전 포스팅에서도 저자가 가지고 있는 AMD GPU 그래픽 카드의 호환 문제 때문에 추출(Extraction)을 CPU만 가지고 수행하였다. 역시 학습(Training)을 수행할 때에도 동일한 문제가 발생하고 있는 것이다. 하지만 걱정할 필요는 없다. 어차피 나중에 제대로 장비를 갖추어서 학습을 진행할 때는 리눅스에서 진행하게 되므로, 미리 공부하는 셈 치면 된다. 아무래도 공짜로 학습을 시키는 방법 중에서는 Google Colab이 가장 효과적일 것이다.

 

  저자가 사용한 Google Colab 소스코드를 첨부하겠다.

 

※ 학습 과정 살펴보기

 

# 학습 시작 직후

 

# 학습 시작 5분 후

 

# 학습 시작 30분 후

 

# 학습 시작 8시간 후

728x90
반응형