분류 전체보기 150

[Algorithm] 구현 (Implementation)

구현(Implementation)은 머릿속에 있는 알고리즘을 정확하고 빠르게 프로그램 코드로 작성하는 것을 말합니다. 어떤 문제를 풀더라도 프로그램 코드 작성은 필수이기 때문에 구현 문제 유형은 모든 범위의 문제 유형을 포함하고 있습니다. 따라서, 대부분 구현 문제에 대한 별도의 유형을 정하기 어렵습니다. 보통 구현 문제는 풀이를 떠올리는 것은 쉽지만 코드로 옮기기 어려운 것들입니다. 결국 구현 문제는 자신의 프로그래밍 피지컬로 승부를 봐야합니다. 구현 문제를 잘 풀어내기 위해서는 자신의 주언어 라이브러리 사용법을 잘 숙지해야 합니다. 예를 들어 리스트에서 순열을 구해야 하는 문제를 만난다면 itertools 라이브러리로 쉽게 구현할 수 있습니다. 하지만 이것을 몰랐다면 많은 시간이 필요할 것입니다. 하..

[Algorithm] 그리디 (Greedy)

그리디(Greedy)는 현재 상황에서 가장 좋아 보이는 것만을 선택하는 알고리즘으로, 단순하지만 강력한 문제 해결 방법입니다. 즉, 그리디 알고리즘은 매 순간 가장 좋아 보이는 것을 선택하기 때문에 현재의 선택이 나중에 미칠 영향에 대해서는 고려하지 않습니다. 그리디 알고리즘을 이용한 문제 출제는 폭이 매우 넓기 때문에, 다익스트라(Dijkastra) 알고리즘과 같은 특별한 경우를 제외하고는 단순 암기를 통해 모든 문제를 해결하기는 어렵습니다. 따라서, 그리디 알고리즘이 적용 가능한 문제인지 아닌지 판단하고 실제로 풀어낼 수 있는 능력이 중요합니다. 참고로, 문제에서 '가장 큰 순서대로', '가장 작은 순서대로'와 같이 기준에 따라 선택하는 내용이 나온다면 보통 그리디 알고리즘으로 해결할 수 있습니다. ..

[Computer Vision] 객체 탐지 (Object Detection)

객체 탐지(object detection)는 분류(classification)와 로컬라이제이션(localization)을 합친 것이라고 볼 수 있습니다. 즉, 객체의 위치를 바운딩박스(bounding box)로 찾고 분류하는 것입니다. 여기서 객체의 위치는 4개의 좌표를 사용하며, 이것은 회귀 문제와 같습니다. 따라서 객체 탐지는 이미지 분류, 좌표 회귀 분석 두 가지 작업이 필요합니다. 객체 탐지를 위해 좌표를 찾는 방법은 여러가지가 있습니다. 앞서 언급한 것처럼 회귀 분석을 사용할 수도 있고, 슬라이딩 윈도우(sliding-window) 알고리즘을 사용할 수도 있습니다. 하지만 회귀 분석은 실효성이 떨어지며, 슬라이딩 윈도우는 계산 측면에서 비효율적입니다. 따라서 좌표를 찾기 위해 영역 제안 기법을 ..

AI/Computer Vision 2023.06.19

[TensorFlow] InceptionV3을 이용한 이미지 검색

InceptionV3를 이용하여 이미지를 검색해 보겠습니다. 이미지 검색에 대한 내용은 이곳을 확인해 주세요. 이미지 검색은 쿼리 이미지와 데이터베이스 이미지들의 유사도를 계산하여 쿼리 이미지와 유사한 이미지를 찾는 것입니다. 계산하는 유사도는 이미지의 feature이며, InceptionV3의 출력입니다. InceptionV3의 출력은 2048입니다. 또한 유사도는 유클리드 거리(Euclidean distance)를 계산하여 판단합니다. 데이터셋은 The Oxford-IIIT Pet Dataset에서 다운로드 후 data 디렉토리를 생성하여 저장하면 됩니다. 쿼리 이미지는 Abyssinian_1.jpg입니다. 아래와 같이 쿼리 이미지와 유사한 이미지 50개를 확인합니다. Abyssinian_1.jpg는..

[Computer Vision] 이미지 검색

기존 이미지 검색 방법 중 CBIR(Content-based Image Retrieval)은 쿼리 이미지를 입력받아 대상 이미지 데이터베이스에 있는 이미지들의 순위를 정해 출력합니다. CBIR은 비슷한 느낌의 이미지보다는 비슷한 색상의 이미지를 검색하는 느낌이 더 강합니다. 그렇기 때문에 사람의 눈으로 봤을 때 쿼리 이미지와 완전히 다른 이미지더라도 색이 비슷하면 출력에 포함됩니다. 따라서 딥러닝 모델을 이용하여 더 나은 이미지 검색을 할 수 있습니다. 이전 포스팅에서 딥러닝 CNNs을 이용하여 이미지 분류를 했던것처럼, 이미지 검색에도 적용해보겠습니다. 데이터셋은 The Oxford-IIIT Pet Dataset에서 다운로드 후 사용하면 됩니다. 데이터셋은 37개의 클래스로, 총 7390개의 데이터로 ..

AI/Computer Vision 2023.06.16

[PyTorch] CNNs을 이용한 이미지 분류

본 포스팅은 이전 포스팅과 같은 내용을 TensorFlow가 아닌 PyTorch로 구현한 내용입니다. 모델의 구성은 다음과 같습니다. 이전 포스팅의 TensorFloe 모델과 같은 구조입니다. 따라서, TensorFlow와 PyTorch 코드를 비교해서 보시면 더욱 좋을 것 같습니다. 아래는 전체 코드입니다. [train.py] # Import library from sklearn.model_selection import train_test_split from sklearn.preprocessing import LabelEncoder from pathlib import Path import cv2 import matplotlib.pyplot as plt import numpy as np import pa..

[TensorFlow] CNNs을 이용한 이미지 분류

CNNs을 이용하여 이미지를 분류해 보겠습니다. 이미지 분류에 대한 내용은 이곳을 확인해 주세요. 이미지 분류 class는 airplane, car, cat, dog, flower, fruit, motorbike, person으로 분류 개수는 총 8개입니다. 이미지는 CIFAR나 다른 데이터셋을 사용해도 됩니다. 또한 학습에 사용할 이미지를 /data/train과 /data/test 디렉토리에 나누어 저장합니다. /data/train에는 이미지 class별로 디렉토리를 생성합니다. 모델의 구성은 다음과 같습니다. 학습에 사용할 optimizer는 Adam이며, softmax를 이용한 multi class 분류이기 때문에 loss는 sparse_categorical_crossentropy를 사용합니다. 학..

[Computer Vision] 이미지 분류

딥러닝을 이용한 이미지 분류는 보통 CNNs을 사용합니다. CVPR(Computer Vision and Pattern Recognition)의 최신 연구 동향을 보면 CNNs 보다 Transformers, Radiance Fields, Diffusion 모델 등을 더 많이 사용하고 있으나, CNNs은 컴퓨터 비전의 가장한 중요한 요소이므로 반드시 숙지해야 합니다. CNNs을 이용한 이미지 분류는 단순히 컨볼루션 레이어를 사용하여 이미지의 feature를 추출하고 출력층을 분류 class 개수로 설정하면 됩니다. CNNs의 내부는 conv, maxpool, dropout, flatten 등을 사용할 수 있으며 conv과 flatten은 필수입니다. flatten을 사용하는 이유는 이미지의 다차원 데이터를 ..

AI/Computer Vision 2023.06.15

[TensorFlow] GAN 예제 코드

GAN을 이용하여 MNIST 데이터를 생성해 보겠습니다. import numpy as np import tensorflow as tf from tensorflow.keras.datasets import mnist from tensorflow.keras.models import Sequential, Model from tensorflow.keras.layers import Input, Reshape, Flatten from tensorflow.keras.layers import Dense, Dropout from tensorflow.keras.layers import BatchNormalization from tensorflow.keras.layers import UpSampling2D, Conv2D, M..

[Deep Learning] 적대적 생성 신경망 (GAN)

적대적 생성 신경망(GAN: Generative Adversarial Networks)는 생성자(generator)와 판별자(discriminator)라고 하는 두 네트워크가 서로 경쟁함으로써 학습하는 네트워크입니다. 판별자는 데이터셋으로부터 생성되었는지 아니면 가짜로 생성되었는지를 확인합니다. 반면에 생성자의 임무는 판별자가 진짜와 가짜를 구분할 수 없도록 진짜 같은 가짜 데이터를 생성하는 것입니다. 즉, 생성자가 입력과 구별할 수 없는 가짜 데이터를 만들도록 학습하는 것이 GAN입니다. GAN을 제안한 Ian Goodfellow은 경찰과 도둑을 예로 들어 적대적 신경망 학습을 설명했습니다. 도둑은 계속 위조 지폐를 생성하고, 경찰은 위조 지폐와 실제 지폐를 구별하는 것입니다. 즉, GAN의 아키텍처는..

AI/Deep Learning 2023.06.10