안녕하세요!
성실하게공부하는
김현욱입니다.
Github repository.
Study
🍎 2021/7월 Programming Problem Solving
PPS Link
🍎 2022/1월 Deep Learning Camp Study
Deep Learning Study
🍎 2022/1~2월 PyTorch Study (Lab People)
PyTorch Study
🍎 2021/11월 SAT Solving with C language
SAT Link
Project
대학생 모형차(ROS) 자율주행 대회 (2020.07-08)
파이썬, OpenCV, ROS 연결, Linux 환경에서 프로그램을 돌려본 경험 없이 자율주행 프로젝트에 참여했다. 카메라로 입력되는 영상 속 데이터의 환경 변수를 직접 바꿔보면서 안정적인 차선 주행을 성공시켰다. UltraSonic 센서를 이용하여 장애물 회피, 차선 변경하는 미션을 수행했지만, 영상 데이터 만으로 해결하지 못해 수상은 실패했다. 한 달간의 치열한 프로젝트 경험을 통해 자율주행 영상, 프로그램 개발자의 꿈을 갖게 되었다.
주행 1차 결과 영상
주행 1차 결과 영상
발표 영상
Sprint Tool을 이용한 웹서비스 만들기 (2020 11-12)
Spring Tool을 기반으로 CRUD 기능을 응용한 웹 사이트 만들기 프로젝트를 진행했다. Front-End의 UI는 Boot Strap을 이용했고 Back-End는 학교측의 DB(MySql)를 사용해서 학생별 성적관리 프로그램을 만들었다. 나는 로그인 데이터 관리와 전체적 UI를 구성했고 학생별로 다른 화면을 제공해주는 코드를 작성함에 있어서 JAVA의 Static 변수를 활용해 문제를 해결했었던 기억이 크게 남아있다.
프로젝트 구경하기(깃허브)
프로젝트 설명듣기(Tistory)
개발 블로그(Gatsby) 포트폴리오 작성 (2022.01)
Tistory로 학업과 공부한 것을 정리하다가 나만의 스타일로 커스텀한 블로그를 만들고 싶은 생각이 들었다. Jeykll 테마를 사용해서 깃허브 블로그를 만드는 것에 실패를 했었다가 학교 선배의 블로그를 보고 Gatsby를 이용해서 블로그를 만들어야겠다는 생각이 들었다. React와 Typescript로 CSS를 적용하고 SQL 문을 생성하는 방법과 Markdown 파일을 HTML로 변환할 수 있는 방법을 배웠다.
AI 프로젝트 Final 팀플 (2022.06)
딥러닝에 대한 전체적인 이론을 배우며 Jupyter를 이용해서 매주 실습을 진행하였다. 마지막 Final Project로 딥러닝을 이용해서 일상에서 사용할 수 있는 모델을 하나 만들어보는 작업을 진행하였다. MNIST DATASET과 영어 알파벳을 Dataset으로 Train을 시키고 직접 글씨를 적어서 해당 글자를 파악할 수 있는 간단한 모델을 만들기 위해 작업을 진행하였다. 처음부터 완전히 코드를 하나씩 짠 것은 아니고 Kaggle 대회에서 사람들이 제출한 코드를 참고하고 분석을 하여 결과를 직접 도출하는 과정으로 따라했다.
현재 랩실에서 딥러닝 모델을 사용하여 차선, 사람 검출을 하는 프로젝트를 진행했지만 직접 코드를 만들려고 하다보니 Conv, Batch, Norm, Relu 등등의 역할을 자세히 알지 못하면 그저 따라하는 것밖에 하는 것이 없겠구나라는 생각이 들었다. 4학년 때 직접 모델을 처음부터 끝까지 손으로 짜보는 코딩을 해야겠다는 계획을 세우고 있다.
국민대 자율주행 경진대회 예선 (2022.06-07)
Ubuntu 환경과 Virtual Machine 으로 주어진 Simulation 주행을 완성시켜야 하는 것이 첫 번째 목표였다. 작년에 참가했었을 때는 실제 모형 차량을 가지고 Line Detection을 하고 차량 제어를 하였지만 이번에는 주어진 트랙을 벗어나지 않고 최대한 빠른 속도로 도달하는 것이 목표였다. Line을 정확하게 Detection 하고 방향에 대한 PID 제어를 하려고 실제 주행과는 다르게 잘 적용이 되지 않아서 다른 방법을 진행하였다. 운전자가 ROI의 가장 아래의 중앙부분에 있다고 가정을하고 Left, Right Position에 대한 거리 값을 통해 정확한 Angle을 Arctan로 계산을 하여 1분 4초에 주행하는 것을 완성시켰다. (회사 측 시뮬레이션 주행 시간 : 1분 50초)
주차 상황과 본선 계획서를 작성하는 데 있어서 더 자세하게 적지 못한 점이 예선 탈락의 이유이지 않을 까 생각을 한다. 학기 말 시험기간에 프로젝트를 하는 것이 쉽지는 않았지만 여름 방학에 열릴 자율 주행 대회에 다시 참여하여 끝까지 좋은 성적을 얻어내기를 노력하려고 한다..!
포스코 상상교사 with 코드코치 봉사 동아리 (2022.07)
코드코치 봉사 동아리에서 포스코와 연계하여 포항 지역 중학생들을 대상으로 창의 진로 체험활동을 진행하였다. 4일 동안 1교시 ~ 4교시에 아이들과 같이 진로 적합도 검사, 탄소 중립 실현 방법, 친환경 공정에 대한 소개 등 수업을 진행헀다. 포항 이동중학교와 양덕중학교 학생들이 방학 전에 좋은 커리큘럼으로 같이 활동 하면서 좋은 경험을 쌓을 수 있어서 의미있었다. 원래 코딩 교육을 봉사하는 동아리의 개발 팀장을 맡고 있지만 정식으로 가르치기 전에 만들어진 커리큘럼을 가지고 학생들에게 교육을 나가보니 실제로 어떻게 커리큘럼을 만들어야 할지 방향성이 잡혔다. 앞으로 계속될 봉사 활동에 있어서 좋은 경험이 된 것 같다.
딥러닝 논문 스터디 (2022.09 ~ )
CNN 기반 딥러닝 논문을 공부하면서 현재 진행 중인 "자율주행을 위한 차량 전방 사물 인식 알고리즘 개선" 프로젝트를 진행함에 도움을 얻고자 시작했다. Object Detection, Segmentation 관련 논문을 중심으로 읽고 있고, 가장 기본이 되는 논문부터 시작하고 있다. ResNet, Inception, U-Net, Faster-RCNN, YOLO, SSD, FPN 순서대로 읽었으며 앞으로는 YOLO 모델에 대한 분석을 시작할 계획이다. 진행 형식은 돌아가면서 맡은 논문을 발표하는 식으로 진행을 하고 있으며, 학기 중에는 학업에 집중을 좀 더 하고자 토론 형식으로 진행되며 깃허브에 기록하는 중에 있다.
TI Deep Learning Model Import (2022.9 ~ 12)
TIDL 이란 Embedded Device에서 Deep Learning 모델을 Inference 하기 위해 Texas Instrument에서 제공하는 Tool이다. GPU에서 모델을 학습시킨 후 ONNX 형태로 변환한 뒤 Embedded 환경에서 작업하는 방식으로 진행된다. TIDL이란 가상 환경(Emulation)에서 각 오픈 소스 모델과 Pretrained Weight를 이용하여 Inference 하는 과정을 공부했다. Segmentation Task로 FCHarDNet, Object Detection Task로 MobileNetv2-SSD 모델을 사용했고, 논문 스터디를 바탕으로 어떻게 모델이 작동되는지 깊이 공부할 수 있었다. Embedded 환경에서 지원하지 못하는 연산 처리가 있었는데 이와 비슷한 Operation을 다른 것을 대체하는 과정에서 모델을 하나하나 뜯어봤던 것 같다.
PPYOLOE+, ResNet34 학습 및 Inferenece (2022.11 ~ 12)
Traffic Sign을 검출하기 위한 모델을 선정하였는데 이로 PPYOLOE+ 라는 모델과 ResNet34 모델을 통합하여 사용했다. PPYOLOE+는 Embedded 환경에서 Inference 하기에 불필요한 Operation을 줄임으로써 작은 물체를 잘 탐지할 수 있는 장점이 있고 ResNet은 Classification Task를 수행하기에 가장 간단한 모델인 동시에 좋은 성능을 갖고 있어서 선택을 했다. 데이터셋은 중국의 Traffic Sign (TT100K)를 사용하였고 학습을 통해 Traffic Sign의 location을 찾고 해당 Sign을 Crop한 뒤 Classification 모델에 넣어 분류하는 흐름으로 모델을 구성하였다.
Machine Learning Project - Regression (2022.10 ~ 11)
U.S Census Service에서 제공한 Boston Housing Dataset을 바탕으로 Linear Regression 과정을 직접 코드로 구현했다. 구현하는 과정에서 Cost 함수를 작성하고, Gradient Descent 함수 내의 Weight를 Update하는 수식을 직접 작성하면서 학습되는 Flow를 확실하게 이해할 수 있었다. Nonlinear 함수와 Hidden Layer 쌓아서 DL 모델을 만들기 전 가장 기초가 되는 부분을 직접 구현해보는 의미 있는 프로젝트였다. 수식적으로 구현한 것이 시각적으로 보여지고 그 결과를 확인할 수 있다는 것에 다시 한 번 수학이라는 학문에 감탄했던 것 같다.
Network Socket Programming - Char server (2022.10 ~ 11)
I/O Multiplexing을 할 수 있는 select 함수를 사용하여 여러 명의 Client들을 유지하고 Client가 보낸 메시지를 다른 모든 사용자들에게 전해주는 Server를 구현했다. Select를 사용하기 이전에는 Multi-Thread 방식을 사용하여 각 Server와 Client에 대해서 여러 개의 Thread로 관리를 하였다. 하지만 Select 함수를 통해서 File Descriptor를 Monitoring 하게 되면서 여러 개의 Thread를 만들어 자원을 낭비할 필요없이 간편하게 구현할 수 있었다. Chat Server를 구현하면서 카카오톡과 같은 정말 많은 사용자를 수용하고, 사용되는 프로토콜의 Reliability를 보장할 수 있도록 어떤 알고리즘을 가지고 있는지 궁금해졌고, 코드를 효율성 측면에서 계속 개발해 나가야 함을 다시 한 번 느꼈던 것 같다.
Computer Vision - YOLO, Background Subtraction (2022.10 ~ 12)
주어진 자동차 운정 상황을 바탕으로 Gray Scale의 여러 Transformation 작업을 진행했다. RGB 라는 3개의 색상 정보가 들어오지만 HSV로 형태를 변환하여 정보를 다양하게 활용할 수 있는 관점을 배웠다. 이를 바탕으로 Line Detection을 수행하고 현재 운전을 차선의 중앙에서 하고 있는 지 판단을 내리는 알고리즘까지 작성했다. 또한 주어진 배경 정보를 바탕으로 작은 움직임은 무시하고 큰 움직임에 대해서 Object를 탐지하는 프로젝트를 진행했다. 이는 이후 자동차의 운전 상황에서 주변 차량의 움직임을 검출할 수 있는 방식으로 사용될 수 있겠다라는 생각을 했다.
Programming Language - Recursion Desugaring (2022.10 ~ 12)
Racket 언어를 사용하여 Recursion 함수를 구현하기 위해서는 Identifier (variable)의 문제가 발생한다. Identifier를 재귀적으로 호출하지만 처음 함수를 Call 될 경우, 함수 Body 내의 Identifier는 아무것도 할당되지 않는 문제가 발생한다. 기존 언어에 구현된 Interpreter는 그대로 유지한 채로 문제를 해결하기 위한 방법으로 Sugaring, Desugaring의 개념을 사용했다. 다른 방법으로 Interpreter를 추가하여 문제를 해결했다. High-level에서 알고리즘만 짜면 되었던 코딩 유형과 달리 Interpreter를 직접 수정하면서 메모리를 직접적으로 만들어 할당해주면서 프로그램을 언어적 관점으로 시야를 넓힐 수 있었다.