回答

收藏

[评测分享] 【米尔FZ3深度学习计算卡】深度学习DEMO

#板卡评测 #板卡评测 3943 人阅读 | 0 人回复 | 2020-11-30

FZ3深度学习镜像是由百度提供的,其推理加速功能由一个FPGA软核提供,该软核也是基于百度的深度学习框架“飞桨”定制的。
该平台可以通过百度大脑的工具( EasyDL/AIStudio)进行开发。

(一)EasyDL/AIStudio
1-概念

实际上EasyDL/AIStudio这两者概念有所重叠,都提供了一个深度学习数据集训练环境和深度学习应用构建平台。
但大致上分工明确,AIStudio定位在线实训平台,提供一体化深度学习编程环境,以及数据集汇集、竞赛等。
而EasyDL则是一个快速的模型部署平台。
2-区别

在我的理解,两者最大的区别在于AIStudio更偏重于深度学习的底层,包含但不限于图像识别和音频识别,可以广泛地应用于各种领域,比如可以做情感分析的深度学习。
而EasyDL则侧重于应用,注重于AI成熟的图像视频、文本语音的深度学习应用,提供快速的AI应用开发途径。
(二)深度学习DEMO
FZ3开发板出厂内置了深度学习的DEMO,分别是分类模型(classification)和目标检测(detection)

这分别对应了EasyDL平台的两个拳头产品:物体检测模型、图像分类。



(三)分类模型(classification)-图像分类
分类模型指对图片进行分类,可以识别一张图整体是什么物体/状态/场景。
其分类的结果是整张图片进行一个标注。


classification的demo是识别怡宝水瓶子,搜了一下家,刚好发现个空的怡宝瓶:


识别到怡宝瓶的时候标签变为cestban:

准确率有92.5,实时直观感受还行。


(四)目标检测(detection)-物体检测模型
目标检测指对图片内的物体进行检测,可以检测出图片里面多个目标物体名称、位置。
实时的demo是检测螺丝,一下子没找到螺丝来试,先看个样子吧。



(五)停止demo
demo并没有考虑停止的问题,从代码来看:
  1. int main(int argc, char* argv[]){
  2.     std::string path;
  3.     if (argc > 1) {
  4.         path = argv[1];
  5.     } else {
  6.         path = "../configs/config.json";
  7.     }
  8.     json j;
  9.     std::ifstream is(path);
  10.     is >> j;

  11.     init(j);
  12.     signal(SIGINT, signal_handler);

  13.     // 为相机开启一个新的线程
  14.     // std::thread task_capture(capture);
  15.     // 预测线程
  16.     std::thread task_predict(predict);
  17.     std::thread task_cvcap(cv_getpic_loop);
  18.    
  19.     cv::namedWindow(name, CV_WINDOW_NORMAL);
  20.     cv::setWindowProperty(name, CV_WND_PROP_FULLSCREEN, CV_WINDOW_FULLSCREEN);
  21.     // moveWindow(name, 20, 20);
  22.     usleep(2000); // 等待窗口初始化
  23.     while (true) {
  24.         cv::Mat mat = g_dis_queue.Take();
  25.         /* if (g_display_frame.cols == 0) {
  26.             // std::cout<< "FIXME: shouldn't be 0 of image's cols" << std::endl;
  27.             usleep(40000);
  28.             continue;
  29.         } */
  30.         // g_mtx.lock();
  31.         for (int i = 0; i < g_results.size(); ++i) {
  32.             SSDResult r = g_results[i];
  33.             cv::Rect rect(r.x, r.y,r.width,r.height);
  34.             // cv::rectangle(g_display_frame, rect, Scalar(0,0,224), 2);
  35.             cv::rectangle(mat, rect, Scalar(0,0,224), 2);
  36.         }
  37.         imshow(name, mat);
  38.         // imshow(name, g_display_frame);
  39.         // g_mtx.unlock();
  40.         cv::waitKey(10);
  41.     }
  42.     // task_capture.join();
  43.     task_cvcap.join();
  44.     task_predict.join();
  45.     return 0;
  46. }
复制代码



主函数里面只有一个waitkey,也没有判定key是什么类型的,根据类型进行停止。似乎并没有考虑停止的问题,因此需要在SSH远程kill这个线程:










分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条