2016-10-02 78 views
14

Máy Keras có thể xử lý hình ảnh đầu vào với kích thước khác nhau không? Ví dụ, trong mạng nơron hoàn toàn chập chững, hình ảnh đầu vào có thể có bất kỳ kích thước nào. Tuy nhiên, chúng ta cần phải xác định hình dạng đầu vào khi chúng ta tạo một mạng bằng Keras. Vì vậy, làm thế nào chúng ta có thể sử dụng Keras để đối phó với kích thước đầu vào khác nhau mà không thay đổi kích thước hình ảnh đầu vào với cùng kích thước? Cảm ơn vì bất kì sự giúp đỡ.Máy ảnh có thể xử lý ảnh đầu vào với kích thước khác nhau không?

Trả lời

9

Thực hiện các mảng đầu vào có kích thước tùy ý với cùng các hạt nhân tính có thể gây ra nhiều thách thức - ví dụ: trên GPU, bạn cần biết dung lượng bộ đệm lớn, và yếu hơn bao nhiêu để bỏ vòng lặp của bạn, vv Đây là lý do chính khiến Keras yêu cầu hình dạng đầu vào không đổi, đầu vào có kích thước biến quá đau đớn để xử lý.

Điều này thường xảy ra hơn khi xử lý các chuỗi có độ dài thay đổi như các câu trong NLP. Cách tiếp cận chung là để thiết lập một giới hạn trên về kích thước (và cắt các chuỗi dài hơn), và sau đó pad các chuỗi có số không lên đến kích thước này.

(Bạn cũng có thể bao gồm mặt nạ trên không giá trị để bỏ qua tính toán trên các lĩnh vực đệm, ngoại trừ các lớp xoắn trong Keras có thể vẫn không hỗ trợ đầu vào đeo mặt nạ ...)

Tôi không chắc chắn nếu vì 3D cấu trúc dữ liệu, chi phí của padding không phải là cấm - nếu bạn bắt đầu nhận được lỗi bộ nhớ, cách giải quyết dễ nhất là giảm kích thước lô. Hãy cho chúng tôi biết về trải nghiệm của bạn khi áp dụng mẹo này trên hình ảnh!

16

Có. Chỉ cần thay đổi hình dạng đầu vào của bạn thành hình dạng = (n_channels, Không có, Không có). Trong đó n_channels là số kênh trong hình ảnh đầu vào của bạn.

Tôi đang sử dụng Theano backend mặc dù, vì vậy nếu bạn đang sử dụng tensorflow bạn có thể phải thay đổi nó để (Không, Không, n_channels)

Bạn nên sử dụng:

input_shape = (1, Không, Không)

Không có hình dạng nào biểu thị thứ nguyên biến. Lưu ý rằng không phải tất cả các lớp sẽ hoạt động với các thứ nguyên thay đổi như vậy, vì một số lớp yêu cầu thông tin hình dạng (chẳng hạn như Flatten). https://github.com/fchollet/keras/issues/1920

Ví dụ, sử dụng API chức năng keras của lớp đầu vào của bạn sẽ là:

Đối với một tập dữ liệu RGB

inp = Input(shape=(3,None,None)) 

Đối với một tập dữ liệu Grey

inp = Input(shape=(1,None,None)) 
+0

Hi MAZ, tôi có chính xác cùng một vấn đề. Theo đề xuất của bạn, có nghĩa là tôi có thể sử dụng hình ảnh với các kích thước khác nhau để đào tạo và tương tự, tôi có thể dự đoán sự phân tách cho hình ảnh có kích thước khác nhau. – user288609

+0

Không bao giờ thử đào tạo với các kích thước hình ảnh khác nhau, nhưng lý tưởng là nó nên hoạt động. Trong dự đoán, mặc dù, tôi đã thử nó và nó hoạt động (ymmv của khóa học). Kịch bản trường hợp xấu nhất bạn sẽ phải nạp theo lô có cùng kích thước hình ảnh. – maz

Các vấn đề liên quan