Oui, bien sûr que c'est possible. Dans le cas où vous avez des paramètres de couche, vous devez ajouter un nouveau message layer_param à caffe.proto, et les lire en conséquence dans votre couche cpp.
Par exemple, PVANet caffe repository a une implémentation pour la couche de proposition Python d'origine.
Comme vous pouvez le voir dans caffe.proto, un nouveau message a été ajouté pour maintenir les paramètres de la couche Python -
// message que les paramètres stocke utilisés par ProposalLayer
message ProposalParameter {
optional uint32 feat_stride = 1 [default = 16];
optional uint32 base_size = 2 [default = 16];
optional uint32 min_size = 3 [default = 16];
repeated float ratio = 4;
repeated float scale = 5;
optional uint32 pre_nms_topn = 6 [default = 6000];
optional uint32 post_nms_topn = 7 [default = 300];
optional float nms_thresh = 8 [default = 0.7];
}
Le prototxt train/test original contient la couche suivante:
layer {
name: 'proposal'
type: 'Python'
bottom: 'rpn_cls_prob_reshape'
bottom: 'rpn_bbox_pred'
bottom: 'im_info'
top: 'rpn_rois'
top: 'rpn_scores'
include { phase: TRAIN }
python_param {
module: 'rpn.proposal_layer'
layer: 'ProposalLayer'
param_str: "{'feat_stride': 16, 'ratios': [0.333, 0.5, 0.667, 1, 1.5, 2, 3], 'scales': [2, 3, 5, 9, 16, 32]}"
}
}
Lorsque le nouveau cpp ressemble:
layer {
name: 'proposal'
type: 'proposal'
bottom: 'rpn_cls_prob_reshape'
bottom: 'rpn_bbox_pred'
bottom: 'im_info'
top: 'rpn_rois'
top: 'rpn_scores'
include { phase: TRAIN }
proposal_param {
feat_stride: 16
ratios: 0.333, 0.5, 0.667, 1, 1.5, 2, 3
scales: 2, 3, 5, 9, 16, 32
}
}
etc.
votre calque possède-t-il des paramètres internes? c'est-à-dire, avez-vous utilisé 'self.blobs.add_blob()' dans votre implémentation de couche "Python"? – Shai
Je ne l'ai pas fait. Cela signifie-t-il que je peux simplement implémenter les méthodes C++ pour faire la même chose que les Python? En fait c'est logique car le schéma est défini dans le fichier '.prototxt' et non dans l'implémentation de la couche – SomethingSomething
si vous n'avez pas de paramètres internes que le calque n'a aucun effet sur le chargement de' .caffemodel' vous devriez bien le convertir de python à cpp. Je suppose que vous serez encore mieux d'avoir une implémentation GPU (implémentation '.cu' ...) – Shai