nnie ssd


原文链接: nnie ssd

自己的SSD网络跑出来结果有些问题 - Hi3559A开源硬件平台(预热) - 易百纳论坛 - Powered by Discuz!

(问题已解决)自己训练了一个只有两类的SSD网络,一类为背景,一类为目标物体。改了3559A里的SSD例程,将类别改成了2,softmax的输入输出的高也从21改成了2。最终输出的检测结果不对,图片中只有一个目标,但结果却有70多个检测结果,得分都大于0.75,roi位置相差也很大

生成模型是采用ruyistudio,一开始拿自己的caffemodel和ruyistudio例程里的prototxt,生成.wk时是有些问题的,因为类别参数不对,不是21类,是2类。
所以我后来把训练时的prototxt改成了ssd例程的样子,成功生成了.wk文件。

在代码中,我把软件初始化的参数修改了下,如下:

HI_U32 my_class_num = 2; // 21

    /*Set Softmax Parameters*/
    // 类别相关
    pstSoftWareParam->u32SoftMaxInHeight = my_class_num; // 类数 21
    pstSoftWareParam->au32SoftMaxInChn[0] = 121296; // 84*38*38 类别预测的通道数 注意这里也要修改
    pstSoftWareParam->au32SoftMaxInChn[1] = 45486; // 126*19*19
    pstSoftWareParam->au32SoftMaxInChn[2] = 12600; // 126*10*10
    pstSoftWareParam->au32SoftMaxInChn[3] = 3150; // 126*5*5
    pstSoftWareParam->au32SoftMaxInChn[4] = 756; // 84*3*3
    pstSoftWareParam->au32SoftMaxInChn[5] = 84; // 84*1*1

    //
    pstSoftWareParam->u32ConcatNum = 6; // 类别 6组合并到
    pstSoftWareParam->u32SoftMaxOutWidth = 1;
    pstSoftWareParam->u32SoftMaxOutHeight = my_class_num; // 21;
    pstSoftWareParam->u32SoftMaxOutChn = 8732;

    /*Set DetectionOut Parameters*/
    pstSoftWareParam->u32ClassNum = my_class_num; // 21;
    pstSoftWareParam->u32TopK = 400; // 取前top 400个?
    pstSoftWareParam->u32KeepTopK = 200;
    pstSoftWareParam->u32NmsThresh = (HI_U16)(0.3f*SAMPLE_SVP_NNIE_QUANT_BASE);
    pstSoftWareParam->u32ConfThresh = 1;
    pstSoftWareParam->au32DetectInputChn[0] = 23104; // 位置预测通道数  38*38*4*4
    pstSoftWareParam->au32DetectInputChn[1] = 8664; // 19*19*6*4
    pstSoftWareParam->au32DetectInputChn[2] = 2400;
    pstSoftWareParam->au32DetectInputChn[3] = 600;
    pstSoftWareParam->au32DetectInputChn[4] = 144;
    pstSoftWareParam->au32DetectInputChn[5] = 16;

其中,21全都换成了2.

醉了,,,问题解决了,刚刚把参数列表又扫了一遍,发现不只要改21这个数,pstSoftWareParam->au32SoftMaxInChn 这个数组里的数也都要改成对应的参数

`