Tôi đang cố gắng đào tạo mô hình của mình để phân loại hình ảnh. Vấn đề tôi gặp phải là, chúng có kích thước khác nhau. tôi nên định dạng hình ảnh / hoặc kiến trúc mô hình của mình như thế nào?
Tôi đang cố gắng đào tạo mô hình của mình để phân loại hình ảnh. Vấn đề tôi gặp phải là, chúng có kích thước khác nhau. tôi nên định dạng hình ảnh / hoặc kiến trúc mô hình của mình như thế nào?
Câu trả lời:
Bạn không nói bạn đang nói về kiến trúc gì. Vì bạn nói rằng bạn muốn phân loại hình ảnh, tôi cho rằng đó là một mạng một phần phức hợp, một phần được kết nối đầy đủ như AlexNet, GoogLeNet, v.v. Nói chung, câu trả lời cho câu hỏi của bạn phụ thuộc vào loại mạng bạn đang làm việc.
Ví dụ: nếu mạng của bạn chỉ chứa các đơn vị tích tụ - nghĩa là không chứa các lớp được kết nối đầy đủ - thì nó có thể bất biến với kích thước của hình ảnh đầu vào. Một mạng như vậy có thể xử lý các hình ảnh đầu vào và lần lượt trả về một hình ảnh khác ("phức tạp tất cả các cách"); bạn sẽ phải đảm bảo rằng kết quả đầu ra phù hợp với những gì bạn mong đợi, vì tất nhiên bạn phải xác định khoản lỗ theo một cách nào đó.
Tuy nhiên, nếu bạn đang sử dụng các đơn vị được kết nối đầy đủ, bạn sẽ gặp rắc rối: Ở đây bạn có một số trọng lượng đã học cố định mà mạng của bạn phải làm việc, vì vậy các đầu vào khác nhau sẽ yêu cầu một số trọng lượng khác nhau - và điều đó là không thể.
Nếu đó là vấn đề của bạn, đây là một số điều bạn có thể làm:
N
các ảnh khác nhau có kích thước phù hợp.Tùy chọn đệm có thể tạo ra một nguồn lỗi bổ sung cho dự đoán của mạng, vì mạng có thể (đọc: có khả năng sẽ) thiên vị với các hình ảnh chứa đường viền được đệm như vậy. Nếu bạn cần một số ý tưởng, hãy xem phần Hình ảnh của tài liệu TensorFlow, có những phần nhưresize_image_with_crop_or_pad
vậy sẽ mang lại công việc lớn hơn.
Đối với việc không quan tâm đến việc bóp méo, đây là một phần của đường ống tiền xử lý của mạng Inception nổi tiếng:
# This resizing operation may distort the images because the aspect
# ratio is not respected. We select a resize method in a round robin
# fashion based on the thread number.
# Note that ResizeMethod contains 4 enumerated resizing methods.
# We select only 1 case for fast_mode bilinear.
num_resize_cases = 1 if fast_mode else 4
distorted_image = apply_with_random_selector(
distorted_image,
lambda x, method: tf.image.resize_images(x, [height, width], method=method),
num_cases=num_resize_cases)
Họ hoàn toàn nhận thức được điều đó và bằng mọi cách làm.
Tùy thuộc vào mức độ bạn muốn hoặc cần phải đi, thực sự có một bài báo ở đây có tên là Spatial Pyramid Pooling trong Deep Convolution Networks for Visual Recognition xử lý các đầu vào có kích thước tùy ý bằng cách xử lý chúng theo một cách rất đặc biệt.
Hãy thử tạo một lớp gộp kim tự tháp không gian. Sau đó, đặt nó sau lớp chập cuối cùng của bạn để các lớp FC luôn nhận được các vectơ có chiều không đổi làm đầu vào. Trong quá trình đào tạo, đào tạo các hình ảnh từ toàn bộ tập dữ liệu bằng cách sử dụng kích thước hình ảnh cụ thể cho một kỷ nguyên. Sau đó, đối với kỷ nguyên tiếp theo, hãy chuyển sang kích thước hình ảnh khác và tiếp tục đào tạo.