This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM5728:Caffe-Jacinto 未能训练

Guru**** 2553450 points
Other Parts Discussed in Thread: TMDSEVM572X

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1035218/am5728-caffe-jacinto-failed-to-train

器件型号:AM5728
主题中讨论的其他器件:TMDSEVM572X

您好、香榭丽舍

硬件: TMDSEVM572X

 ,:Processor SDK Linux 06_03_00_106 μ s
     机器学习:TIDL Caffe-Jacinto。

客户使用 Caffe-Jacinto 来训练网络,将最后一层卷积 内核定义为1*1,输出为1。 但在训练时、它会提示错误消息。  

TI 示例中有类似的结构、不同之处在于输出是不同的

什么是 Wong?

, ,,MobileNet conv3_1/SEP 和 conv3_2/SEP 都是内核1*1组为1 μ A、但输出通道不匹配组。


客户的网络配置。
第{
名称:"FU1_1/dw"
类型:"卷积"
底部:"conv7_3"
顶部:"FU1_1/dw"
卷积_param{
num_output:64
BIAS_TERM:false
焊盘:1.
kernel_size:3.
组:64
跨度:1.
weight_ciller{
类型:"MSRA"

稀释:1.


第{
名称:"FU1_1/dw/bn"
类型:"BatchNorm"
底部:"FU1_1/dw"
顶部:"FU1_1/dw"
batch_norm_param{
SCALL_BIAS:true


第{
名称:"relu1_1/dw"
类型:"Relu"
底部:"FU1_1/dw"
顶部:"FU1_1/dw"

第{
名称:"FU1_1/SEP"
类型:"卷积"
底部:"FU1_1/dw"
顶部:"FU1_1/SEP"
卷积_param{
num_output:64
BIAS_TERM:false
焊盘:0
kernel_size:1.
组:1.
跨度:1.
weight_ciller{
类型:"MSRA"

稀释:1.


第{
名称:"FU1_1/SEL/bn"
类型:"BatchNorm"
底部:"FU1_1/SEP"
顶部:"FU1_1/SEP"
batch_norm_param{
SCALL_BIAS:true


第{
名称:"relu1_1/SEP"
类型:"Relu"
底部:"FU1_1/SEP"
顶部:"FU1_1/SEP"

第{
名称:"FU1_2/dw"
类型:"卷积"
底部:"FU1_1/SEP"
顶部:"FU1_2/dw"
卷积_param{
num_output:64
BIAS_TERM:false
焊盘:1.
kernel_size:3.
组:64
跨度:1.
weight_ciller{
类型:"MSRA"

稀释:1.


第{
名称:"FU1_2/dw/bn"
类型:"BatchNorm"
底部:"FU1_2/dw"
顶部:"FU1_2/dw"
batch_norm_param{
SCALL_BIAS:true


第{
名称:"relu1_2/dw"
类型:"Relu"
底部:"FU1_2/dw"
顶部:"FU1_2/dw"

第{
名称:"FU1_2/SEP"
类型:"卷积"
底部:"FU1_2/dw"
顶部:"estdmap"
卷积_param{
num_output:1.
BIAS_TERM:false
焊盘:0
kernel_size:1.
组:1.
跨度:1.
weight_ciller{
类型:"MSRA"

稀释:1.



客户的网络结构




谢谢。
Rgds
闪亮

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、TI!

    实际上、我原始网络的最后几层如下所示:

    layer {
      bottom: "conv7_2"
      top: "conv7_3"
      name: "conv7_3"
      type: "Convolution"
      param {
        lr_mult: 1
        decay_mult: 1
      }
      param {
        lr_mult: 2
        decay_mult: 0
      }
      convolution_param {
        num_output: 64
        pad: 2
        dilation: 2
        kernel_size: 3
        weight_filler {
          type: "gaussian"
          std: 0.01
        }
        bias_filler {
          type: "constant"
          value: 0
        }
      }
    }
    layer {
      bottom: "conv7_3"
      top: "estdmap"
      name: "fu1"
      type: "Convolution"
      param {
        lr_mult: 1
        decay_mult: 1
      }
      param {
        lr_mult: 2
        decay_mult: 0
      }
      convolution_param {
        num_output: 1
        kernel_size: 1
        weight_filler {
          type: "gaussian"
          std: 0.01
        }
        bias_filler {
          type: "constant"
          value: 0
        }
      }
    }
    
    layer {
      name: "loss"
      type: "EuclideanLoss"
      bottom: "estdmap"
      bottom: "densitymap"
      top: "loss"
    }

    训练时、Caffe-Jacinto 会打印上面提到的错误。 然而、Caffe 框架成功地对网络进行了培训。 那么、我想它可能与 Caffe-Jacinto 的特征相关吗?  

    由于最后一层的内核大小为1*1,因此我修改了我的网络,就像在 MobileNet 中完成的那样。 结果也失败了...

    这是一个新发现。 根据我的原始架构、我将图层"FU1"的"num_output"从"1"更改为其他数字(2、3、12等)、并且它也成功进行了训练。

    是否有一个解决方案可以将层"FU1"的输出设置为"1"?

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、TI!

    提醒一下。

    如果"num_output"不能设置为1、则可能是 Caffe-Jacinto 中的错误。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、我无法读取粘贴在"但在训练时、它会提示错误消息"之后的图像中的文本。 您能否以更高的分辨率发布错误消息?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    抱歉该图像。

    I20210914 13:15:29.829465   514 net.cpp:267] TRAIN Top shape for layer 35 'conv7_3' 1 64 41 128 (335872)
    I20210914 13:15:29.829478   514 layer_factory.hpp:172] Creating layer 'fu1' of type 'Convolution'
    I20210914 13:15:29.829481   514 layer_factory.hpp:184] Layer's types are Ftype:FLOAT Btype:FLOAT Fmath:FLOAT Bmath:FLOAT
    I20210914 13:15:29.829568   514 net.cpp:200] Created Layer fu1 (36)
    I20210914 13:15:29.829579   514 net.cpp:572] fu1 <- conv7_3
    I20210914 13:15:29.829584   514 net.cpp:542] fu1 -> estdmap
    F20210914 13:15:29.829599   514 conv_dw_layer.cpp:17] Check failed: bottom[0]->channels() == conv_param.num_output() && conv_param.num_output() == conv_param.group() For Depthwise Seperable Convolution, input channels, output channels and groups must have same value. 64 1 1

    当"FU1"的"num_output"为"1"时、它无法在 Caffe-Jacinto 中开始训练。 它与我上面提到的其他数字非常配合。

    当"FU1"的"num_output"为"1"时、它在咖啡因中成功训练。

    这是因为 Caffe-Jacinto 中与组卷积有关的一些限制吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请在 layer_factory.cpp 中注释如下所示的三行内容、重新编译 Caffe-Jacinto、它应该起作用:

    https://git.ti.com/cgit/jacinto-ai/caffe-jacinto/tree/src/caffe/layer_factory.cpp#n62

      //if(conv_param.num_output() == conv_param.group()) {
      //  return CreateLayerBase<ConvolutionDepthwiseLayer>(param, ftype, btype);
      //}


    Details:
    ConvolutionDepthwiseLayer is just a faster implementation specifically for Depthwise layers - it is not mandatory.

    上面显示的检查应该已经确保输入通道输出通道和组与中完成的一样(https://git.ti.com/cgit/jacinto-ai/caffe-jacinto/tree/src/caffe/layers/conv_dw_layer.cpp#n17)

    但输入通道在 layer_factory.cpp 内部不可用-因此实例化条件ConvolutionDepthwiseLayer 不完全正确。
    
    

    希望这对您有所帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的快速响应!

    我会在尝试后给出一些反馈。

    谢谢!  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    培训成功。

    谢谢!