이미지 분석 및 기계 학습 기술 활용
데이터 수집 및 전처리: 구분하려는 이미지의 데이터셋을 수집하고 준비한다. 진짜 이미지와 AI가 생성한 이미지를 모두 포함하는 다양한 클래스의 이미지가 있어야 함
특징 추출: 이미지에서 유용한 특징을 추출한다. 컴퓨터 비전 분야에서는 일반적으로 SIFT, HOG, CNN과 같은 특징 추출 방법을 사용하는데 이 단계에서는 이미지의 형태, 색상, 질감 등과 같은 특징을 추출한다
분류 모델 학습: 추출한 특징을 기반으로 AI가 만든 이미지와 진짜 이미지를 분류할 수 있는 분류 모델을 학습시킨다. 대표적인 분류 모델로는 SVM, Random Forest, 또는 심층 신경망(DNN)과 같은 딥러닝 모델을 사용할 수 있음
모델 평가: 학습된 분류 모델을 평가하고 성능을 확인
- > 테스트 데이터셋을 사용하여 모델의 정확도, 정밀도, 재현율, F1 점수 등을 평가한다
추가적인 기법: 특정한 통계적 특성
또는 AI가 생성한 이미지는 보편적으로 고해상도일 수 있으므로, 해상도나 픽셀 분포를 분석하여 구분할 수도 있음
딥러닝 모델 사용
Python& TensorFlow
1. 필요한 라이브러리 import
import tensorflow as tf
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications.inception_v3 import InceptionV3, preprocess_input
import numpy as np
2. InceptionV3 모델(이미지 분류에 널리 사용되는 사전 훈련된 모델) 로드
model = InceptionV3(weights='imagenet')
3. 이미지 로드하고 전처리하는 함수 정의
def load_and_preprocess_image(image_path):
img = image.load_img(image_path, target_size=(299, 299))
img = image.img_to_array(img)
img = np.expand_dims(img, axis=0)
img = preprocess_input(img)
return img
4. AI가 만든 이미지와 진짜 이미지를 분류하는 함수 작성
def classify_image(image_path):
img = load_and_preprocess_image(image_path)
predictions = model.predict(img)
predicted_label = np.argmax(predictions)
# InceptionV3의 인덱스 1000은 "인공지능 이미지"를 나타냅니다.
# 이 인덱스가 예측된 경우 AI가 만든 이미지로 분류합니다.
if predicted_label == 1000:
return "AI가 만든 이미지입니다."
else:
return "진짜 이미지입니다."
5. 위에서 정의한 classify_image() 함수를 사용하여 이미지를 분류할 수 있음
ex) image.jpg라는 이미지 파일을 분류하려면 다음과 같이 호출
result = classify_image("image.jpg")
print(result)
6. 데이터셋과 모델 구조 세부 조정
다른 예시
GAN(Generative Adversarial Network) 사용
1. 필요한 라이브러리 import
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Conv2D, Flatten
from tensorflow.keras.preprocessing.image import ImageDataGenerator
2. AI가 만든 이미지와 진짜 이미지를 각각 담고 있는 두 개의 폴더가 있다고 가정하자
ai_images, real_images
두개의 폴더는 서로 다른 경로에 위치하고 있어야 함
train_data_dir = 'ai_images_and_real_images/train'
validation_data_dir = 'ai_images_and_real_images/validation'
3. 이미지 데이터를 불러오고 전처리하는 데이터 생성기 생성
train_datagen = ImageDataGenerator(rescale=1./255)
validation_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
train_data_dir,
target_size=(256, 256),
batch_size=32,
class_mode='binary')
validation_generator = validation_datagen.flow_from_directory(
validation_data_dir,
target_size=(256, 256),
batch_size=32,
class_mode='binary')
4. GAN 모델 정의
model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(256, 256, 3)))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
5. 학습
model.fit(
train_generator,
steps_per_epoch=2000,
epochs=50,
validation_data=validation_generator,
validation_steps=800)
6. 데이터셋과 모델 구조 세부 조정
그외...
Keras 사용