использование партии в кофе даже замедляет скорость, что не ожидается.
Что-нибудь изменилось в моей реализации?
Это мой прототекст.
layer{ name: "data" type: "MemoryData" top: "data" top: "label"
transform_param {
scale: some value }
memory_data_param{
batch_size:5
channels:1
height:128
width:128 } }
Вот мой код кафе, я поставил здесь только необходимую часть. ,
caffe_init(){
......
_net = Net_Init_Load<NetF>(prototxt, caffemodel, caffe::TEST);
m_layer_ = (caffe::MemoryDataLayer<NetF> *)_net->layers()[0].get();
m_layer_->set_batch_size(BATCH_SIZE);
......
}
caffe_run(cv::Mat input){
{
#ifdef BATCH
temp_holder.push_back(input);
if (temp_holder.size() < 5)
return -1;
#endif
if (0 == flag_caffe_init) {
flag_caffe_init = 1;
caffe_init();
}
string layer_name = "eltwise_fc1";
Caffe::SetDevice(0);
Caffe::set_mode(Caffe::GPU);
string f_deploy = parser.caffe_deploy_file;
string f_caffemodel = parser.caffe_model_file;
#ifdef BATCH
for (int i = 0; i < BATCH_SIZE; i++) {
dv.push_back(resized_image.clone());
}
#else
dv = { input }
#endif
m_layer_->AddMatVector(dv, label);
std::vector<caffe::Blob<NetF>*> input_vec;
#ifdef BATCH
auto t_single_forward_start = std::chrono::high_resolution_clock::now();
_net->Forward(input_vec);
auto t_single_forward_end = std::chrono::high_resolution_clock::now();
float ms = std::chrono::duration<float, std::milli>(t_single_forward_end - t_single_forward_start).count();
printf("batch forward timer: %f\n", ms);
dv.clear();
temp_holder.clear();
#else
auto t_single_forward_start = std::chrono::high_resolution_clock::now();
_net->Forward(input_vec);
auto t_single_forward_end = std::chrono::high_resolution_clock::now();
float ms = std::chrono::duration<float, std::milli>(t_single_forward_end - t_single_forward_start).count();
printf("single forward timer: %f\n", ms);
#endif
}
main{
while(1){
cap >> input;
caffe_run(input)
}
return 0;
}
Когда размер пакета равен 1, первый кадр занимал 60 мс, каждый кадр позже занимал 0,8 мс.
Когда размер пакета равен 5, первый кадр занимал 116 мс, каждый кадр позже занимал 20 мс.
Время профилирования только для функции пересылки.
За исключением первого кадра, когда размер пакета равен 5, я ожидаю, что одна партия (5 кадров) должна занять менее 0,8x5 = 4 мс,
но теперь это 20 мс, что-то не так в моей реализации, заранее спасибо за все комментарии.