CS 41

Facenet 얼굴 인식 모델 Fine-tuning 하기

졸업프로젝트에 이용할 얼굴 인식 모델의 한국인 얼굴 인식 정확도를 높이기 위해 Facenet이 제공한 pre-trained model을 직접 수집한 한국인 연예인 얼굴 이미지로 fine tuning 하였다. 그 과정은 다음과 같다. 학교 측에서 gpu 서버를 다소 늦게 제공해주어 불가피하게 구글 colaboratory와 anaconda+jupyter notebook 조합을 넘나들며 training을 해야 했는데, 이 글에서는 구글 colab 환경에서의 학습을 중심으로 설명하겠다. 데이터 준비하기 facenet에서 제공하는 코드를 기반으로 fine tuning할 생각이라면, dataset의 구조와 형식, 설정 등을 facenet에서 이용한 dataset과 일치시켜야 한다. 이는 facenet 공식 깃허브 ..

CS/기계학습(ML) 2022.05.11

Monitor란?

Monitor란? 프로세스 동기화를 구현하기 위해서 semaphore를 사용하는 것에는 몇 가지 문제가 있다. 우선 코딩하기가 쉽지 않고, 정확하게 작동한다는 것을 입증하기가 어렵다. 또한 한 번의 실수가 모든 시스템에 치명적인 영향을 미친다. V와 P의 순서를 바꾸어 쓰거나 P만 2번 쓴 경우 mutual exclusion이 깨지거나 deadlock 문제가 생길 수 있다. 이러한 문제를 해결하기 위해 사용하는 것이 Monitor이다. Monitor란 객체단위로 구성된 프로그램으로, 공유 데이터 멤버 변수와 그 변수들을 조작할 수 있는 함수들을 포함하고 있다. 모니터 내에서는 한 번에 하나의 프로세스만이 활동 가능하도록 구현되어 있어서 semaphore를 이용할 때처럼 직접 동기화 제약 조건을 명시적으로..

CS/운영체제(OS) 2022.05.10

Race Condition과 프로세스 동기화(Process Synchronization)

Race Condition이란? Race condition이란 여러 프로세스들이 동시에 공유 데이터에 접근하는 상황을 말한다. 데이터 최종 연산 결과가 마지막에 어떤 프로세스가 데이터를 다루냐에 따라 달라지기 때문에 문제가 된다. 이를 막기 위해서 동시에 실행되는 프로세스들은 동기화되어야 한다. OS에서 Race condition이 발생하는 경우 OS에서 race condition이 발생하는 경우는 크게 3가지가 있다. 1. 커널 수행 중 인터럽트가 발생한 경우 커널모드가 running하고 있을 때 interrupt가 발생하여 인터럽트 처리 루틴이 수행되면 둘다 커널 코드이므로 커널 주소 공간을 공유하게 되어 race condition이 발생한다. 2. 프로세스가 시스템콜을 하여 커널 모드로 수행 중인데..

CS/운영체제(OS) 2022.04.24

CPU 스케줄링 : CPU 스케줄러와 CPU 스케줄링 알고리즘들

CPU 스케줄링 CPU 스케줄링이란 어떤 프로세스에게 CPU를 할당을 해줄 것인지 정하는 것이다. CPU와 I/O 장치 등의 시스템 자원을 골고루 효율적으로 사용하기 위해서 CPU 스케줄링이 필요하다. CPU Scheduler가 Ready 상태에 프로세스 중에서 이번에 CPU를 줄 프로세스를 선택하면, Dispatcher가 그 프로세스에게 CPU 제어권을 넘기며 이 과정을 문맥 교환, context switch라고 한다. 스케줄링을 위한 큐와 스케줄러 프로세스를 스케줄링하기 위한 큐에는 세 가지가 있다. 프로세스들은 각 큐들을 오가며 수행된다. 1. Job queue : 현재 시스템 내에 있는 모든 프로세스의 집합 2. Ready queue : 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리..

CS/운영체제(OS) 2022.04.23

프로세스 관리 : 프로세스 생성과 종료, 부모 프로세스와 자식 프로세스

프로세스 생성 시스템이 부팅된 후 최초로 생성되는 프로세스는 운영체제가 직접 생성하지만, 그 이후에는 이미 존재하는 프로세스를 복제하여 다른 프로세스를 생성하게 된다. 이때 새로운 프로세스를 생성하는 기존 프로세스를 부모 프로세스라고 하고, 새로 생성되는 프로세스를 자식 프로세스라고 한다. 프로세스는 전체적으로 트리의 계층 구조를 형성한다. 프로세스는 자원을 필요로 하는데 이 자원을 운영체제로부터 받을 수도 있고 부모 프로세스와 공유할 수도 있다. 부모와 자식 간의 자원 공유는 크게 3가지로 나눠진다. 1. 부모와 자식이 모든 자원을 공유하는 모델 2. 일부만을 공유하는 모델 3. 자원을 전혀 공유하지 않는 모델 대부분의 경우 3번에 속하며, 프로세스 부모와 자식 프로세스의 수행 방식 또한 두 가지로 나..

CS/운영체제(OS) 2022.04.21

파일 시스템과 DBMS의 비교

파일 시스템을 이용한 데이터 관리 파일 시스템 파일은 기본적으로 순차적인 레코드들로 구성되며, 각각의 레코드는 연관된 필드들의 모임이다. 파일에 접근하는 방식이 프로그램 내에 상세히 표현되어, 프로그램과 데이터의 독립성이 충분히 보장되지 않는 데이터 종속성 문제가 있다. 예를 들어 만약 A라는 응용 프로그램에 변화가 생기면, 그 프로그램과 연관된 파일 B와 파일 B를 쓰는 다른 프로그램들까지 같이 수정해주어야 하는 것이다. 이런 번거로움은 상대적으로 높은 유지보수 비용을 초래한다. 그러나 파일 시스템의 단점은 이뿐만이 아니다. 파일 시스템의 단점 1. 같은 데이터가 서로 다른 여러 개의 파일에 중복해서 저장된다. 특정 데이터를 변경하려면 해당 데이터를 포함한 파일을 모두 수정해야 하기 때문에 데이터 불일..

스레드(Thread)란? : 프로세스와의 비교

스레드(Thread)란? 스레드란 light weight process라고 불릴 정도로 프로세스와 유사한 개념이다. 이전 글에서 프로세스는 프로그램을 실행시켜서 메모리에 로드한 것이라고 설명한 바 있다. 운영체제로부터 메모리와 CPU 등의 자원을 할당받을 때에는 이렇게 프로세스를 기준으로 할당을 받는다. 스레드는 프로세스를 기준으로 할당받은 자원을 CPU가 실제로 이용하는 것의 기본 단위다. 즉, 프로세스 안에 스레드를 여러 개 두어서 프로세스 단위로 할당받은 자원을 이용해 CPU가 작업을 할 때 스레드 단위로 나누어 처리하도록 할 수 있는 것이다. 이런 이유로 스레드를 light weight process라고도 하는 것이며, 전통적인 개념의 heavyweight process는 단 하나의 스레드로 이루..

CS/운영체제(OS) 2022.04.20

프로세스와 프로세스 문맥, 문맥 교환(Context Switch)

프로세스란? 프로세스란 프로그램을 실행시켜 메모리에 로드한 것으로, 다르게 말하면 프로세스는 곧 살아 움직이는 프로그램이라고 할 수 있다. 프로세스 문맥이란? 프로세스 문맥, 프로세스 컨텍스트란 프로세스를 설명하는 다양한 실행 정보들이다. 프로세스 컨텍스트에는 다음과 같은 것들이 해당된다. 1. 하드웨어 문맥 CPU 수행 상태를 나타내는 하드웨어 문맥은, Program counter(프로그램 코드 중 몇 번째 라인을 수행하고 있는지)와 프로그램 실행 시에 사용되는 data들을 저장하고 있는 각종 레지스터를 포함한다. 2. 프로세스 주소 공간 code 영역, data 영역 그리고 stack 영역으로 구성된 프로세스의 개별적인 주소 공간을 의미한다. 프로세스 주소 공간에 대한 자세한 설명은 여기를 참고하자...

CS/운영체제(OS) 2022.04.19

프로세스 주소 공간 : Stack, Data, Code

파일을 실행시키면 메모리에 프로세스가 로딩된다. 프로세스가 로딩된다는 건, 메모리에 프로세스 Address space가 할당되는 것인데 프로세스의 address space는 stack 영역과 data 영역, code 영역으로 나뉜다. Code 영역 ▷ 프로그램 컴파일 코드가 저장된다. ▷ 프로그램의 코드는 바뀌어서는 안 되기 때문에 읽기만 가능하다. ▷ 실행 파일을 구성하는 유저 모드에서 작동하는 사용자 정의 함수와 유저 라이브러리 함수 코드뿐 아니라 제어문과 상수 등이 포함된다. Data 영역 ▷ 프로그램의 static data와 global variable이 저장된다. ▷ 프로그램이 시작할 때 함께 할당되며 프로그램이 종료되면 소멸한다. ▷ 실행 과정에서 변수값이 충분히 변할 수 있으므로 읽기와 쓰기..

CS/운영체제(OS) 2022.04.19

데이터베이스 시스템(DBS, Database System)

데이터베이스란? 데이터베이스란 어떤 조직의 응용 시스템들이 공유하는 운영 데이터들이 구조적으로 통합된 모임이다. 이때 데이터베이스의 구조는 사용되는 데이터 모델에 의해서 결정된다. 특징 - 데이터 대규모 저장소로 여러 사용자에 의해 동시에 사용된다. - 모든 데이터 간의 중복을 최소화하며 데이터를 통합된 상태로 관리한다. - 운영 데이터 자체 뿐만 아니라 그 데이터에 관한 설명(데이터베이스 스키마 또는 메타데이터)까지 포함한다. - 프로그램과 데이터 간의 독립성이 제공된다. - 데이터에 효율적으로 접근할 수 있고 질의를 할 수 있다. 데이터베이스 시스템과 관련된 개념들 1. 데이터베이스 관리 시스템(DBMS, Database Management System) DBMS란, 데이터베이스를 생성하고, 그 구조..