최근에 사용해본 AI 사이트는 seaart.ai 라는 사이트이다.
사진을 다른 컨셉으로 변환하며 원래의 포즈와 구성을 유지하는 AI 기술을 가진 사이트이다.
사진 변환 작업을 위해 설계된 신경망 아키텍처나 생성적 적대 신경망(Generative Adversarial Networks, GANs)같은 AI 기술을 결합하여 사용한다고 한다.
AI를 이용한 기존 이미지 기반 테마 이미지 생성 원리
1. 이미지(사진) 분석 : 이미지를 업로드하면 AI가 포즈, 조명, 장면에 있는 객체 등 다양한 속성을 이해하기 위해 분석한다.
2. 특징 매핑 : 시스템은 머리, 팔, 다른 신체 부분의 위치 등 주요 특징과 랜드마크를 식별한다. AI가 후속 이미지에서 포즈를 유지하게 한다.
3. 스타일 전송 : 원본 이미지의 포즈와 특징이 매핑되면 AI는 이미지에 새로운 스타일과 컨셉을 적용한다. 해당 사이트에서는 특정 필터를 만들어두어서 테마의 옷, 배경, 전반적인 미학(화풍)을 변경하는 것을 포함하지만 포즈를 그대로 유지한다.
4. 생성 과정 : AI는 GANs와 같은 생성 모델을 사용하는데, 이는 이미지를 생성하는 생성기와 이를 평가하는 판별기로 구성된다. 생성기는 특정 스타일에 맞는 이미지를 만드려고 시도하며, 판별기는 실제 이미지와 대조 평가를 진행한다. 판별기가 더 이상 목표 스타일의 실제 이미지와 구별할 수 없을때까지 반복된다.
5. 마무리 작업 : 조명, 그림자 및 주변 환경과 상호 작용 측면에서 새롭게 생성된 이미지가 일관성을 유지하도록 조정한다.
이런 AI 모델은 대규모 이미지 데이터셋으로 훈련이 되며, 신경망에 다양한 스타일이 어떻게 보이는지와 어떻게 이를 다른 포즈와 구성에 적용하는지 학습한다. 모델이 더 많은 데이터로 훈련될수록 변환된 이미지가 더 정확하게 생성된다.
흠... 그래서 이걸 내 서비스에 적용하고 싶은데
1. 직접 학습을 위해서는 GANs 또는 AI 기술에 대한 심층적인 이해와 기술적 능력이 필요하다. 머신 러닝, 심층 학습, 컴퓨터 비전, 그리고 특히 GANs에 관한 과정과 자료를 공부해야한다. 분야가 상당히 복잡하고, 성공적인 모델을 만드는데 상당한 시간과 리소스가 소요될 수 있다. AI 기술에 대한 기본적인 이해와, 새로운 배움에 개방적이어야 한다. 시간과 리소스를 충분히 갖추고 있어야 한다.
2. 그렇다면, 외부 인력 고용? AI 개발 분야의 전문성을 가진 개발자를 고용하는 것이다. 단, 이 경우 프로젝트의 복잡성과 인력 비용이 수반된다. 대신 유지 보수를 지속적으로 끌고나갈 수는 있겠지?
3. 서비스 제공 회사에 요청하기! GANs 모델을 제공하는 회사와 파트너십을 맺거나 해당 서비스를 사용한다. 대부분 이런 회사는 잘 훈련된 모델을 가지고 있고, API를 통해 서비스를 제공하기도 한다. 개발 시간을 크게 줄이고 내부 기술팀을 대규모로 확장할 필요도 없어진다. 하지만 서비스 유지 보수가 어려워진다.
GANs API를 제공하는 곳은 없을까?
GANs API 찾다가 링크드인에서 원리를 적용해놓은 글이 있어서 옮긴다
"
GAN(Generative Adversarial Networks)는 컴퓨터 비전 분야, 특히 텍스트와 이미지 합성 분야에서 인기를 얻고 있다. 최근에 텍스트 설명을 받아 해당 설명에 해당하는 이미지를 생성하는 모델들이 GANs이다. 많은 서비스가 GANs를 이용해 이미지 모델용 API를 구축하고 있다. 응용 프로그래밍 인터페이스를 구축하기 위해서는 우선 모델을 교육해야한다. 이미지 데이터 세트와 해당 텍스트 설명을 사용해서 훈련을 시킬 수 있다. 텍스트와 이미지 사이의 관계를 학습하고 새로운 텍스트 입력을 기반으로 새로운 이미지를 생성하도록 훈련한다.
모델이 훈련되고 나면 엔드포인트를 생성한다. 사용자로부터 텍스트 입력을 수신하고 이를 모델에 전달해서 이미지를 생성하는 역할을 담당한다. 엔드포인트는 Flask나 Django와 같은 프레임워크를 사용하여 생성할 수 있꼬, 사용자 입력과 모델 출력을 안전하고 효율적으로 처리하도록 설계해야 한다.
API가 정상적으로 작동하면 웹 사이트를 통해 사용자에게 제공한다. 웹사이트에서 이미지를 업로드하거나 텍스트를 입력하여 이미지 출력을 표시하며 간단한 사용자 인터페이스를 포함하여 설계할 수 있다.
결국 중요한 것은 GANs - API구축이다. 모델을 충분히 학습시키고, 엔드포인트 생성, API테스트, 서버 배포를 하는 것이다.
다음은 텍스트 입력을 받아 GAN 모델을 사용하여 이미지를 생성하는 Flask API 엔드포인트의 예이다.
from flask import Flask, request, jsonify
from keras.models import load_model
import numpy as np
app = Flask(__name_)
# Load GAN model
model = load_model('path/to/gan_model.h5')
@app.route('/generate_image', methods=['POST'])
def generate_image():
# Get text input from request
text = request.json['text']
# Preprocess text input for GAN model
text = preprocess_text(text)
# Generate image from text input
image = model.predict(text)
# Return image in response
return jsonify({'image': image})
if _name_ =='_main_':
app. run(debug=True)
"
해당 코드는 파이썬의 Flask 웹 프레임 워크를 사용하여 만든 소스 코드이다. Keras 라이브러리를 이용하여 미리 훈련된 GAN 모델을 로드하고 텍스트 입력을 받아 이미지를 생성한 다음 이를 응답으로 반환하는 기능을 수행한다.
from flask import Flask, request, jsonify
Flask 웹 프레임워크와 요청 처리, JSON 형태로 응답을 만들기 위한 모듈을 불러온다. JSON 형식으로 클라이언트가 요청한 응답을 전송한다. 즉, 생성된 이미지를 JSON 형식으로 포장하여 웹 API를 통해 보여주는 것이다.
만약, 클라이언트가 요청한 응답을 지속적으로 학습 데이터로 사용하기 위해 저장하려면 추가적인 로직이 포함된 코드가 필요하다.
from keras.models import load_model
Keras 라이브러리를 사용하여 저장된 모델을 로드하기 위한 함수를 불러온다. Keras 라이브러리를 불러오면 GAN을 쉽게 사용할 수 있는것이다. 오. 도전해볼만한것 같다.
import numpy as np
NumPy는 숫자를 가지고 여러 가지 복잡한 계산을 할 때 사용하는 도구이다. np라는 짧은 이름을 붙여서 사용하기 . 더편하게 한다.
해당 코드를 쓰면 큰 숫자의 목록을 쉽게 만들고 그 숫자들을 빠르게 더할 수 있게 된다.
app = Flask(__name__)
해당 코드는 Flask 프레임워크를 사용하는 웹 애플리케이션을 시작할때 사용된다. __name__은 현재 파이썬 파일의 이름을 의미하는데, 이걸 Flask프레임워크에 넘겨주고 Flask는 해당 정보를 가지고 여러 가지 설정을 자동으로 해준다.
예를 들어 해당 코드가 있으면 Flask가 웹 서비스를 시작하기 전에 준비를 하게 되는데 준비가 끝나면 개발자가 만든 코드에 따라 웹 페이지를 보여주거나 사용자 요청에 대답하는 일을 할 수 있게 된다. 그렇기에 한 번만 사용이 된다.
__name__이 Flask에 넘어갈때 개발자가 만든 구조에 따라 웹 서비스의 파일이 templates 또는 static 폴더로 넘어간다.
템플릿은 동적 웹페이지의 파일들이다. 사용자가 요청할때마다 페이지의 내용이 바뀌는 것이다. 웹페이지에 뜬 사용자 이름이라던지.
정적파일(static)은 변하지 않는 파일로 이미지, 자바스크립트, CSS스타일 시트같은 디자인과 행동을 결정하는 파일이다.
model = load_model('path/to/gan_model.h5')
여기서부터 궁금했던 GAN 모델 불러오기.
여기서 gan_model.h5는 가상의 파일명이다. 실제로 keras 라이브러리에 있는 것은 아니고 미리 훈련시켜둔 파일을 의미한다.(내가만들)
h5는 HDF5 포맷을 나타내며 대규모 데이터셋을 저장하기 위한 파일 포맷이다.
keras에서는 모델의 아키텍처, 가중치 등을 이 포맷으로 저장하고 불러올 수 있다. 따라서 gan_model.h5 파일을 keras 모델 객체로 변환하고 해당 모델 객체는 이후에 예측을 수행하거나 추가적인 학습에 사용될 수 있다.
gan_model.h5을 만들기 위해서는 GAN을 자신의 데이터셋으로 직접 훈련시키거나 딥러닝 모델을 직접 설계하고 훈련시킨다.
또는 누군가가 이미 훈련시킨 모델을 공유한다. 깃허브나 .h5 형태로 다운받을 수 있다.
따라서 이 코드를 적용하기 위해서 .h5 파일을 따로 가지고 있고 그 이름을 해당 부분에 바꿔넣으면 된다.
@app.route('/generate_image', methods=['POST'])
웹사이트에 사용자가 특정 페이지에 접속하거나 어떤 정보를 서버에 보낼때 그 요청을 처리하는 방법을 정의하는 코드이다.
'@app.route' Flask에게 이 함수는 웹사이트의 어떤 부분을 담당할건지 알려주는 데코레이터 역할을 한다.
'/generate_image'는 실제 사용하게 될 웹 브라우저의 URL 경로를 의미하게 된다.
'methods=['POST']' 이 경로(엔드포인트)로 데이터를 보낼 때 어떤 HTTP 메서드를 사용할지 정의한다. POST는 사용자가 서버에 데이터를 전송할때 주로 사용되는 방식으로, 양식을 제출하거나 파일을 업로드할때 사용된다.
즉, 이 코드는 사용자가 URL에 POST요청을 보내면 Flask가 요청을 받아서 처리할 수 있도록 설정한 코드이다.
사용자가 이미지 생성을 위한 데이터(이미지 업로드/텍스트 작성)을 서버로 보내고 서버는 그 데이터를 처리해서 새로운 이미지를 생성한 . 뒤결과를 다시 사용자에게 보내준다.
def generate_image():
# Get text input from request
text = request.json['text']
# Preprocess text input for GAN model
text = preprocess_text(text)
# Generate image from text input
image = model.predict(text)
# Return image in response
return jsonify({'image': image})
'def generate_image()'함수를 처리하기 위해 다음과 같은 순서가 아래에 붙은 것이다.
'text = request.json['text']' POST요청의 본문에서 JSON 형식으로 전달된 텍스트를 추출한다.
'text = preprocess_text(text)' 추출한 텍스트를 GAN 모델에 입력하기 전에 사전 처리한다.
'image = model.predict(text)' 사전 처리된 텍스트를 사용하여 모델을 통해 이미지를 생성한다.
'returen jsonify({'image':image})' 생성된 이미지를 JSON 형식으로 클라이언트에게 응답으로 반환한다.
if __name__ == '__main__'
해당 조건문은 이 스크립트가 직접 실행될때만 웹 서버가 시작되도록 한다. 실제로 사용하기 위해서는 기본틀만 있는 상태이기 때문에,
추가적인 구성 요소와 로직이 필요하다. 예로 preprocess_text 함수의 구현, 실제 이미지 데이터를 어덯게 처리하고 반환할 것인지 코드가 추가 되어야한다.
그래 원리는 알겠는데 그럼 GAN 불러오는것이 쉬운 깃허브 없나
오 뭔가 앞서 들었던 라이브러리와 쉽게 적용해볼 수 있을것 같은 GAN 깃허브 발견.
해당 깃허브에는 GAN 외에 CGAN, DCGAN과 같이 유명한 GAN 아키텍처의 구현 예제들이 포함되어 있어 모델을 학습시키고 사용하는 방법을 배울 수 있다.
1. 레포지토리 다운로드하기 : code > ZIP 다운로드를 받아 코드를 로컬 컴퓨터로 가져왔다.
2. 환경 설정 : 레포지토리를 사용하기 전에 라이브러리와 종속성(dependencies)를 설치해야할 수 있다. 'pip install -r requirements.txt'로 필요한 라이브러리를 한번에 설치할 수 있다.
3. 예제 실행 : 레포지토리에는 GAN모델을 실행할 수 있는 파이썬 스크립트가 이미 있다. 터미널이나 명령 프롬프트에서 실행해보기
4. 코드 수정 및 실험 : 기본 제공되는 코드 기반으로 데이터셋을 사용해보거나 모델 구조를 변경해볼 수 있다.
해당 과정으로 GAN에 대한 이해와 파이썬, Keras 사용 경험을 늘려볼 수 있을것 같다.
쉽게 설명하는 데이터베이스와 SQL (0) | 2024.05.28 |
---|---|
chatGPT-4o 사용 방법, 맥OS 설치, 맥OS 가상 환경 생성 (0) | 2024.05.18 |
동적기억장치 구현하기 (0) | 2024.04.06 |
[트렌드 아티클]생성형AI는 예술의 '창작'을 대체할 수 있을까? (0) | 2023.12.09 |
생성형AI img->vid 간단한 애니메이션 구현 (0) | 2023.12.07 |