dlib致命误差与output_tensor

dlib fatal error with output_tensor

本文关键字:output tensor 误差 dlib      更新时间:2023-10-16

我目前正在使用RCNN算法处理面部检测应用程序。 dlib-129.2 C 中开发的代码。我的操作系统是 Windows 10 Home Edition 。框架为 QT 5.7

我的781张图像(高度:228和宽度:307)在一个名为"图像"

的向量内部
std::vector<matrix<rgb_pixel>> images;

之后,我将"图像"分为两个向量:一个包含训练图像(总计389)和测试图像(总计391):

std::vector<dlib::matrix<dlib::rgb_pixel>> training_images(images.begin(), images.begin() + half_size);
std::vector<dlib::matrix<dlib::rgb_pixel>> testing_images(images.begin() + half_size, images.end());

然后,我尝试使用Train()函数来训练RCNN网络:

template <long num_filters, typename SUBNET> using con5d = con<num_filters,5,5,2,2,SUBNET>;
template <long num_filters, typename SUBNET> using con3  = con<num_filters,3,3,1,1,SUBNET>;
template <typename SUBNET> using downsampler  = relu<bn_con<con5d<32, relu<bn_con<con5d<32, relu<bn_con<con5d<32,SUBNET>>>>>>>>>;
template <typename SUBNET> using rcon3  = relu<bn_con<con3<32,SUBNET>>>;
using net_type  = loss_binary_log<con<1,6,6,1,1,rcon3<rcon3<rcon3<downsampler<input_rgb_image_pyramid<pyramid_down<6>>>>>>>>;
net_type net;
dnn_trainer<net_type> trainer(net);
trainer.set_learning_rate(0.01);
trainer.set_min_learning_rate(0.00001);
trainer.set_mini_batch_size(5);
trainer.be_verbose();
trainer.train(training_images, training_labels);

但是,这行不通。每次运行代码时,都会出现以下错误:

在第179行中检测到的错误 ../../../desktop/dlib-19.2/dlib/dnn/loss.h。函数中检测到的错误 double dlib :: lose_binary_log _ :: compute_loss_value_and_gradient(const) dlib :: tensor&amp; const_label_iterator,subnet&amp;)const [ const_label_iterator = __gnu_cxx :: __ normal_iterator>;子网= dlib :: dimpl :: subnet_wrapper,dlib :: add_layer, dlib :: add_layer, dlib :: add_layer, dlib :: add_layer, dlib :: add_layer, dlib :: add_layer, dlib :: add_layer, dlib :: add_layer, dlib :: add_layer, dlib :: add_layer, dlib :: add_layer, dlib :: add_layer, dlib :: input_rgb_image_pyramid>,void>,void>, void>,void>,void>,void>,void>,void>,void>,void>,void>,void>,void>,void>,void>, void>,void>,void>,void>,void>,void>,void>,void>,true,void>]。

失败表达式为output_tensor.nr()== 1&amp;&amp;output_tensor.nc() == 1&amp;&amp;output_tensor.k()==1。

我真的不知道发生了什么。你能帮我吗?

非常感谢您的所有答案。

错误告诉您,您选择的loss_binary_log损失需要网络中的输出张量,每个示例中只有一个值。但是您定义的网络并不能做到这一点。将完全连接的图层放在其末端或执行类似的操作,以便在末尾获得一个输出。