SSD中使用自带工具进行输出测试结果以及绘图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSD中使用自带工具进行输出测试结果以及绘图相关的知识,希望对你有一定的参考价值。

参考技术A 1.使用一下命令进行输出测试结果:

参数解读:

1 ./build/examples/ssd/ssd_detect.bin   ssd_detect.bin是ssd中目标检测文件ssd_detect.cpp的编译文件,可以直接使用。(关键)

2  /root/caffe-ssd/models/VGGNet/MyDataSet/SSD_300x300/deploy.prototxt  这个是你的网络结构参数,在训练SSD时候会自动生成。

3  /root/caffe-ssd/models/VGGNet/MyDataSet/SSD_300x300/VGG_MyDataSet_SSD_300x300_iter_40000.caffemodel    这里是训练模型

4  /root/data/MyDataSet/SSD300x300/test.txt    这里是测试数据文件

5  --out_file /root/Results/MyDataSet/SSD300x300/output.txt    这里是输出结果

6. --confidence_threshold 0.5    置信度阈值设置,只有大于这个值得框才会输出。

针对SSD中test.txt文件中没有路径信息,只有图片编号会导致后面显示图片找不到的错误的解决办法:

使用excel进行批量添加路径信息:即可

之后复制会test.txt之后如下:

下面是output_0.5.txt的文件内容:

2.根据结果绘图:

参数解析:

1 python examples/ssd/plot_detections.py

2 /root/Results/MyDataSet/SSD300x300/output_0.5.txt

3 /root/data/VOCdevkit

4 --labelmap-file data/MyDataSet/labelmap_voc.prototxt

5 --save-dir /root/Results/MyDataSet/SSD300x300/ssd_result_0.5

最后在相应目录下即可得到最终结果:

文件IO操作开发笔记:使用Cpp的ofstream对磁盘文件存储进行性能测试以及测试工具

前言

  在做到个别项目对日志要求较高,要求并行写入的数据较多,尽管写入数据的线程放在子线程,仍然会造成界面程序的假死(实际上Qt还是在跑,只是磁盘消耗超过瓶颈,造成假死(注意:控制台还能看到打印输出,linux则能看到打印输出)。
  本篇升级了测试工具,并且测试了ofstream在USB3.0和M.2SSD上的写入性能。

 

版本v1.1.0

  更新版本版本,新增了c++的ofstream写入方式。
  

 

测试工具v1.1.0下载地址

  请自行溯源搜索,发不出

 

使用C++的ofstream测试结果

USB3.0移动硬盘测试结果

   
    

   所以,线程越开越多,在某一个阈值线程数(实际打开操作的文件数)会导致性能大幅下降,而且会持续有多个阈值类似的。

M.2主板上SSD测试结果

    
   

 

使用C++的ofstream(用flush)测试结果

USB3.0移动硬盘测试结果

    
    

M.2主板上SSD测试结果

  
  
  结论:这个明显受到硬盘数据传输的影响。

 

关键代码

void FileIoTestManager::slot_optFileUseCppOfstream(int loopTime, int loopWrite, int dataSize, bool flush)

    QDir dir;
    QString dirPath = QString("%1/%2")
                            .arg(QApplication::applicationDirPath())
                            .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh_mm_ss_zzz"));
    if(dir.mkpath(dirPath))
    
        message(QString("创建文件夹成功: %1").arg(dirPath));
    else
        message(QString("创建文件夹失败: %1").arg(dirPath));
    

    // 生成数据
    message(QString("生成测试数据,数据长度: %1").arg(dataSize));
    QByteArray byteArray;
    byteArray.append(dataSize, 0xFF);

    message(QString("==========================测试开始=============================="));

    double totalTime = 0;           // 总计时间
    double fileTotalTime = 0;       // 操作单个文件总时间
    double writeFileTime = 0;       // 单个文件单词写入时间

    totalTime = QDateTime::currentDateTime().toMSecsSinceEpoch() * 1.0f;

    for(int loopIndex = 0; loopIndex < loopTime; loopIndex++)
    
        QString filePath = QString("%1/%2_%3")
                .arg(dirPath)
                .arg(QDateTime::currentDateTime().toString("hh_mm_ss_zzz"))
                .arg(loopIndex, 6, 10, QChar(\'0\'));
        std::ofstream outFile;
        outFile.open(filePath.toUtf8().constData());
        writeFileTime = QDateTime::currentDateTime().toMSecsSinceEpoch();
        for(int writeIndex = 0; writeIndex < loopWrite; writeIndex++)
        
//            message(QString("  第%1次写入文件,写入长度%2字节").arg(writeIndex + 1).arg(dataSize));
            outFile << byteArray.constData();
            if(flush)
            
                outFile.flush();
            
            if(_stop)
            
                outFile.close();
                message(QString("==========================测试手动停止==========================="));
                _stop = false;
                emit signal_finished();
                return;
            
        
        writeFileTime = QDateTime::currentDateTime().toMSecsSinceEpoch() - writeFileTime;
        writeFileTime = writeFileTime / loopWrite;
        message(QString("每次写入数据平均耗时(不包含打开关闭文件): %1ms").arg(writeFileTime));
//        message(QString(" 第%1次关闭文件").arg(loopIndex + 1));
        outFile.close();
    

    message(QString("==========================测试结果=============================="));

    totalTime = QDateTime::currentDateTime().toMSecsSinceEpoch() - totalTime;
    fileTotalTime = totalTime * 1.0f / loopTime;
    message(QString("操作创建文件次数: %1, 单个文件循环写入次数: %2, 每次写入固定数据长度: %3, %4")
            .arg(loopTime)
            .arg(loopWrite)
            .arg(dataSize)
            .arg(flush ? "每次使用flush" : "不使用flush"));
    message(QString("总耗时: %1ms").arg(totalTime));
    message(QString("单个文件循环写入平均总耗时(包括打开关闭文件): %1ms").arg(fileTotalTime));
    message(QString("每次写入数据平均耗时(包括打开关闭文件: %1ms").arg(fileTotalTime * 1.0f / loopWrite));
    message(QString("==========================测试结束=============================="));

    emit signal_finished();
    return;

 

工程模板v1.1.0

  

 

后续

  会持续补充测试其他方式,ofstream本次测试比QFile的性能还差一些。

以上是关于SSD中使用自带工具进行输出测试结果以及绘图的主要内容,如果未能解决你的问题,请参考以下文章

文件IO操作开发笔记:使用Qt的QFile对磁盘文件存储进行性能测试以及测试工具

文件IO操作开发笔记:使用Cpp的ofstream对磁盘文件存储进行性能测试以及测试工具

TF-IDF原理以及sklearn实现和测试

固态硬盘测试工具

绘图PythonPython数据分析matplotlib设置多个子图的间距以及设置总图的标题

ab压力测试工具的简单使用