생성적 적대 네트워크, AI가 사진을 만화 스타일로 변환합니다.
안녕하세요 여러분.
모두가 최근 AI 그림을 가지고 놀고 있습니다. GitHub에서 공유할 오픈 소스 프로젝트를 찾았습니다.
오늘 공유한 프로젝트는 GAN Generative Adversarial Network를 사용하여 구현되었습니다. GAN의 원리와 실제에 대해 이전에 많은 기사를 공유한 적이 있습니다. 더 알고 싶은 친구들은 역사적인 기사를 읽어보세요.
소스 코드와 데이터 세트는 기사 끝 부분에서 확인할 수 있습니다. 프로젝트를 훈련하고 실행하는 방법을 공유해 보겠습니다.
1. 환경을 준비하세요
tensorflow-gpu 1.15.0을 설치하고, GPU 그래픽카드는 2080Ti, cuda 버전 10.0을 사용하세요.
git에서 프로젝트 AnimeGANv2 소스 코드를 다운로드하세요.
환경을 설정한 후에도 데이터 세트와 vgg19를 준비해야 합니다.
GAN 훈련을 위한 6k 실제 사진과 2k 만화 사진이 포함된 Dataset.zip 압축 파일을 다운로드하세요.
vgg19는 손실을 계산하는 데 사용되며, 이에 대해서는 아래에서 자세히 소개하겠습니다.
2. 네트워크 모델
생성적 적대 네트워크는 두 가지 모델을 정의해야 합니다. 하나는 생성자이고 다른 하나는 판별자입니다.
생성기 네트워크는 다음과 같이 정의됩니다.
with tf.variable_scope('A'): inputs = Conv2DNormLReLU(inputs, 32, 7) inputs = Conv2DNormLReLU(inputs, 64, strides=2) inputs = Conv2DNormLReLU(inputs, 64) with tf.variable_scope('B'): inputs = Conv2DNormLReLU(inputs, 128, strides=2) inputs = Conv2DNormLReLU(inputs, 128) with tf.variable_scope('C'): inputs = Conv2DNormLReLU(inputs, 128) inputs = self.InvertedRes_block(inputs, 2, 256, 1, 'r1') inputs = self.InvertedRes_block(inputs, 2, 256, 1, 'r2') inputs = self.InvertedRes_block(inputs, 2, 256, 1, 'r3') inputs = self.InvertedRes_block(inputs, 2, 256, 1, 'r4') inputs = Conv2DNormLReLU(inputs, 128) with tf.variable_scope('D'): inputs = Unsample(inputs, 128) inputs = Conv2DNormLReLU(inputs, 128) with tf.variable_scope('E'): inputs = Unsample(inputs,64) inputs = Conv2DNormLReLU(inputs, 64) inputs = Conv2DNormLReLU(inputs, 32, 7) with tf.variable_scope('out_layer'): out = Conv2D(inputs, filters =3, kernel_size=1, strides=1) self.fake = tf.tanh(out)
생성기의 메인 모듈은 역 잔차 블록입니다
잔차 구조(a)와 역 잔차 블록(b)
판별기 네트워크 구조는 다음과 같습니다.
def D_net(x_init,ch, n_dis,sn, scope, reuse): channel = ch // 2 with tf.variable_scope(scope, reuse=reuse): x = conv(x_init, channel, kernel=3, stride=1, pad=1, use_bias=False, sn=sn, scope='conv_0') x = lrelu(x, 0.2) for i in range(1, n_dis): x = conv(x, channel * 2, kernel=3, stride=2, pad=1, use_bias=False, sn=sn, scope='conv_s2_' + str(i)) x = lrelu(x, 0.2) x = conv(x, channel * 4, kernel=3, stride=1, pad=1, use_bias=False, sn=sn, scope='conv_s1_' + str(i)) x = layer_norm(x, scope='1_norm_' + str(i)) x = lrelu(x, 0.2) channel = channel * 2 x = conv(x, channel * 2, kernel=3, stride=1, pad=1, use_bias=False, sn=sn, scope='last_conv') x = layer_norm(x, scope='2_ins_norm') x = lrelu(x, 0.2) x = conv(x, channels=1, kernel=3, stride=1, pad=1, use_bias=False, sn=sn, scope='D_logit') return x
3.Loss
손실을 계산하기 전에 VGG19 네트워크를 사용하여 이미지를 벡터화합니다. 이 프로세스는 NLP의 Embedding 작업과 약간 비슷합니다.
Eembedding은 단어를 벡터로 변환하는 것이고, VGG19는 그림을 벡터로 변환하는 것입니다.
VGG19 정의
손실 부분 계산 논리는 다음과 같습니다.
def con_sty_loss(vgg, real, anime, fake): # 真实생성적 적대 네트워크, AI가 사진을 만화 스타일로 변환합니다.向量化 vgg.build(real) real_feature_map = vgg.conv4_4_no_activation # 生成생성적 적대 네트워크, AI가 사진을 만화 스타일로 변환합니다.向量化 vgg.build(fake) fake_feature_map = vgg.conv4_4_no_activation # 漫画风格向量化 vgg.build(anime[:fake_feature_map.shape[0]]) anime_feature_map = vgg.conv4_4_no_activation # 真实생성적 적대 네트워크, AI가 사진을 만화 스타일로 변환합니다.与生成생성적 적대 네트워크, AI가 사진을 만화 스타일로 변환합니다.的损失 c_loss = L1_loss(real_feature_map, fake_feature_map) # 漫画风格与生成생성적 적대 네트워크, AI가 사진을 만화 스타일로 변환합니다.的损失 s_loss = style_loss(anime_feature_map, fake_feature_map) return c_loss, s_loss
여기서 vgg19는 실제 이미지(매개변수 real)와 생성된 이미지(매개변수 fake)의 손실을 각각 계산하는 데 사용됩니다. 생성된 이미지(매개변수 가짜) 및 만화 스타일 손실(매개변수 애니메이션).
c_loss, s_loss = con_sty_loss(self.vgg, self.real, self.anime_gray, self.generated) t_loss = self.con_weight * c_loss + self.sty_weight * s_loss + color_loss(self.real,self.generated) * self.color_weight + tv_loss
마지막으로 이 두 손실에 서로 다른 가중치를 부여하여 생성기에 의해 생성된 그림이 실제 그림의 모양을 유지할 뿐만 아니라 만화 스타일로 마이그레이션되도록 합니다
4. Training
에서 다음 명령을 실행합니다. 프로젝트 디렉토리 training
python train.py --dataset Hayao --epoch 101 --init_epoch 10
을 시작하고 성공적으로 실행하면 데이터를 볼 수 있습니다.
동시에 손실도 줄어들고 있는 것을 확인할 수 있습니다.
소스 코드와 데이터 세트가 패키지되어 있습니다. 필요한 경우 댓글 영역에 메시지를 남겨주세요.
이 글이 도움이 되셨다면 클릭하셔서 읽어보시고 앞으로도 훌륭한 Python+AI 프로젝트를 계속 공유하도록 격려해 주세요.
위 내용은 생성적 적대 네트워크, AI가 사진을 만화 스타일로 변환합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











SQL Insert 문은 데이터베이스 테이블에 새 행을 추가하는 데 사용되며 구문은 다음과 같습니다. TABLE_NAME (column1, column2, ..., columnn) 값 (value1, value2, ..., valuen); 이 명령문은 여러 값 삽입을 지원하고 널 값을 열에 삽입 할 수 있지만 삽입 된 값이 고유성 제약을 위반하지 않도록 열의 데이터 유형과 호환되도록해야합니다.

Alter Table 문을 사용하여 SQL의 기존 테이블에 새 열을 추가하십시오. 특정 단계에는 다음이 포함됩니다. 테이블 이름 및 열 정보 결정, Alter Table 문 작성 및 진술 실행. 예를 들어, 고객 테이블에 이메일 열을 추가하십시오 (Varchar (50)) : Alter Table 고객 이메일 추가 Varchar (50);

SQL에서 열을 추가하기위한 구문은 Alter Table_Name ADD CORMEN_NAME DATY_TYPE [NOT NULL] [DEFAULT DEFAULT_VALUE]; 여기서 table_name은 테이블 이름이고 column_name은 새 열 이름, data_type는 데이터 유형이며 NULL은 NULL 값이 허용되는지 여부를 지정하고 기본값 기본값을 지정합니다.

다른 데이터베이스 시스템에서 열을 추가하기위한 구문은 크게 다르며 데이터베이스마다 다릅니다. 예를 들어 : MySQL : Alter Table 사용자는 열 이메일 Varchar (255)를 추가합니다. Postgresql : Alter Table 사용자는 열을 추가하여 varchar (255)가 널 고유하지 않음; Oracle : Alter Table 사용자 이메일 추가 Varchar2 (255); SQL Server : Alter Table 사용자는 이메일 VARCH 추가

새로 추가 된 열에 대한 기본값을 설정하고 Alter Table 문을 사용하십시오. 문 : 열 추가를 지정하고 기본값을 설정하십시오. Alter Table_Name Add Column_name Data_Type Default_value; 구속 조건 조항을 사용하여 기본값을 지정하십시오. ALTER TABLE TABLE_NAME CORMENT CORMEN_NAME DATA DATA DATA DATA DATA DATA DATA DATAY_TYPE 제한 DEFAULT_COSSTRANT DEFAULT DEFAULT_VALUE;

SQL 테이블 개선 성능을 개선하기위한 팁 : 삭제 대신 Truncate 테이블을 사용하고 공간을 확보하고 ID 열을 재설정하십시오. 계단식 삭제를 방지하기 위해 외국의 주요 제약 조건을 비활성화하십시오. 트랜잭션 캡슐화 작업을 사용하여 데이터 일관성을 보장합니다. 배치는 빅 데이터를 삭제하고 한계를 통해 행 수를 제한합니다. 쿼리 효율성을 향상시키기 위해 지우고 지수를 재구성하십시오.

SQL (구조화 된 쿼리 언어)은 데이터베이스를 작성, 관리 및 쿼리하는 데 사용되는 프로그래밍 언어입니다. 주요 기능에는 데이터베이스 및 테이블 만들기, 데이터 삽입, 업데이트 및 삭제, 분류 및 필터링 결과, 기능 집계 기능, 테이블 결합, 하위 Queries, 운영자, 기능, 키워드, 키워드/정의/제어 언어, 연결 유형, 쿼리 최적화, 보안, 도구, 리소스, 버전, 일반적인 오류, 모범 사례, 트롤링 및 로우 위에있는 오류.

예, 삭제 명령문은 SQL 테이블을 지우는 데 사용될 수 있습니다. 단계는 다음과 같습니다. 삭제 명령문 사용 : table_name에서 삭제; TABLE_NAME을 제거 할 테이블 이름으로 바꾸십시오.
