본문 바로가기

전체 글48

Message Authentication Code (MAC) Message Authentication Code쉽게 말해 데이터가 변조되었는지를 확인하기 위해 원본 msg에 덧붙이는 code이다. 그래서 cryptographic checksum이라고도 불린다. Digital Signature와 비슷한 원리로, sender는 보내려는 msg에 MAC을 concatenate 후 receiver에게 전달한다. Receiver는 msg에 동일한 연산을 적용한 후 얻은 결과값이 받은 MAC값과 동일하면, msg가 변조되지 않았으며 예상한 sender로부터 왔다는 것을 알 수 있다.  MAC Properties- Digital Signature와 다른 점은, 생성될 때 secret key를 사용한다는 점이다. msg와 secret key가 MAC 생성 함수 C의 input으로.. 2024. 6. 11.
The Onion Router (TOR) BackgroundTLS(Transport Layer Security)는 IP header를 암호화하지 않는다. 만약 TLS가 header를 암호화한다면, header 정보를 탈취하려는 중간자 공격을 막을 수 있어 좋아보이기도 한다.하지만 IP header를 암호화해버리면, Network Layer에서 routing 시에 destination IP address로 패킷을 전달할 수 없게 된다. Router가 해당 packet을 어디로 전달할지에 대한 정보가 header에 있기 때문이다. 그러면 router에게 IP packet의 header를 공개하는 것이 불가피한 상황에서, 어떻게 하면 중간자 공격으로부터 자유로울 수 있을까? Linkability Issue만약 TLS 차원에서 데이터를 암호화한 후, .. 2024. 6. 10.
[졸업프로젝트] 상품 태그 OCR 모델 개발 과정 이번 졸업프로젝트에서 AI 모듈 구현을 맡게 되어서, OCR을 활용한 상품 태그 인식 파이프라인을 구현했다.우리 팀이 개발하는 서비스 'TruthTag'는 식료품 스마트컨슈밍 어시스턴트로, 가공 식료품에 스킴플레이션이나 슈링크플레이션이 일어나는지를 모니터링하고, 상품의 변동 사항을 시각화하여 제공하는 서비스이다. 사용자가 원한다면 특정 상품 대신 구매할 수 있는 대체품을 추천하는 챗봇 서비스 기능도 있다. 그러니까 우리 서비스에서 AI 모듈이 필요한 곳은 1) 사용자가 이미지로 상품 검색과 2) 챗봇 두 군데인데, 이번 게시글에서는 1) 이미지로 상품 검색 기능을 개발한 과정에 대해 작성해보려고 한다. 0. 기능 설명사용자가 마트나 편의점에서 상품 태그 사진을 찍으면, OCR을 통해 이 사진 내의 텍스트.. 2024. 5. 21.
Data Management Full Stack Deep Learning 강의를 듣고 정리한 내용입니다. Common Data Management Path for Deep Learning 딥러닝 과정 중에는 가지고 있는 데이터를 GPU 옆의 local filesystem에 옮기는 작업이 필요하다. 데이터를 train가능한 형태로 옮기는 방법은 프로젝트나 회사마다 다르다. 예를 들면: train your images on ImageNet, and all the images are just S3 URLs -> simply download them over to the local filesystem. a bunch of text files -> use Spark to process them on a cluster and Pandas da.. 2023. 2. 15.
MLOps Infrastructure & Tooling Full Stack Deep Learning 강의를 듣고 정리한 내용입니다. 📌3 Buckets of ML Infrastructure & Tooling Landscape Data -Sources -Data Lake/Warehouse -Processing -Exploration -Versioning -Labeling Training/Evaluation - Compute -Resource Management -Software Engineering -Frameworks & Distributed Training -Experiment Management -Hyperparameter Tuning Deployment -CI/Testing -Edge(mobile/robotic hardware) -Web -Monitor.. 2023. 2. 15.
Transformers Full Stack Deep Learning 강의를 듣고 정리한 내용입니다. 📌Transfer Learning in Computer Vision Resnet-50와 같은 deep neural network(NN)들은 성능이 좋긴함. But they are so large that it overfits on our small data. Solution: ImageNet을 사용해 NN을 train한 후 fine-tuning하기 Result: better performance! Fine-tuning model: ImageNet을 사용해 모델을 학습시킨 후 마지막 몇 개의 layer만 다른 것으로 replace. Tensorflow와 Pytorch로 쉽게 구현 가능. 📌Embeddings and Language.. 2023. 2. 15.
RNNs Full Stack Deep Learning 강의를 듣고 정리한 내용입니다. 📌Sequence Problems Sequence Problem 종류 - one-to-many: input -> single value, output -> sequence인 경우 - many-to-one: input -> sequence, output -> single value인 경우 -many-to-many: input -> sequence, output -> sequence인 경우 Sequence Problem 예시 Why not use feedforward networks instead? Problem 1: Variable Length Inputs 모든 sequence에 padding을 추가해 max length와 동일한.. 2023. 2. 15.
Computer Vision Full Stack Deep Learning 강의를 듣고 정리한 내용입니다. 📌AlexNet Deep layer with 8 layers First convnet winner Innovated with ReLU and Dropout Dropout: some set of weights are set to zero randomly in training Heavy data augmentation(flip, scale, etc) Fun fact: usually drawn as two parts, because the biggest GPU only had 3GB memory at the time 그래서 model distributed training을 했어야 했다. (model이 두개의 다른 GPU에 위치한 상태.. 2023. 2. 15.
Deep Learning Fundamentals Full Stack Deep Learning 강의를 듣고 정리한 내용입니다. Neural Networks 📌Biological Neurons 외부의 자극이 dentrites를 통해 들어옴 ->역치를 넘어서면 firing함(axon을 통해 electrical potential전달) 📌Artificial Neuron input x: biological neuron에서 외부의 자극에 해당 weight w: 자극에 대해 얼마나 영향을 받는지 조정 b: bias activation function: (=threshold function) sum값이 역치를 넘어서면 on, 아니면 off 📌Common Activation Function Sigmoid Function Hyperbolic Tangent Rectifie.. 2023. 2. 15.
[바킹독 실전 알고리즘 0x0B] 재귀 알고리즘 설명 재귀: 하나의 함수에서 자기 자신을 다시 호출해 작업을 수행하는 알고리즘 다음과 같이 간단한 재귀 함수 코드를 생각해볼 수 있다. void func(int n){ if(n == 0) return; cout 2023. 2. 12.
[바킹독 실전 알고리즘 0x0C] 백트래킹 알고리즘 설명 백트래킹: 현재 상태에서 가능한 모든 후보군을 따라 들어가며 탐색하는 알고리즘 백트래킹은 상당한 구현력을 필요로 하고, 실수하기도 쉽다. 따라서 많은 시간을 할애해 재귀의 개념을 익히고, 연습을 해야한다. 처음엔 어렵게 느껴지겠지만, 생각보다 응용의 폭이 넓지 않아 BFS와 비슷하게 기본적인 코드 뼈대를 익혀두면 훨씬 더 수월하게 풀이할 수 있다. 연습문제1 - N과 M BOJ 15649번) 백트래킹의 기본 코드는 대략적으로 익혀두는 것이 좋다. #include using namespace std; //전역 변수 int n, m; //입력 받는 값들 int arr[10]; //수열을 담을 배열 bool isused[10]; //특정 수가 쓰였는지를 나타내는 배열(상태를 저장하는 배열) //.. 2023. 2. 10.
[바킹독 실전 알고리즘 0x0A] DFS 알고리즘 설명 DFS(Depth First Search): 다차원 배열에서 각 칸을 방문할 때 깊이를 우선으로 방문하는 알고리즘 예시 큐가 스택으로 바뀐 것을 제외하면 BFS와 거의 비슷하다. pseudo code) 1. 시작하는 칸을 스택에 넣고 방문했다는 표시를 남긴다. 2. 스택에서 원소를 꺼내 그 칸과 상하좌우로 인접한 칸에 대해 3번을 진행한다. 3. 해당 칸을 이전에 방문했다면 아무 것도 하지 않고, 처음으로 방문했다면 방문했다는 표시를 남기고 해당 칸을 스택에 삽입한다. 4. 스택이 빌 때까지 2번을 반복한다. 모든 칸이 스택에 1번씩 들어가므로 시간복잡도는 칸이 N개일 때 O(N)이다. C++ code) #include using namespace std; #define X first #d.. 2023. 2. 5.
[바킹독 실전 알고리즘 0x09] BFS 알고리즘 소개 BFS(Breath First Search): 너비 우선 탐색 예시 1. 시작하는 칸을 큐에 넣고 방문했다는 표시를 남김 2. 큐에서 원소를 꺼내어 그 칸에 상하좌우로 인접한 칸에 대해 3번을 진행 3. 해당 칸을 이전에 방문했다면 아무 것도 하지 않고, 처음으로 방문했다면 방문했다는 표시를 남기고 해당 칸을 큐에 삽입 4. 큐가 빌 때까지 2번을 반복 처음 방문 했을 때만 방문 표시를 남기기 때문에 모든 칸이 큐에 1번씩 들어간다. 따라서 시간복잡도는 칸이 N개일 때 O(N)이다. 같은 원리로 행이 R개, 열이 C개인 2차원 평면을 BFS 탐색하면 시간복잡도는 O(RC)가 될 것이다. 이제 BFS 구현에 필요한 pair STL에 대해 알아보고자 한다. pair를 이용하면 두 자료형을 묶어.. 2023. 2. 3.
[바킹독 실전 알고리즘 0x08] 스택의 활용(수식의 괄호 쌍) 이번 게시글에서는 스택을 사용해 수식의 괄호 쌍이 올바르게 짝지어져 있는지 판별하는 문제를 해결하고자 한다. 문제 해결을 위한 관찰 idea) 문자열을 앞에서부터 읽어나갈 때, 닫는 괄호는 남아있는 괄호 중에서 가장 최근에 들어온 여는 괄호와 짝을 지어 없애버리는 명령이라고 생각하자. 그리고 다음 그림을 보고 괄호 문제의 풀이법을 떠올려보자. 여는 괄호를 만나면 스택에 삽입하고, 닫는 괄호를 만나면 가장 최근에 들어온 여는 괄호를 삭제한다. 괄호가 담긴 문자열을 모두 읽었을 때, 스택에 남아있는 괄호가 없다면 모든 괄호가 짝을 이뤘다고 판단할 수 있다. 올바르지 않은 괄호 쌍을 가지는 경우는 다음과 같다: 1. 여는 괄호와 닫는 괄호의 짝이 맞지 않는 경우 2. 괄호 쌍의 수가 맞지 않는 경우 3. 닫는.. 2023. 2. 2.
[git] git fetch upstream 원격 저장소 연결하기 [git bash를 사용해 코드를 push하는 방법] 1. 우선 원하는 경로에 git repository를 clone 받을 폴더로 만들고, git bash에서 해당 경로로 이동한다. 그리고 git clone [repo주소] 명령어를 사용해 클론받는다. 2. 클론 받은 폴더 안에 repository 이름명으로 만들어진 폴더 내부로 들어간다. 3. 이쯤에서 새 브랜치를 만들어준다. 4. VSCode로 원하는 코드를 추가/수정하는 작업을 마친 뒤, git add . 와 git commit -m [커밋메시지] 명령어를 사용해 코드를 올려준다. 5. git push origin [브랜치명] 명령어를 사용해 Github에 코드를 push해준다. [git fetch upstream을 사용하는 방법] 여러 사람이 함께.. 2023. 2. 1.