Gram Matrix phát sinh từ một hàm trong không gian hữu hạn chiều; khi đó các mục nhập của Gram Matrix là sản phẩm bên trong của các dịch vụ thiết yếu của không gian con hữu hạn chiều. Chúng tôi phải tính toán sự style loss. Nhưng chúng tôi chưa được chỉ ra “tại sao sự style loss được tính bằng Gram Matrix.” Gram Matrix nắm bắt “sự phân bố của các đối tượng địa lý” của một tập hợp các bản đồ đối tượng địa lý trong một lớp nhất định.
Các bài viết liên quan:
Lưu ý: Chúng tôi không nghĩ rằng câu hỏi trên đã được trả lời thỏa đáng. Ví dụ, hãy để chúng tôi giải thích nó một cách trực quan hơn. Giả sử chúng ta có bản đồ đặc trưng sau đây. Để đơn giản, chúng tôi chỉ xem xét ba bản đồ đối tượng và hai trong số đó là hoàn toàn thụ động. Chúng tôi có một tập hợp bản đồ đối tượng trong đó bản đồ đối tượng đầu tiên trông giống như một bức tranh thiên nhiên và trong bản đồ đối tượng thứ hai, bản đồ đối tượng đầu tiên trông giống như một đám mây đen. Sau đó, nếu chúng tôi cố gắng tính toán nội dung và kiểu dáng theo cách thủ công, chúng tôi sẽ nhận được các giá trị này.
Điều này có nghĩa là chúng tôi không bị mất thông tin kiểu giữa hai bộ bản đồ đối tượng. Tuy nhiên, nội dung là khác nhau.
Hiểu được sự style loss
Final loss
Nó được định nghĩa là,
Trong đó α và β là các siêu tham số do người dùng xác định. Ở đây β đã hấp thụ hệ số chuẩn hóa M ^ l được xác định trước đó. Bằng cách kiểm soát α và β, chúng ta có thể kiểm soát lượng nội dung và phong cách được đưa vào hình ảnh được tạo. Chúng ta cũng có thể thấy một hình dung đẹp mắt về các tác động khác nhau của các giá trị α và β khác nhau trong bài báo.
Xác định trình tối ưu hóa
Tiếp theo, chúng tôi sử dụng trình tối ưu hóa Adam để tối ưu hóa việc mất mạng.
Xác định input pipeline
Ở đây chúng tôi mô tả đường ống đầu vào đầy đủ. tf.data cung cấp một giao diện rất dễ sử dụng và trực quan để triển khai các đường dẫn đầu vào. Đối với hầu hết các tác vụ thao tác hình ảnh, chúng tôi sử dụng tf. Tuy nhiên, api hình ảnh, khả năng của tf.image đối với hình ảnh có kích thước động là tối thiểu.
Ví dụ: nếu chúng ta muốn cắt và thay đổi kích thước hình ảnh một cách động, tốt hơn nên thực hiện ở dạng trình tạo, như được thực hiện bên dưới.
Chúng tôi đã xác định hai đường ống dẫn đầu vào; một cho phong cách và một cho nội dung. Đường dẫn đầu vào nội dung chỉ tìm kiếm các hình ảnh jpg bắt đầu bằng một từ content_, trong đó đường ống kiểu tìm kiếm các mô hình bắt đầu bằng style_.
def image_gen_function(data_dir, file_match_str, do_shuffle=True): """ " The function returns a produced image, and the color channel is like values. This is a generator function that is used by the service of tf.data api. """" # Load the filenames files = [f for f in os.listdir(data_dir) if f.startswith(file_match_str)] if do_shuffle: shuffle(files) mean = np.array([[vgg_mean]]) # For each file preprocess the image for f in file: img = Image.open(os.path.join(data_dir, f)) width, height = img.size #Here, we crop the image to a square by cropping on the longer axis if width < height: left,right = 0, width top, bottom = (height-width)/2, ((height-width)/2) + width elif width > height: top, bottom = 0, height left, right = (width - height)/2, ((width-height)/2) + height else: arr = np.array(img.resize((image_size,image_size))).astype(np.float32) yield (arr, mean) arr = np.array(img.crop((left, top, right, bottom)).resize((image_size,image_size))).astype(np.float32) yield (arr, mean) def load_images_iterator(gen_func, zero_mean=False): """This function returns a dataset iterator of tf.data API. """ image_dataset = tf.data.Dataset.from_generator( gen_func, output_types=(tf.float32, tf.float32), output_shapes=(tf.TensorShape(input_shape[1:]), tf.TensorShape([1, 1, 3])) ) # If true, the mean will be subtracted
Chúng tôi sẽ biểu diễn đồ thị tính toán đầy đủ.
- Xác định các trình vòng lặp cung cấp đầu vào
- Xác định đầu vào và biến CNN
- Xác định nội dung, phong cách và tổng số tổn thất
- Xác định hoạt động tối ưu hóa
config = tf.ConfigProto(allow_soft_placement=True) # 1. Define the input pipeline in this step part_style_gen_func = partial(image_gen_func, 'data', "style_") part_content_gen_func = partial(image_gen_func, 'data', "content_") style_iter = load_images_iterator(part_style_gen_func, zero_mean=True) content_iter = load_images_iterator(part_content_gen_func, zero_mean=True) # 2. Defining the inputs and weights inputs = define_inputs(input_shape) define_tf_weights() layer_ids = list(vgg_layers.keys()) ## gen_ph is used for initializing the generated image with the pixel value ##trying initializing with white noise . ## The init_generate gives the initialization operation. gen_ph = tf.placeholder(shape=input_shape, dtype=tf.float32) init_generated = tf.assign(inputs["generated"], gen_ph) # 3. Loss # 3.1 Content loss in tf c_loss = define_content_loss( inputs=inputs, layer_ids=layer_ids, pool_inds=pool_inds, c_weight=alpha ) # 3.2 Style loss layer_weights_ph = tf.placeholder(shape=[len(layer_ids)], dtype=tf.float32, name='layer_weights') s_loss = define_style_loss( inputs=inputs, layer_ids=layer_ids, pool_inds=pool_inds, s_weight=beta, layer_weights=None )
Quá trình Style Transferring
Neural style transfer là một kỹ thuật tối ưu hóa được sử dụng cho hai hình ảnh – hình ảnh nội dung và hình ảnh tham chiếu kiểu – và chúng được hợp nhất để hình ảnh đầu ra trông giống như hình ảnh nội dung nhưng theo kiểu của hình ảnh tham chiếu kiểu “được mô tả” Là.
Để đạt được sự Neural style transfer, cần phải tách style của hình ảnh khỏi nội dung của nó. Sau đó, có thể chuyển các yếu tố phong cách của một ảnh sang các yếu tố nội dung của ảnh khác. Quá trình này chủ yếu được thực hiện bằng cách sử dụng dạng trích xuất đặc trưng của mạng nơ ron phi tuyến tiêu chuẩn.
Các tính năng này sau đó được thao tác để trích xuất thông tin nội dung hoặc thông tin phong cách. Quá trình này bao gồm ba hình ảnh, một hình ảnh phong cách, một hình ảnh nội dung và cuối cùng, một hình ảnh đích.
Mục đích cuối cùng là phong cách của hình ảnh phong cách kết hợp với nội dung của hình ảnh nội dung để tạo ra hình ảnh.
Quá trình này bắt đầu bằng cách chọn một số lớp từ bên trong mô hình của chúng tôi để trích xuất các tính năng. Chúng tôi có một ý tưởng hay về cách hình ảnh của chúng tôi được xử lý trong mạng nơ-ron bằng cách chọn một vài lớp để trích xuất các tính năng. Chúng tôi xóa các thuộc tính mô hình của hình ảnh phong cách và hình ảnh nội dung của chúng tôi. Sau đó, chúng tôi xóa các phần tử khỏi hình ảnh mục tiêu của mình và so sánh nó với tính năng hình ảnh phong cách và tính năng hình ảnh nội dung của chúng tôi.