Toybrick

标题: 人工智能开发系列(3) YOLOV3开发与实现 [打印本页]

作者: hisping    时间: 2019-2-28 16:57
标题: 人工智能开发系列(3) YOLOV3开发与实现
[attach]143[/attach]



本教程视频直播回看:
[attach]310[/attach]


本教程基于RK3399pro开发板,使用fedora 28系统,另需usb鼠标、usb键盘、hdmi显示器、usb摄像头、网线连接开发板

1. 搭建开发环境
1.安装rknn-toolkit及其依赖库,按照wiki教程安装环境

2.验证模型转换、推理
  1. cd rknn-toolkit/example/mobilenet_v1
  2. python3 test.py
复制代码

3.安装matplotlib
  1. sudo dnf install freetype-devel pkg-config libpng-devel pkg-config
  2. pip3 install --user matplotlib
复制代码

4.此时应该可以正常显示图片及打开摄像头,但无法打开视频文件,需安装gstreamer
  1. sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
  2. sudo dnf install gstreamer1-libav
复制代码


2.快速上手,运行yolov3 rknn模型
1.下载附件[attach]818[/attach]解压到PC Linux系统上(Windows, Mac不支持预编译)用于转化模型(也可以在板子上转模型,但不推荐,速度慢且不支持预编译)
2.进入yolov3_demo目录,并从darknet官网下载权重
  1. cd yolov3_demo
  2. wget https://pjreddie.com/media/files/yolov3-tiny.weights
  3. wget https://pjreddie.com/media/files/yolov3.weights
复制代码

修改data/目录下图片大小,用于后续模型转化
  1. python3 rknn_resize.py
复制代码

转为rknn模型,转化非常消耗内存,请先设置swap虚拟内存(建议大于2g),转化比较慢,请耐心等待
  1. python3 rknn_transform_320x320.py
  2. python3 rknn_transform_416x416.py
  3. python3 rknn_transform_608x608.py
  4. python3 rknn_transform_tiny.py
复制代码
有用户反馈,使用rknn-toolkit1.0.0及以上版本,跑yolov3模型会卡在init_runtime,这是由于原脚本没有开启预编译导致的,现已修改转化脚本默认开启预编译,开启预编译后得到的模型不能在PC模拟器上运行,只能在板子上运行

在PC上转模型成功后,拷贝PC上的yolov3_demo到开发板,在开发板操作以下步骤
预测一张图片
  1. python3 rknn_picture_320x320.py
  2. python3 rknn_picture_416x416.py
  3. python3 rknn_picture_608x608.py
  4. python3 rknn_picture_tiny.py
复制代码

打开摄像头,预测视频,若没有摄像头也可以修改脚本打开视频文件
  1. python3 rknn_camera_320x320.py
  2. python3 rknn_camera_416x416.py
  3. python3 rknn_camera_608x608.py
  4. python3 rknn_camera_tiny.py
复制代码


之前一直忙其他项目没空搞多线程,论坛上有人发多进程版本跑20帧,我在其基础上做了优化,光线充足条件下可以跑到30帧,昏暗条件下稍慢这是摄像头曝光的原因,与模型无关;感谢该开发者分享代码,也希望论坛能有更多这样的开发者
  1. python3 rknn_camera_tiny_multiProcess.py
复制代码
[attach]245[/attach]
除了python接口的demo外,我们还提供了c接口的demo,该demo基于论坛开发者分享修改而来,感谢该名开发者
  1. sudo dnf install libcurl-devel
  2. cd yolov3_demo/C-yolov3/build
  3. cmake ..
  4. make
复制代码

打开摄像头预测
  1. ./yolov3-320 c 0
  2. ./yolov3-416 c 0
  3. ./yolov3-608 c 0
  4. ./yolov3-tiny c 0
复制代码
打开视频文件预测
  1. ./yolov3-320 v ../../video/3.mp4
  2. ./yolov3-416 v ../../video/3.mp4
  3. ./yolov3-608 v ../../video/3.mp4
  4. ./yolov3-tiny v ../../video/3.mp4
复制代码


3.训练自己的数据
1.训练建议在用户PC机上训练,请先下载编译安装darknet工程,详见官网https://pjreddie.com/darknet/yolo/
2.下载附件[attach]464[/attach],解压并拷贝到darknet/目录下
[attach]146[/attach]

3.进入train_my_data目录,并下载权重数据
  1. cd train_my_data
  2. wget https://pjreddie.com/media/files/yolov3-tiny.weights
复制代码

拷贝你的图片到train_images目录和validate_images目录
下载编译安装打标签工具,该工具用于给你的图片打标签
  1. git clone https://github.com/tzutalin/labelImg
  2. cd labelImg
  3.     sudo apt-get install pyqt5-dev-tools
  4.     sudo pip3 install -r requirements/requirements-linux-python3.txt
  5.     make qt5py3
  6.     python3 labelImg.py
  7. #使用工具给你的图片打标签,并把标签保存到train_imageXML目录和validate_imageXML目录
  8. cd ..
复制代码

遍历train_images目录和validate_images目录下所有图片,得到trainImageId.txt和validateImageId.txt文件
  1. python3 list_image_files.py
复制代码

得到图片路径生成trainImagePath.txt和validateImagePath.txt文件,并把train_imageXML目录和validate_imageXML目录下的标签转成.txt格式存在train_labels和validate_labels目录下
  1. python3 trans.py
复制代码

修改voc.names文件,写入你要训练的物体名称
  1. vi voc.names
  2.     class_1
  3.     class_2
  4.     class_3
复制代码

修改voc.data文件,N是你训练的物体种类
  1. vi voc.data
  2.     classes = N      # N is your class num
  3.     train = /home/XXX/darknet/train_my_data/trainImagePath.txt
  4.     valid = /home/XXX/darknet/train_my_data/validateImagePath.txt
  5.     names = train_my_data/voc.names
  6.     backup = train_my_data/backup
复制代码

修改yolov3-tiny-modify.cfg,修改所有yolo层的classes参数,修改yolo层前一层的filters参数
  1. vi yolov3-tiny-modify.cfg
  2.     1. modify classes = N in [yolo] layer
  3.     2. modify filters = 3*(N+1+4) ahead [yolo] layer
  4.     3. modify max_batches = your-max-train-times

  5. cd ..
复制代码

提取卷积层数据
  1. ./darknet partial train_my_data/yolov3-tiny.cfg train_my_data/yolov3-tiny.weights train_my_data/yolov3-tiny.conv.15 15
复制代码

开始训练
  1. ./darknet detector train train_my_data/voc.data train_my_data/yolov3-tiny-modify.cfg train_my_data/yolov3-tiny.conv.15
复制代码

验证训练
  1. ./darknet detector test train_my_data/voc.data train_my_data/yolov3-tiny-modify.cfg train_my_data/backup/yolov3-tiny-modify_900.weights train_my_data/train_images/000937.jpg -thresh 0.1
复制代码

4.拷贝你自己训练的.weight文件和yolov3-tiny-modify.cfg文件到rk3399pro开发板,修改rknn_transform_tiny.py,转成rknn模型
5.修改rknn_picture_tiny.py文件中数据,N是物体种类
    LISTSIZE=85        =>        LISTSIZE=(N+5)
    NUM_CLS=80        =>        NUM_CLS=N
    CLASSES{...}        =>        CLASSES{“class_1”, “class_2”, “class_3”}

4.YOLOV3理论分析
1.YOLO的全名是:You Only Look Once.
YOLO算法的基本思想是:首先将输入图像分成S*S个格子,如果某个预测对象的中心坐标落在某个格子中,那么就由该格子来预测该对象,每个格子都会预测B个边界框,每个边界框输出为(5+C)长度参数
SxS: 在yolov3-416中会切割成13x13, 26x26, 52x52
B: 在yolov3中该值为3, 由anchors决定
C: 模型可预测分类, VOC数据集为20,coco数据集为80,也可以自己训练
5: bounding box边界框的中心坐标,长宽,对象置信度
[attach]147[/attach][attach]148[/attach]




2.YOLOV3神经网络图
[attach]149[/attach]

yolov3-416: 输入参数416x416x3, 输出3个数组13x13x(3x(5+80))          26x26x(3x(5+80)) 52x52x(3x(5+80))
yolov3-608: 输入参数608x608x3, 输出3个数组19x19x(3x(5+80))          38x38x(3x(5+80)) 76x76x(3x(5+80))
tiny-yolov3: 输入参数416x416x3, 输出2个数组13x13x(3x(5+80))  26x26x(3x(5+80))

3.Yolov3后处理

对数空间变换:
[attach]150[/attach]
tx, ty, tw, th为模型输出
cx, cy是物体中心所在格子索引
6()是sigmoid函数,变量映射到(0, 1)
pw, ph为对应anchors box的宽高

基于对象置信度的阈值,首先,我们根据对象分数过滤框。 通常,具有低于阈值分数的框被忽略


非最大抑制(NMS)
    NMS打算解决同一图像的多重检测问题。
     A、B、C、D、E、F
从最大概率矩形框F开始,分别判断A~E与F的重叠度IOU是否大于某个设定的阈值;
假设B、D与F的重叠度超过阈值,那么就扔掉B、D;并标记第一个矩形框F,是我们保留下来的。
从剩下的矩形框A、C、E中,选择概率最大的E,然后判断E与A、C的重叠度,重叠度大于一定的阈值,那么就扔掉;并标记E是我们保留下来的第二个矩形框。

[attach]151[/attach]









作者: qiaoqiang126    时间: 2019-2-28 17:57
608*608 的yolov3不能在Android上跑吗?
作者: chuyee    时间: 2019-3-1 08:37
rknn_inference 20ms is for 416x416 tiny-yolov3, right? I measured 608x608 yolov3 inference time is about 440ms. Is the number correct? That's only 2.5 FPS.
作者: hisping    时间: 2019-3-1 09:17
chuyee 发表于 2019-3-1 08:37
rknn_inference 20ms is for 416x416 tiny-yolov3, right? I measured 608x608 yolov3 inference time is a ...

是的,yolov3-608耗时比较长,在移动设备端还是建议使用tiny-yolov3对视频进行检查。你可以使用tiny-yolov3检查视频,当检查到重点对象时,可以把这一帧数据发给yolov3-608再检测以提高精度
作者: qiaoqiang126    时间: 2019-3-1 14:07
opencv-python>=3.4.3.18无法安装,找不到包怎么办?
作者: chuyee    时间: 2019-3-1 14:28
hisping 发表于 2019-3-1 09:17
是的,yolov3-608耗时比较长,在移动设备端还是建议使用tiny-yolov3对视频进行检查。你可以使用tiny-yolo ...

试了一下608x608的Yolov2,rknn_inference()可以达到80ms。同样大小的Yolov3为什么会慢5倍这么多呢?是不是有些Yolov3的算子还没有优化好啊?
作者: someone9388    时间: 2019-3-1 15:47
qiaoqiang126 发表于 2019-3-1 14:07
opencv-python>=3.4.3.18无法安装,找不到包怎么办?

同问,
如果是安装在板子上,是否因该安装opencv-python-aarch64,但是pip 中的whl 只有3.3.0.1 的。这个包是否可以?
作者: chuyee    时间: 2019-3-1 16:14
someone9388 发表于 2019-3-1 15:47
同问,
如果是安装在板子上,是否因该安装opencv-python-aarch64,但是pip 中的whl 只有3.3.0.1 的。这个 ...
sudo dnf install -y python3-devel python3-opencv python3-numpy-f2py python3-scipy python3-h5py python3-lmdb opencv-devel


Use dnf instead of pip. See the original post.
作者: someone9388    时间: 2019-3-1 16:46
chuyee 发表于 2019-3-1 16:14
Use dnf instead of pip. See the original post.

是的 ,多谢!
作者: chuyee    时间: 2019-3-1 17:13
Tried Yolov3 416. All my results are as follow. Do they algin with RK's internal testing?

Yolov3 608: 440ms
Yolov3 416: 210ms
Yolov2 608: 80ms
Yolov3 tiny: 20ms

BTW, I met below warnings during running rknn_tranform.py. Does it mean the rknn model is not best optimized (i.e. some high efficiency OP's are ignored due to accuracy loss)?

--> Building model
W extend add_13 to add will cause accuracy loss, do not extend.
W extend add_23 to add will cause accuracy loss, do not extend.
W extend add_30 to add will cause accuracy loss, do not extend.
W extend add_40 to add will cause accuracy loss, do not extend.
W extend add_47 to add will cause accuracy loss, do not extend.
W extend add_54 to add will cause accuracy loss, do not extend.
W extend add_61 to add will cause accuracy loss, do not extend.
W extend add_68 to add will cause accuracy loss, do not extend.
W extend add_75 to add will cause accuracy loss, do not extend.
W extend add_82 to add will cause accuracy loss, do not extend.
W extend add_89 to add will cause accuracy loss, do not extend.
W extend add_99 to add will cause accuracy loss, do not extend.
W extend add_106 to add will cause accuracy loss, do not extend.
W extend add_113 to add will cause accuracy loss, do not extend.
W extend add_120 to add will cause accuracy loss, do not extend.
W extend add_127 to add will cause accuracy loss, do not extend.
W extend add_134 to add will cause accuracy loss, do not extend.
W extend add_141 to add will cause accuracy loss, do not extend.
W extend add_148 to add will cause accuracy loss, do not extend.
W extend add_158 to add will cause accuracy loss, do not extend.
W extend add_165 to add will cause accuracy loss, do not extend.
W extend add_172 to add will cause accuracy loss, do not extend.
W extend add_179 to add will cause accuracy loss, do not extend.
done
作者: 111223    时间: 2019-3-1 17:35
android 端的demo有提供吗?就是用c或者java推理取值的那种
作者: hisping    时间: 2019-3-4 15:32
111223 发表于 2019-3-1 17:35
android 端的demo有提供吗?就是用c或者java推理取值的那种

c接口的没有实现,用户可以参考python接口的自行实现
作者: qiaoqiang126    时间: 2019-3-5 10:05
chuyee 发表于 2019-3-1 17:13
Tried Yolov3 416. All my results are as follow. Do they algin with RK's internal testing?

Yolov3 60 ...

Yolov3 608: 我用了4s,这是怎么回事?
作者: hisping    时间: 2019-3-5 19:08
qiaoqiang126 发表于 2019-3-5 10:05
Yolov3 608: 我用了4s,这是怎么回事?

你应该是没有开启量化
作者: administer    时间: 2019-3-7 21:20
hisping 发表于 2019-3-5 19:08
你应该是没有开启量化

请教一下如何量化鸭
作者: Ess    时间: 2019-3-11 15:27
单线程修改为多线程的教程有吗?
作者: vlsida2019    时间: 2019-3-12 13:36
chuyee 发表于 2019-3-1 14:28
试了一下608x608的Yolov2,rknn_inference()可以达到80ms。同样大小的Yolov3为什么会慢5倍这么多呢?是不 ...

我想請問一下 你是如何把yolov2弄進去的

作者: vlsida2019    时间: 2019-3-12 14:00
想請問一下  我使用作者提供的python load我的yolov2-tiny的模型 會出現 out_boxes, out_boxes2 = rknn.inference(inputs=[mat]) ValueError: not enough values to unpack (expected 2, got 1) 的問題 請問是哪裡有問題?
作者: 程子    时间: 2019-3-12 15:10
vlsida2019 发表于 2019-3-12 14:00
想請問一下  我使用作者提供的python load我的yolov2-tiny的模型 會出現 out_boxes, out_boxes2 = rknn.inf ...

输出节点只有一个,而你试图把它赋值给两个变量。
作者: chuyee    时间: 2019-3-12 15:17
程子 发表于 2019-3-12 15:10
输出节点只有一个,而你试图把它赋值给两个变量。

Yeah, yolov3 has 3 dimensions output while yolov2 has only one.
作者: vlsida2019    时间: 2019-3-12 16:40
程子 发表于 2019-3-12 15:10
输出节点只有一个,而你试图把它赋值给两个变量。

那請問要如何改 會比較好 我使用的是rknn_picture_tiny.py這程式出現此問題
作者: vlsida2019    时间: 2019-3-12 17:04
請問可以做一個yolov2的示範和直播嗎?
作者: hisping    时间: 2019-3-12 17:46
vlsida2019 发表于 2019-3-12 17:04
請問可以做一個yolov2的示範和直播嗎?

yolov3是3个输出,yolov3-tiny是两个输出,yolov2输出是一个大数组,请先理解yolo算法的输出含义,帖子里都有
作者: vlsida2019    时间: 2019-3-13 16:53
想請問如果要使用的是yolov2的cfg和weights 帖子裡的那些python檔案 需要做哪些修改 才有辦法load進去yolov2的檔案
作者: Aries699    时间: 2019-3-21 21:46
本帖最后由 Aries699 于 2019-3-21 22:08 编辑

运行rknn_picture.py和rknn_picture_tiny.py脚本时出现以下错误:
No XVisualInfo for format QSurfaceFormat(version 2.0, options QFlags<QSurfaceFormat::FormatOption>(), depthBufferSize -1, redBufferSize 1, greenBufferSize 1, blueBufferSize 1, alphaBufferSize -1, stencilBufferSize -1, samples -1, swapBehavior QSurfaceFormat::SwapBehavior(SingleBuffer), swapInterval 1, colorSpace QSurfaceFormat::ColorSpace(DefaultColorSpace), profile  QSurfaceFormat::OpenGLContextProfile(NoProfile))
Falling back to using screens root_visual.
qt.qpa.xcb: QXcbConnection: XCB error: 145 (Unknown), sequence: 175, resource id: 0, major code: 139 (Unknown), minor code: 20请问是什么地方出了问题?

作者: ronyuzhang    时间: 2019-3-22 17:28
为什么官方提供的mobilenet-ssd的后处理时间高达1s呢?请问这块如何优化?
作者: hscoder    时间: 2019-3-22 23:53
hisping 发表于 2019-3-5 19:08
你应该是没有开启量化

请问怎么开启量化呢 ?
作者: 程子    时间: 2019-3-23 09:25
hscoder 发表于 2019-3-22 23:53
请问怎么开启量化呢 ?
  1. rknn.build(do_quantization=True)
复制代码

作者: Aries699    时间: 2019-3-25 22:33
本帖最后由 Aries699 于 2019-3-27 21:34 编辑

现在已经安装0.9.9版本的rknn_toolkit,我在运行yolov3_dome中的rknn_picture.py时,inference函数用时45秒,初步推断是没有用上npu,请问如何使用npu以及如何在cpu和npu之间进行切换?
作者: cloudboy08    时间: 2019-3-26 19:15
感谢楼主的文章!

我在实验类似的场景。但是安装tensorflow出现了错误。

pip3 install --user tensorflow-1.10.1-cp36-cp36m-linux_aarch64.whl

出现的错误是 “MemoryError"

期待解决方案。谢谢

作者: cloudboy08    时间: 2019-3-26 21:42
cloudboy08 发表于 2019-3-26 19:15
感谢楼主的文章!

我在实验类似的场景。但是安装tensorflow出现了错误。

添加了3G swap后,错误解决了。
作者: vlsida2019    时间: 2019-3-28 16:34
请问如何把脚本从单线程修改为多线程执行?
作者: momo    时间: 2019-4-20 16:15
干货满满,谢谢楼主分享,赞一个
作者: zyxking    时间: 2019-5-15 09:40
第三部分:
    sudo apt-get install pyqt5-dev-tools     出现“apt-get command not found ”错误怎么解决?

作者: 程子    时间: 2019-5-15 19:31
zyxking 发表于 2019-5-15 09:40
第三部分:
    sudo apt-get install pyqt5-dev-tools     出现“apt-get command not found ”错误怎么 ...

训练是在开发机上做的,而不是RK3399Pro上。
作者: 迷雪空空    时间: 2019-5-17 14:25
我试了yolov3, init_runtime()这个函数执行的时间非常非常非常长,都快1个小时了,是不是因为更新的toolkit有bug?我当前的toolkit是1.0.0版本
作者: chky    时间: 2019-5-22 10:39
不错,bd。正在找yolov3的帖子
作者: zhangxiangming    时间: 2019-6-11 11:30
rknn_camera.py 跑yolov3模型,3G板上正常,6G板上rknn_init函数运行需要10几分钟。yolov3_tiny模型两个板子都正常。是什么原因?
作者: toytoybreak    时间: 2019-6-23 17:04
迷雪空空 发表于 2019-5-17 14:25
我试了yolov3, init_runtime()这个函数执行的时间非常非常非常长,都快1个小时了,是不是因为更新的toolkit ...

我也遇到这个问题,请问你找到原因或者解决了么?
作者: TryYourBest    时间: 2019-6-27 09:42
在跑案例的过程中,运行“python3 rknn_transform.py”时,当进行到“Building model1”时,经过一段时间后提示“Killed”,经过多次尝试不行。有没有遇到类似状况的,请教解决方案。

  1. [toybrick@localhost yolov3_demo]$ python3 rknn_transform.py
  2. /usr/lib64/python3.6/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
  3.   from ._conv import register_converters as _register_converters
  4. --> Loading model
  5. done
  6. --> Building model
  7. Killed
复制代码

作者: TryYourBest    时间: 2019-6-27 16:50
根据教程进行个人数据训练过程中,当执行“make qt5py3”指令时,提示:“pyrcc5 -o libs/resources.py resources.qrc        make: *** [Makefile:24:qt5py3] 错误 1”,有没有知道这是什么问题的,求解决方案,谢谢
作者: asher    时间: 2019-7-5 10:47
如何用yolov3而不是yolov3-tiny,怎么提取特征呢,
也是用./darknet partial train_my_data/yolov3.cfg train_my_data/yolov3.weights train_my_data/yolov3.conv.15 15吗?

作者: xiaqing10    时间: 2019-7-15 15:04
本帖最后由 xiaqing10 于 2019-7-16 15:55 编辑
chuyee 发表于 2019-3-1 14:28
试了一下608x608的Yolov2,rknn_inference()可以达到80ms。同样大小的Yolov3为什么会慢5倍这么多呢?是不 ...

请问我用608的v2,  发现分类都是对的, score也是对的. 就是box框不准,都是非常非常小的框

作者: hisping    时间: 2019-7-25 16:04
asher 发表于 2019-7-5 10:47
如何用yolov3而不是yolov3-tiny,怎么提取特征呢,
也是用./darknet partial train_my_data/yolov3.cfg tra ...

参考darknet官网,上面有使用COCO数据集训练yolov3的过程
作者: hisping    时间: 2019-7-25 16:08
toytoybreak 发表于 2019-6-23 17:04
我也遇到这个问题,请问你找到原因或者解决了么?

在0.9.9版本是正常的,1.0.0版本确实有速度极慢的问题,我们将尽快解决该问题
作者: hisping    时间: 2019-7-25 16:10
xiaqing10 发表于 2019-7-15 15:04
请问我用608的v2,  发现分类都是对的, score也是对的. 就是box框不准,都是非常非常小的框
...

这种情况很有可能是你后处理使用的anchord选取不对
作者: 17708867778    时间: 2019-8-3 06:45
您好,我在启动摄像头进行识别的时候,出现错误
libv4l2:error reading :invalid argument
video error : V4L2: could not SYNC to video stream . invalid argument
用cheese 是能启动摄像头的
作者: hisping    时间: 2019-8-5 09:25
17708867778 发表于 2019-8-3 06:45
您好,我在启动摄像头进行识别的时候,出现错误
libv4l2:error reading :invalid argument
video error : V ...

1.先确认你按照wiki--人工智能安装了开发板的环境
2.脚本默认打开/dev/video0这个节点,查看下你的摄像头是不是这个节点
作者: fallachao    时间: 2019-8-5 17:22
TryYourBest 发表于 2019-6-27 09:42
在跑案例的过程中,运行“python3 rknn_transform.py”时,当进行到“Building model1”时,经过一段时间后 ...

我之前也遇到过,应该是系统的内存不够了,把其他应用先关了,空出足够内存出来试试
作者: abcehac    时间: 2019-8-5 23:13
17708867778 发表于 2019-8-3 06:45
您好,我在启动摄像头进行识别的时候,出现错误
libv4l2:error reading :invalid argument
video error : V ...

你用的是firefly的吧?我用firefly的就出现这个问题,一直找不到解决方法。官方的和启贝的开发板倒是没这个问题。
作者: abcehac    时间: 2019-8-6 01:12
很赞!很适合我这种小白!
作者: abcehac    时间: 2019-8-7 21:33
看了一下多线程的版本,有点小问题想请问版主和各路大神:
1、建立了6个进程:p_cap1\p_cap2\p_infer1\p_infer2\p_post1\p_post2 是不是考虑这个3399proCPU是6核的?
2、infer_rknn 中的内容不是要调用NPU吗?为何也建立了2次?难道NPU也是双核的?
3、q_frame = Queue(maxsize=1)
   q_image = Queue(maxsize=3)
   q_infer = Queue(maxsize=3)
   q_objs = Queue(maxsize=3)
   这个maxsize为何frame是1,后面是3,这个我没算明白?
期待各位大神指点!
作者: hisping    时间: 2019-8-8 08:57
abcehac 发表于 2019-8-7 21:33
看了一下多线程的版本,有点小问题想请问版主和各路大神:
1、建立了6个进程:p_cap1\p_cap2\p_infer1\p_in ...

1.是的
2.npu不是双核的,去掉一个infer帧率会明显下降,原因是infer除了调用npu还要传递数据,当一个infer调用npu完成后在传递数据时,另一个infer就可以调用npu了
3.这个数不一定非要1,3的,demo只是告诉你怎么去优化,不是说我这个已经是最优的了,demo还有很多优化的地方,用户可以自己试试,效果比较好的话可以上传到论坛分享
作者: abcehac    时间: 2019-8-8 11:20
hisping 发表于 2019-8-8 08:57
1.是的
2.npu不是双核的,去掉一个infer帧率会明显下降,原因是infer除了调用npu还要传递数据,当一个inf ...

1 非常感谢您的回复!!!那我可以再试试这些maxsize值,看看怎么能更快点。
2 然后,我发了个帖子《yolov3_demo中py文件源代码是不是有点小问题?和我的其他疑问》,也麻烦您有空帮忙看一下前3个疑问。
3 最后,我还想问您一下,有人说做swap空间会减少emmc的寿命,这是说频繁的擦写emmc会缩短它的使用寿命吗?这个缩短是说2-3年?这个swap空间的存储器就会坏掉很多吗?
作者: hisping    时间: 2019-8-12 09:02
abcehac 发表于 2019-8-8 11:20
1 非常感谢您的回复!!!那我可以再试试这些maxsize值,看看怎么能更快点。
2 然后,我发了个帖子《yolo ...

swap是虚拟内存,占用emmc空间,频繁擦除emmc确实会减少emmc寿命,但是只有当用户内存不够的时候才会使用到swap,正常使用很少会出现内存不够的情况,所以放心使用
作者: abcehac    时间: 2019-8-13 00:16
本帖最后由 abcehac 于 2019-8-13 00:19 编辑

楼主晚上好!!!
根据楼主的教程,我用rk3399pro的板子,rknn_camera_tiny.py 跑起来了。但是demo中的 rknn_camera.py 一直报错:

并且,我的rknn/api 中 根本就没有提示中所说的那两个文件 rknn_runtime.py 和 rknn_base.py

这个太神奇了……

期待楼主解答!
作者: hisping    时间: 2019-8-13 09:31
abcehac 发表于 2019-8-13 00:16
楼主晚上好!!!
根据楼主的教程,我用rk3399pro的板子,rknn_camera_tiny.py 跑起来了。但是demo中的 rkn ...

你是在PC上开预编译转换的模型,然后拷贝到板子上运行的吗?我在rknn-toolkit 1.0.0上都有验证过是ok的
作者: abcehac    时间: 2019-8-13 13:06
hisping 发表于 2019-8-13 09:31
你是在PC上开预编译转换的模型,然后拷贝到板子上运行的吗?我在rknn-toolkit 1.0.0上都有验证过是ok的 ...

对,我的两个weights都是在pc上做的转换,然后放在板子上跑。但是现在tiny的可以。全网络的不行。
我想用更多的图片量化,所以转换模型在板子上弄实在是太慢了。
我用的是最近的1.1.0版本。

作者: zq07075335    时间: 2019-8-16 16:15
abcehac 发表于 2019-8-5 23:13
你用的是firefly的吧?我用firefly的就出现这个问题,一直找不到解决方法。官方的和启贝的开发板倒是没这 ...

我跑多线程版本也会出现这个问题,注释掉一个进程,就正常了,两个进程同时打开摄像头就有这个问题,
作者: abcehac    时间: 2019-8-16 20:59
zq07075335 发表于 2019-8-16 16:15
我跑多线程版本也会出现这个问题,注释掉一个进程,就正常了,两个进程同时打开摄像头就有这个问题, ...

我这里已经是单线程了……再注释掉一个就没了……

对了,你的单线程是全网络的还是tiny的?我现在板子上只能跑tiny的,全网络的一跑就卡在init runtime enivronment,通过top查看直接这个python就行就被干掉了。
作者: hisping    时间: 2019-8-19 11:15
abcehac 发表于 2019-8-16 20:59
我这里已经是单线程了……再注释掉一个就没了……

对了,你的单线程是全网络的还是tiny的?我现在板子上 ...

文章及脚本都有更新哦,新增支持yolov3-320,yolov3-416和c接口
作者: abcehac    时间: 2019-8-19 19:49
hisping 发表于 2019-8-19 11:15
文章及脚本都有更新哦,新增支持yolov3-320,yolov3-416和c接口

好嘞!多谢提醒!学习起来!!!
请问楼主,如何设置这个板子开机启动不用密码?我搜到网上说etc/gdm
但是这个板子中的etc没有这个gdm文件夹。请问如何实现?
作者: zq07075335    时间: 2019-8-20 08:42
abcehac 发表于 2019-8-16 20:59
我这里已经是单线程了……再注释掉一个就没了……

对了,你的单线程是全网络的还是tiny的?我现在板子上 ...

我跑的tiny的
作者: abcehac    时间: 2019-8-20 10:33
zq07075335 发表于 2019-8-20 08:42
我跑的tiny的

嗯嗯,tiny倒是没啥问题。全网络的在板子上跑不起来,你的全网络能在板子上跑起来不?
作者: zq07075335    时间: 2019-8-23 13:57
abcehac 发表于 2019-8-20 10:33
嗯嗯,tiny倒是没啥问题。全网络的在板子上跑不起来,你的全网络能在板子上跑起来不? ...

3fps,还是跑tiny吧
作者: mrzs    时间: 2019-9-3 21:51
yolov3 有c++版本的demo吗
作者: troy    时间: 2019-9-5 10:38
mrzs 发表于 2019-9-3 21:51
yolov3 有c++版本的demo吗

认真看下帖子,上面有的
作者: gwjjj35    时间: 2019-9-25 13:10
hisping 发表于 2019-8-8 08:57
1.是的
2.npu不是双核的,去掉一个infer帧率会明显下降,原因是infer除了调用npu还要传递数据,当一个inf ...

您好
      我想请问一下,给rknn_infer开两个进程,是自动调用的吗?

作者: hisping    时间: 2019-9-26 08:52
gwjjj35 发表于 2019-9-25 13:10
您好
      我想请问一下,给rknn_infer开两个进程,是自动调用的吗?

2个infer进程都会读取队列中的图片,调用npu进行预测,减少npu等待时间
作者: agogos    时间: 2019-9-26 09:05
hisping 发表于 2019-3-1 09:17
是的,yolov3-608耗时比较长,在移动设备端还是建议使用tiny-yolov3对视频进行检查。你可以使用tiny-yolo ...

tiny yolo最大的问题是效果差了一般,mAP只有30%,不到60%.
作者: gwjjj35    时间: 2019-9-26 09:33
hisping 发表于 2019-8-8 08:57
1.是的
2.npu不是双核的,去掉一个infer帧率会明显下降,原因是infer除了调用npu还要传递数据,当一个inf ...

请问为什么我使用两个infer进程的时候会报错说 not enough values to unpack(expected 2,got 1)?
你用的是新版本的rknn吗?rknn.inference()支持多图输入的
作者: mrzs    时间: 2019-10-6 10:03
agogos 发表于 2019-9-26 09:05
tiny yolo最大的问题是效果差了一般,mAP只有30%,不到60%.

我也遇到了这个效果差很多的问题。。。。请问你解决了吗,我把量化关了也很差
作者: hisping    时间: 2019-10-11 09:43
mrzs 发表于 2019-10-6 10:03
我也遇到了这个效果差很多的问题。。。。请问你解决了吗,我把量化关了也很差 ...

tiny本身就是精简模型,准确率比较低,demo中也有全网络yolov3-320 yolov3-416你可以试试,精度比较高速度稍慢
作者: KirutoCode    时间: 2019-10-16 14:29
我执行./darknet detector test train_my_data/voc.data train_my_data/yolov3-tiny-modify.cfg train_my_data/backup/yolov3-tiny-modify_900.weights train_my_data/train_images/000937.jpg -thresh 0.1
后,报错如下
Loading weights from train_my_data/backup/yolov3-tiny-modify_900.weights...Couldn't open file: train_my_data/backup/yolov3-tiny-modify_900.weights
我应该怎么保存我自己训练的权重?
作者: nishiwpo    时间: 2019-10-16 15:49
abcehac 发表于 2019-8-5 23:13
你用的是firefly的吧?我用firefly的就出现这个问题,一直找不到解决方法。官方的和启贝的开发板倒是没这 ...

你好,我的firefly出现了invalid argument的问题。请问有办法解决吗
作者: nishiwpo    时间: 2019-10-16 16:06

-->init runtime environment
unable to stop the stream :Invalid argument
这个是怎么回事,运行图片预测没有问题。运行摄像头就出现了这个。
作者: yantaixu0120    时间: 2019-10-24 16:41
hisping 发表于 2019-3-1 09:17
是的,yolov3-608耗时比较长,在移动设备端还是建议使用tiny-yolov3对视频进行检查。你可以使用tiny-yolo ...

博主你好,请问你们在这款开发板上运行YOLO v3,检测帧率能够达到多少啊 ,能够将tensorflow版本的YOLO v3模型进行转换然后部署在这款开发版上面么
作者: hisping    时间: 2019-10-25 08:45
yantaixu0120 发表于 2019-10-24 16:41
博主你好,请问你们在这款开发板上运行YOLO v3,检测帧率能够达到多少啊 ,能够将tensorflow版本的YOLO v3 ...

rk3399pro上跑yolov3-608 3帧,yolov3-416 7帧, yolov3-320  13帧左右, 若是你觉得速度不够可以再加rk1808个计算棒,两个NPU同时跑速度翻倍
作者: yantaixu0120    时间: 2019-10-29 14:49
hisping 发表于 2019-10-25 08:45
rk3399pro上跑yolov3-608 3帧,yolov3-416 7帧, yolov3-320  13帧左右, 若是你觉得速度不够可以再加rk180 ...

哦哦,好的,谢谢了!!!
作者: yantaixu0120    时间: 2019-10-29 14:50
hisping 发表于 2019-10-25 08:45
rk3399pro上跑yolov3-608 3帧,yolov3-416 7帧, yolov3-320  13帧左右, 若是你觉得速度不够可以再加rk180 ...

再问问,如果跑yolov3 tiny版本呢,各自的速度又可以达到多少呢,谢谢
作者: hisping    时间: 2019-10-30 14:51
yantaixu0120 发表于 2019-10-29 14:50
再问问,如果跑yolov3 tiny版本呢,各自的速度又可以达到多少呢,谢谢

yolov3-tiny python可以跑30帧, c可以跑更高,瓶颈在摄像头,npu只耗时6ms左右
作者: 长安夜尽    时间: 2019-10-30 22:34
\AppData\Local\Programs\Python\Python36\lib\site-packages\onnx_tf\common\__init__.py:87: UserWarning: FrontendHandler.get_outputs_names is deprecated. It will be removed in future release.. Use node.outputs instead.
  warnings.warn(message)
--> Loading model

C:\Users\

请问在PC上模拟运行python3 rknn_transform_320x320.py的时候为什么到加载模型(输出--> Loading model)就直接停止运行了?也没有报错
作者: hisping    时间: 2019-10-31 08:58
长安夜尽 发表于 2019-10-30 22:34
\AppData\Local\Programs\Python\Python36\lib\site-packages\onnx_tf\common\__init__.py:87: UserWarning ...

下载了.weigth文件了吗?模型转化要约十几分钟(根据你的电脑性能)耐心等待
作者: 长安夜尽    时间: 2019-10-31 11:02
hisping 发表于 2019-10-31 08:58
下载了.weigth文件了吗?模型转化要约十几分钟(根据你的电脑性能)耐心等待 ...

谢谢。好像是我的运行环境没配置好,后来在docker下运行就成功了。
作者: 18958105257    时间: 2019-11-8 15:28
请教一下,目前的图片尺寸支持320x320,416x416,608x608;  如果需要把图片尺寸改为456x810;请问一下,关于量化的./data/dog_608x608.jpg这个图片应该怎么得到;是缩放成608*810  还是需要裁剪成608*810;  请大神指点,谢谢
作者: 18958105257    时间: 2019-11-8 15:43
请教一下,如果你们官方RK3399PRO板子再配一个TB-RK1808S 棒,请教一下怎么配置;  在TB-RK1808S棒的下载里面只看到需要Ubuntu16.04或者weindows的要求,不知道在RF3399PRO板子上怎么跑,谢谢
作者: hisping    时间: 2019-11-11 08:52
18958105257 发表于 2019-11-8 15:43
请教一下,如果你们官方RK3399PRO板子再配一个TB-RK1808S 棒,请教一下怎么配置;  在TB-RK1808S棒的下载里 ...

wiki有讲解计算棒插在3399pro上哦,
  1. http://t.rock-chips.com/wiki.php?mod=view&pid=28#h1_1
复制代码

作者: qqqqqq    时间: 2019-11-19 13:23
请问我用yolov3训练自己的模型,一个类,416×416,视频格式,一张图需要2秒,但网上的yolov3模型,在板子上很快,这是什么原因呀?

作者: hisping    时间: 2019-12-5 17:20
qqqqqq 发表于 2019-11-19 13:23
请问我用yolov3训练自己的模型,一个类,416×416,视频格式,一张图需要2秒,但网上的yolov3模型,在板子 ...

转模型时是否开启了量化?不开量化会很慢的
作者: 小宁哥    时间: 2019-12-11 10:32
程子 发表于 2019-3-23 09:25

请问这个量化是32转16还是8 呢
作者: 小宁哥    时间: 2019-12-11 10:35
TryYourBest 发表于 2019-6-27 09:42
在跑案例的过程中,运行“python3 rknn_transform.py”时,当进行到“Building model1”时,经过一段时间后 ...

应该是板子内存不足,我也遇到了,然后在pc上转换成功了
作者: w910820618    时间: 2019-12-13 11:11
能不能把源代码公开一下,让大家做一下参考。
作者: 小宁哥    时间: 2019-12-13 17:23
我再1.2.1版本上跑yolov3,模型加载很快能完成,但第一次推理速度极慢,是怎么回事
作者: appleUncle    时间: 2019-12-25 10:22
请问楼主的rknn-toolkit是哪个版本? 我在1.0.0和1.2.1版本上,python3 rknn_transform_320x320.py 出现错误:
--> Loading model
E Catch exception when loading darknet model: ./yolov3_320x320.cfg!
E Traceback (most recent call last):
E   File "rknn/api/rknn_base.py", line 380, in rknn.api.rknn_base.RKNNBase.load_darknet
E   File "rknn/base/RKNNlib/converter/convert_darknet.py", line 471, in rknn.base.RKNNlib.converter.convert_darknet.Converter.load_blobs
E   File "rknn/base/RKNNlib/converter/convert_darknet.py", line 215, in rknn.base.RKNNlib.converter.convert_darknet.Convolution_Blob_Assign.assign
E   File "<__array_function__ internals>", line 6, in reshape
E   File "/home/abc/.local/lib/python3.6/site-packages/numpy/core/fromnumeric.py", line 301, in reshape
E     return _wrapfunc(a, 'reshape', newshape, order=order)
E   File "/home/abc/.local/lib/python3.6/site-packages/numpy/core/fromnumeric.py", line 61, in _wrapfunc
E     return bound(*args, **kwds)
E ValueError: cannot reshape array of size 148814 into shape (256,128,3,3)
done

作者: appleUncle    时间: 2019-12-27 10:29
appleUncle 发表于 2019-12-25 10:22
请问楼主的rknn-toolkit是哪个版本? 我在1.0.0和1.2.1版本上,python3 rknn_transform_320x320.py 出现错 ...

自己解决了,是yolo的wieghts下载不全,重新下载就好了
cd yolov3_demo
wget https://pjreddie.com/media/files/yolov3-tiny.weights
wget https://pjreddie.com/media/files/yolov3.weights
作者: wu_    时间: 2020-1-14 18:01
楼主,我运行tiny没问题,但为什么运行于320,416和608的时候卡在init_runtime之后就显示显示内存超出
作者: double_s    时间: 2020-2-27 18:32
tiny版的和v3版的转换和测试程序一样吗?除了v3版多一个52那层,还有别的地方需要更改吗?为什么跑测试,v3的结果就是正确的,tiny版总有很多重复的框,且框的位置也不准,和原darknet的测试结果不同。。
作者: 呱唧    时间: 2020-4-1 14:13
转换tiny的时候会报以下错误

$ python rknn_transform_tiny.py
--> Loading model
E Catch exception when loading darknet model: ./yolov3-tiny.cfg!
E Traceback (most recent call last):
E   File "rknn/api/rknn_base.py", line 511, in rknn.api.rknn_base.RKNNBase.load_darknet
E   File "rknn/base/RKNNlib/converter/convert_darknet.py", line 685, in rknn.base.RKNNlib.converter.convert_darknet.Converter.load_blobs
E   File "rknn/base/RKNNlib/converter/convert_darknet.py", line 403, in rknn.base.RKNNlib.converter.convert_darknet.Convolution_Blob_Assign.assign
E   File "/home/nationalflag/.local/lib/python3.6/site-packages/numpy/core/fromnumeric.py", line 292, in reshape
E     return _wrapfunc(a, 'reshape', newshape, order=order)
E   File "/home/nationalflag/.local/lib/python3.6/site-packages/numpy/core/fromnumeric.py", line 56, in _wrapfunc
E     return getattr(obj, method)(*args, **kwds)
E ValueError: cannot reshape array of size 3650443 into shape (1024,512,3,3)
done
--> Building model
Traceback (most recent call last):
  File "rknn_transform_tiny.py", line 27, in <module>
    rknn.build(do_quantization=True, dataset='./dataset_416x416.txt')
  File "/home/nationalflag/.local/lib/python3.6/site-packages/rknn/api/rknn.py", line 220, in build
    inputs = self.rknn_base.net.get_input_layers()
AttributeError: 'NoneType' object has no attribute 'get_input_layers'
作者: BBF    时间: 2020-4-3 13:40
本帖最后由 BBF 于 2020-4-3 13:43 编辑

训练的时候loss一直是nan 训练几次IOU也变成了NULL   rate出奇的高
Region 16 Avg IOU: 0.443191, Class: 0.426055, Obj: 0.426348, No Obj: 0.442097, .5R: 0.500000, .75R: 0.000000,  count: 4
Region 23 Avg IOU: -nan, Class: -nan, Obj: -nan, No Obj: 0.522350, .5R: -nan, .75R: -nan,  count: 0
Region 16 Avg IOU: 0.543481, Class: 0.443554, Obj: 0.483441, No Obj: 0.442328, .5R: 0.800000, .75R: 0.000000,  count: 5
Region 23 Avg IOU: -nan, Class: -nan, Obj: -nan, No Obj: 0.521949, .5R: -nan, .75R: -nan,  count: 0

1: 748.069458, 748.069458 avg loss, 0.000000 rate, 457.962847 seconds, 64 images
Loaded: 0.000054 seconds
Region 16 Avg IOU: -nan, Class: -nan, Obj: -nan, No Obj: -nan, .5R: 0.000000, .75R: 0.000000,  count: 6
Region 23 Avg IOU: -nan, Class: -nan, Obj: -nan, No Obj: -nan, .5R: -nan, .75R: -nan,  count: 0
Region 16 Avg IOU: -nan, Class: -nan, Obj: -nan, No Obj: -nan, .5R: 0.000000, .75R: 0.000000,  count: 11
刚开始还会报以下错误
Can't open label file. (This can be normal only if you use MSCOCO): /home/gec/ros/test1_ws/src/obj_detect/src/darknet/train_my_data/train_images/banana_70.txt
Can't open label file. (This can be normal only if you use MSCOCO): /home/gec/ros/test1_ws/src/obj_detect/src/darknet/train_my_data/train_images/apple_81.txt
Can't open label file. (This can be normal only if you use MSCOCO): /home/gec/ros/test1_ws/src/obj_detect/src/darknet/train_my_data/train_images/apple_81.txt
Can't open label file. (This can be normal only if you use MSCOCO):



作者: xiaoranchenwai    时间: 2020-4-9 15:21
你好,在PC上执行python3 rknn_transform_320x320.py会出现
W The RKNN Model generated can not run on simulator when pre_compile is True.
然后在板子上跑程序会出现初始化失败的错误,ret=-6
我在PC上跑python3 rknn_picture_320x320.py也会报错
-->loading model
loading model done
--> Init runtime environment
E Pre compile model can not run on simulator
E Catch exception when init runtime!
E Traceback (most recent call last):
E   File "rknn/api/rknn_base.py", line 988, in rknn.api.rknn_base.RKNNBase.init_runtime
E   File "rknn/api/rknn_runtime.py", line 287, in rknn.api.rknn_runtime.RKNNRuntime.build_graph
E Exception: RKNN init failed. Wrong platform: simulator
Init runtime environment failed





欢迎光临 Toybrick (https://t.rock-chips.com/) Powered by Discuz! X3.3