2016-12-19 4 views
3

Я хотел бы разделить каналы Blob в Caffe, чтобы я мог разделить один Blob (N, c, w, h) на два выхода Blobs размером (N, c/2, w, h).Как разбить Blob вдоль каналов в Caffe

То, что я описал выше, является очень общим, то, что я хочу сделать, это отделить двухканальное входное изображение на два разных изображения. Один идет к сверточному слою, а другой - к объединительному слою. Наконец, я объединяю результаты.

Так что мне интересно, существует ли слой Caffe, который позволяет пользователю делать такую ​​вещь, и как определить его в файле прототипа.

ответ

3

Да, слой Slice предназначен для этой цели. Из Layer Catalogue:

Slice слой представляет собой слой, который утилита нарезает входной слой на несколько выходных слоев вдоль заданной размерности (в настоящее время num или channel только) с заданными индексами среза.

Для того, чтобы нарезать Blob размером N x 2 x H x W на две капли размером N x 1 x H x W, вы должны нарезать axis: 1 (вдоль каналов) на slice_point: 1 (после первого канала):

layer { 
    name: "slice-conv-pool" 
    type: "Slice" 
    bottom: "data" 
    top: "conv1" 
    top: "pool1" 
    slice_param { 
    axis: 1 
    slice_point: 1 
    } 
}