학교에서 수행한 과제를 정리하는 차원에서 적어보는 글 입니다. 문제될시 알려주시면 삭제하겠습니다.
Convolutional Neural Networks
1. CNN 이란 무엇인가?
이번 학교 시스템프로그래밍 과제로 CNN(Convolutional Neural Networks)를 만들어보는 시간을 갖게 되었다.
CNN이란 간단히 말하면 딥러닝에서 여러 사물의 이미지를 인식시킨후, 예시를 보여주어 이것이 무엇에 해당하는지를 이전에 학습한 데이터에서 찾아 ouput을 도출하는 것이다.
우리는 그중에서 convolution layer와 pooling layer를 구현하는것이 수업 과제였다.
C를 기반으로 Linux환경에서 Message Queue를 통하여 만들어야 했다.
2. Filter의 종류 2가지
1) Convolutional layer
이 필터의 경우 행렬의 합성곱을 진행해주어야 하는 단계이다. 주어진 필터가 존제하는 상황에서 input으로 들어온 정보를 필터링 하여 output으로 수신해 줘야 했다. input matrix를 각각의 3x3 조각으로 나누어 줌과 동시에 연산을 진행후 queue로 송출해 줘야했다.
2) Pooling layer
여기서서는 2x2의 행렬에서의 max값을 찾아야하는 max-pooling방식이 사용되었다.
들어온 input matrix를 각각 2x2조각으로 나눈후 각 조각안에서 최대값을 탐색하여 output으로 도출해야 했다.
3. 전체적인 flow
▶ 이건 우선 그림을 본후 설명하겠다.
우선 input값으로 우리가 main함수에 인자로 전달한 정수값을 한 행으로 갖는 무작위 행렬을 생성한다.
이후 이값은 main process로 전달된 후 3x3크기의 조각으로 각각을 나누어 message queue에 보낸다.
이와 더불어 fork를 진행하여 multiprocess로 전환된 process각각 하나들은 queue에서 정보가 오길 기다리며 정보가 올 경우 각각의 process들은 이를 Convolutional filter를 통해 연산후 각각 다시 main으로 그 값을 전달하였다.
이후 다시 메인함수에서 생성된 정수값을 모아 만들어진 행렬을 다시 fork를 이용해 multiprocess로 전환시켜 Pooling layer를 통한 필터링 과정을 진행하여 output을 만들어 내었다.
각 message queue마다 담을수 있는 한계가 있어 제약이 있었는대, 결국 이문제는 해결하지 못하고 제출하게 되었다.
처음에는 하나의 message queue를 이용하여서 큐가 찼지만, 이후에는 이를 극복하고자 각자 개별의 queue를 사용하도록 전환하였다.
하지만 이또한 queue 갯수 자체의 문제로 인하여 결국 해결하지 못하였다. input으로 18이 최대 만들수 있는 한계였다.
( 해결한줄 알았던 나의 첫 프로그램은 알고보니 병렬처리가 아닌 직렬로 구현했었다. 처음에는 input으로 500단위 이상까지 계산하도록 만들어 내지만 알고보니 multiprocess가 되지 않았었다. 난 다 성공했다라고 생각했는대 뒤늦게 병렬처리 안한것을 느껴 다시 열심히 작업했지만 시간이 부족하였다....)
▶ 결과
input 값으로 4를준 경우이다. 18까지 정상작동 하는것을 확인했지만 이후부터는 작동하지 않았다.
4. 최종 완성본
깃허브에 최종 완성본을 올려두었다.
5. 끝으로
과제가 처음 나온날 부터 시작해서 2일정도에 걸쳐 처음 만든 프로그램의 경우 1000이상의 어느 숫자에도 작동하였다.
이렇게 완성했다라고 생각하고 한동안 안보다 강의 설명을 내가 잘못 인지했다라는것을 추후 알게되어 다시 병렬처리로 만들어야했다.
이를 너무늦게 인지하여 시간이 2일남은 상황에서 할수있는대까지 열심히 해 보았다. 비록 20이상의 숫자를 받을수가 없었지만 multiprocess가 정상 작동했다는 점에서 만족감을 느끼며 제출해야했다.
항상 느끼지만 따배씨로 C공부 빡세게 해두길 진짜잘했다......
(기말고사 이후)
기말고사가 끝난후, 최종 수정본으로 완성하였다. 뿌듯한 결과물이다.
'CS > System Programming (2021-2)' 카테고리의 다른 글
[시스템 프로그래밍] wait 함수 (0) | 2022.01.19 |
---|---|
[시스템 프로그래밍] Zombie Process : 좀비 프로세스 (0) | 2022.01.19 |
[시스템 프로그래밍] fork 함수 (0) | 2022.01.19 |
[시스템 프로그래밍] exec 함수들 (0) | 2022.01.19 |
[시스템 프로그래밍] Process : 프로세스 (0) | 2022.01.19 |
댓글