yolov5和yolov2目标检测算法的训练和学习(hi3516)

当时要开发一个功能就是实现人数监测。之前一直没时间把本地的笔记上传进行学习记录,今天梳理的同时做一下csdn上的同步。由于我自己也是小白所以也是摸索进行开发,如果有什么建议记得在评论区留言。

工具:电脑、github、hi3516dv300。

目录

yolo目标检测网络的学习

工作操作:

W1:安装YOLOv5-------测试模型(跑detect.py)

步骤1:

步骤2:

步骤3:

W2:创建文件目录

W3:数据集

方法一:

1.VOC人体数据集

2.COCO数据集

3.MPII数据集

方法二:

1、下载 官网数据集下载

2、转化为 coco 数据集格式

2.2方法二:

W4:配置文件修改[1]

步骤一:修改配置文件

1.coco128.yaml->Pedestrian_detection.yaml

步骤二:yolov5x.yaml->person_model.yaml

W5: 开始训练train[1]

!!W5任务中断!!

【云端部署】使用恒源云oss上传+jupyterLab+filezillia本地下载

W6:train参数修改[1]

W6:识别检测detect.py[1]

W7:模型转换

!!!w7任务终止!!!

1.下载

2.基础测试+了解Darknet的推理:

2.1使用make编译

2.2使用预先训练模型测试

2.3运行命令检测

3.Darknet模型转caffe方案

3.1 放置yolov3.weights模型文件

3.2 darknet模型转换为caffe模型。

4.模型量化(转wk)

4.1删掉yolov3.prototxt里最后一个layer{}

4.2操作

5.部署

5.1编译

5.2 wk模型部署

开发问题

Q1:cpu+train,pycharm闪退

Q2:gpu+train.py,pycharm报错cuda不可用

Q3:安装torch中始终使用的是cpu版本的torch-没有办法使用GPU运行代码

解决办法:

1.看看torch、cuda、cudnn之间版本是否匹配

Q4:[Errno 13] Permission denied: '.'

Q5:[云服务器训练]Arial.ttf

Q6:换源

Q7:代理

Q8:Linux “make“ command Error 127

Q9:映射磁盘不可用

文献

致谢


yolo目标检测网络的学习

yolo网络学习博客:https://zhuanlan.zhihu.com/p/639276656?utm_id=0

术语学习:https://zhuanlan.zhihu.com/p/603815281?utm_id=0

版权声明:下文数据集为CSDN博主「AI吃大瓜」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:人脸检测和人体检测(行人检测)1:人脸检测和人体检测数据集(含下载链接)_人体数据集-CSDN博客

工作操作:

W1:安装YOLOv5-------测试模型(跑detect.py)

yolov5学习文章:【Yolov5】1.认真总结6000字Yolov5保姆级教程(2022.06.28全新版本v6.1)_yolov5教程-CSDN博客

步骤1:

克隆仓库,进行下载:GitCode - 全球开发者的开源社区,开源代码托管平台

步骤2:

pycharm打开,按照要求我这里选择配置python3.10的解释器。

根据requirements.txt文件配置环境。

pip install -r requirements.txt  

或者

步骤3:

测试运行detect.py:右键编译运行。

测试成功。

W2:创建文件目录

在W1安装的YOLOV5下创建文件Pedestrian_and_face_detection

Pedestrian_and_face_detection

|----Pedestrian_detection.yaml //数据集参数文件

|----person_model.yaml //训练模型配置文件

|----datasets // 数据集

|----images //数据集图片

|----train //训练模型时使用的图片,跑train.py时使用的

|----test //使用模型进行检测时的图片跑detect.py时使用的

|----labels

|----train //训练模型时使用图片的标注文本(.txt文件),跑train.py时使用的

接下来我们先完成数据集部分,也就是datasets里的内容。

W3:数据集

这里我使用的是方法二的数据集crowhuman。

方法一:

人体检测数据集包含:VOC人体数据集+COCO人体数据集+MPII人体数据集

对这三个数据集进行裁剪合并来训练模型也是可以的,也就是挑选出自己需要的标注的txt数据和对应的jpg文件。因为这些数据集里还含有车、椅子这些非项目需要干扰项图片以及对应的txt标注数据。

1.VOC人体数据集

下载地址:The PASCAL Visual Object Classes Homepage

VOC2007:共9963张图片
VOC2012:共17125张图片
已经标注了人脸框(face)和人体框(person)
可直接用于深度学习人体检测模型训练
提取VOC数据集中person标签的数据。
"aeroplane",
"bicycle", 
"bird", 
"boat", 
"bottle", 
"bus", 
"car", 
"cat",
"chair", 
"cow", 
"diningtable", 
"dog", 
"horse", 
"motorbike", 
"person", 
"pottedplant", 
"sheep", 
"sofa", 
"train", 
"tvmonitor"
2.COCO数据集
COCO数据集是一个可用于图像检测(image detection),语义分割(semantic segmentation)和图像标题生成(image captioning)的大规模数据集。它有超过330K张图像(其中220K张是有标注的图像),包含150万个目标,80个目标类别(object categories:行人、汽车、大象等),91种材料类别(stuff categoris:草、墙、天空等),每张图像包含五句图像的语句描述,且有250,000个带关键点标注的行人

下载地址:COCO - Common Objects in Context 关于COCO数据集格式说明:COCO数据格式说明_coco iscrowd-CSDN博客

总共66697张含有人体的图片
已经将COCO数据集转换为VOC数据格式,可直接用于深度学习人体检测模型训练
已经标注了人脸框(face)和人体框(person)
如果你需要原始COCO的数据集,请到官网https://cocodataset.org/ 下载
'background', 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train','truck', 'boat', 'traffic light', 'fire hydrant', 'stop sign',
'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep',
'cow', 'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella',
'handbag', 'tie', 'suitcase', 'frisbee', 'skis', 'snowboard', 'sports ball','kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard', 'tennis racket','bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana',
'apple', 'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza',
'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed', 'dining table', 'toilet','tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone', 'microwave','oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear', 'hair drier', 'toothbrush'
​
3.MPII数据集
MPII 人体姿势数据集是用于评估铰接式人体姿势估计的最先进基准。该数据集包括大约 25,000 张图像,其中包含超过40,000 个人的身体关节注释。这些图像是使用日常人类活动的既定分类法系统地收集的。总体而言,该数据集涵盖了 410 种人类活动,并且每张图像都带有一个活动标签。每张图片都是从 YouTube 视频中提取的,并提供了前后未注释的帧
​

下载地址:MPII Human Pose Database

MPII数据集原本是2D-Pose人体关键点检测(人体姿势数据集),稍微处理即可获得person的人体检测数据集。

方法二:

CrowdHuman 数据集

标注结果是 0 是 “head”, 1是 “person”.
版权声明:本文为CSDN博主「一泛式」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。参考文章的原文链接: https://blog.csdn.net/To_be_little/article/details/134027753
1、下载 官网数据集下载

CrowdHuman dataset下载链接:CrowdHuman Dataset 把里面链接都进行下载。

2、转化为 coco 数据集格式

这里我采用方法一。

2.1 方法一:

参照这篇文章下载zip转换成YOLOV5的格式:https://codeleading.com/article/76825464488/

./prepare_data.sh 608x608

运行过程截图:

运行结束截图:

这样,我们就获得了图片解压文件:

运行结束截图:

可视化检测

cd CrowHuman2YOLO/data
​
python verify_txts.py 608x608  //将txt绘制到图片上进行检测是否标注正确

检测无误后将文件crowdhuman-608x608里的txt文件和jpg文件分离存储。然后将txt存储在datasets/labels/train下;jpg存储在datasets/imges/train下;

2.2方法二:

可以根据下面仓库的步骤进行 : https://github.com/Shaohu-Li/YOLOv5-Tools

![image-20240122224251395](C:\Users\86134\AppData\Roaming\Typora\typora-user-images\image-20240122224251395.png)

在W3我们已经完成了目录里的datasets部分。接下来我们继续完善目录内容——下面这两个配置文件:

|----Pedestrian_detection.yaml       //数据集参数配置文件

|----person_model.yaml      //训练模型配置文件

W4:配置文件修改[1]
步骤一:修改配置文件
1.coco128.yaml->Pedestrian_detection.yaml

在yolov5/data/coco128.yaml中先复制一份,粘贴到Pedestrian_and_face_detection中,改名为Pedestrian_detection.yaml(行人检测的数据集参数配置)

Pedestrian_detection.yaml文件需要修改的参数是nc与names。nc是标签名个数,names就是标签的名字。

crowhuman的标签:0 是 “head”, 1是 “person”.

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../yolov5/PedestrianDetection/datasets/  # dataset root dir
train: images/train  # train images (relative to 'path') 128 images
val: images/train  # val images (relative to 'path') 128 images
test:  # test images (optional)
​
nc: 2  # number of classes
# Classes
names:
  0: head
  1: person
步骤二:yolov5x.yaml->person_model.yaml

yolov5有4种配置,不同配置的特性如下,这里选择yolov5x,效果较好,但是训练时间长,也比较吃显存。

yolov5/models先复制一份yolov5x.yaml至Pedestrian_and_face_detection,更名为person_model.yaml(意为模型),只将如下的nc修改为训练集种类即可,其他的不用变。

W5: 开始训练train[1]

请先跳转看看W5任务中断!!!

在train.py,找到def parse_opt(known=False)这行,这下面是我们要修改的程序部分

445行:是我们训练的初始权重的位置,是以.pt结尾的文件,第一次训练用别人已经训练出来的权重。可能有朋友会想,自己训练的数据集和别人训练的数据集不一样,怎么能通用呢?实际上他们是通用的,后面训练会调整过来。而如果不填已有权重,那么训练效果可能会不好;

446行:训练模型文件,在本项目中对应person_model.yaml

447行:数据集参数文件,在本项目中对于Pedestrian_detection.yaml

448行:超参数设置,是人为设定的参数。包括学习率啥的等等,可不改;

449行:训练轮数,决定了训练时间与训练效果。如果选择训练模型是yolov5x.yaml,稳定(收敛)轮次约200轮+,根据各自数据集进行调整,影响因素涉及batch-size,batch-size越大收敛越快,训练轮次则是可以减少,来达到节约时间的目的;

450行:批量处理文件数这个决定了我们训练的速度;batch-size越大收敛越快,坏处是很容易造成cuda of memory;越小泛化能力越好,但是收敛速度很慢,训练次数要增加达到收敛。

451行:图片大小,虽然我们训练集的图片是已经固定下来了,但是传入神经网络时可以resize大小,太大了训练时间会很长,且有可能报错,这个根据自己情况调小一些;

453行:断续训练,如果说在训练过程中意外地中断,那么下一次可以在这里填True,会接着上一次runs/exp继续训练

462行:GPU加速,填0是系统默认的CUDA(通过nvidia-smi查看),前提是电脑已经安装了CUDA才能GPU加速训练(有关gpu加速训练请看下面的开发问题Q1和Q2。),安装过程可查博客。

467行:多线程设置,越大读取数据越快,影响cpu读取数据和gpu处理数据。但是太大了也不好,可能导致读取的数据gpu一下就处理完了,因此也要根据自己状况设置,建议是2,8,16这些取值开始尝试。

运行结果

运行效果正确的应该是这个样子:

结果保存在runs/train/exp中,多次训练就会有exp1、exp2、等等

best.pt和last.pt是我们训练出来的权重文件,比较重要,用于detect.py。last是最后一次的训练结果,best是效果最好的训练结果(只是看起来,但是泛化性不一定强)。

!!W5任务中断!!

在修改train.py时,首先将device改为0(使用gpu)训练,发现我的电脑配置太垃,跑不起来,接下来打算在云服务器进行训练。

配置太垃圾:因为在我已经配置那些图片大小、--batch-size、训练轮次等都修改成最小后,仍然出现我的图片加载到cpu时,内存就差不多满了,gpu都没来得及运行多少就结束代码运行了。(可能我解释的不好,并且上我自己对于深度学习这方面知识浅薄,也无法说出如何判断自己配置行不行)而cpu运行也不行,会闪退,我推测原因和上面也是一样的。

如果电脑配置OK请跳回W5。

【云端部署】使用恒源云oss上传+jupyterLab+filezillia本地下载

不得不说,花钱的云部署果然是比本地部署好多了,不需要自己去考虑一大堆配置关系(cuda、python、torch等关系)

oss上传-->创建实例(pytorch2.2.0+cuda11.8+python3.8的镜像配置)-->打开实例通过jupyterlab进行管理(将代码从个人存储空间下到实例的hp-tmp里)

因为恒源云的文档都写的比较清楚了,我这里就不再过多介绍,直接进入下面链接到“快速入门”处,跟着操作就好了。

oss上传:快速开始 - 恒源云用户文档 (gpushare.com)

创建实例:快速开始 - 恒源云用户文档 (gpushare.com)

下载jupyter:

pip install jupyterlab

在jupyter:

下载7z

# 解压 zip 或 rar 推荐使用 7z 命令,使用 apt 安装
~# apt-get update
~# apt-get install p7zip-full -y

解压:

~# 7z x compress.zip -o/hy-nas

再配置一下环境

pip install -r requirements.txt

fillzillia

下载地址:数据下载 - 恒源云用户文档 (gpushare.com)

ssh -p 45295 root@i-1.gpushare.com
Ygbk6cX76aDvpswH88tbtEDQcUVmq64H
​
实例SSH主机名:i-1.gpushare.com
实例SSH端口号:45295
实例用户名:root
实例密码:Ygbk6cX76aDvpswH88tbtEDQcUVmq64H

参考网络文章---------------------------------------------------------------------------------------------------------

快速开始 - 恒源云用户文档 (gpushare.com)

JupyterLab的安装及使用Python虚拟环境 - 知乎 (zhihu.com)

YOLOv7使用云GPU训练自己的数据集:YOLOv7使用云GPU训练自己的数据集_yolov7代码百度云-CSDN博客

使用云GPU进行yolov5的训练--傻瓜式保姆级教程!!!建议收藏✨✨!_服务器训练yolov5教程-CSDN博客

在云端GPU训练yolov5详细步骤_yolov5云端训练和电脑端gpu训练结果一样吗-CSDN博客

关于yolov5训练时参数workers和batch-size的理解:关于yolov5训练时参数workers和batch-size的理解_yolo训练时的workers-CSDN博客

yolov5训练过程中相关问题:yolov5训练过程中相关问题_训练数据集remote end closed connection without response-CSDN博客

W6:train参数修改[1]

深度学习到底需要迭代10次还是100次?不能仅看验证效果 - 知乎 (zhihu.com)

关于yolov5训练时参数workers和batch-size的理解_yolo训练时的workers-CSDN博客

batchsize太小的缺点&随着batchsize逐渐增大的优缺点&如何平衡batchsize的大小_batchsize太小会怎样-CSDN博客

batch-size越大收敛越快,坏处是很容易造成cuda of memory;越小泛化能力越好,但是收敛速度很慢,训练次数要增加达到收敛。

workers:多线程处理,影响cpu读取数据和gpu处理数据

只能说多调试吧,多看看显存利用率、gpu利用率、cpu利用率、epoch一次的时间。

cpu分析

top -d 更新秒数 //eg:top -d 3

Linux 的 top命令参数详解 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND-CSDN博客

gpu:

gpu查看

watch -n 0 nvidia-smi

最后的最后,经过一天的调参,我最终确定下来我的参数。

W6:识别检测detect.py[1]

调参 找到def parse_opt():这行,以下是我们要调参的位置

244行:填我们训练好的权重文件路径

245行:我们要检测的文件,可以是图片、视频、摄像头。填0时为打开电脑默认摄像头

246行:数据集参数文件,同上

247行:图片大小,同上

224行:GPU加速,同上

2.结果 结果在runs/detect/exp中

————————————————

参考文章

版权声明:本文为CSDN博主「若oo尘」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:【Yolov5】1.认真总结6000字Yolov5保姆级教程(2022.06.28全新版本v6.1)_yolov5教程-CSDN博客

W7:模型转换

pt-->onn--->caffe--->wk

问题:在获得.pt文件后,使用export.py对onn模型转换caffe模型时出问题

猜测bug:

1.转pt时出现问题

-网上有使用yolov5s.pt转换caffe成功的,尝试了一下,发现要修改yaml。修改过后发现,本地内存不够,尝试使用移动硬盘里的虚拟机来部署yolov5然后vscode通过ssh远程修改代码。

1.1下载anconda

http://t.csdnimg.cn/fV3DU

1.2.显卡配置

不知道为什么虚拟机上检测不到显卡,可能因为我是用虚拟机不是实体机,又或者是因为我的虚拟机因为空间不足没有安装到我的电脑里而是放在外置移动硬盘的可能检测不到,en...为什么不放,当然是因为没内存了啊。

1.3.yolov5虚拟机配置

pip install -U -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

1.4 修改yaml

# YOLOv5 🚀 by Ultralytics, AGPL-3.0 license
# Parameters
nc: 80  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple
#anchors:
#  - [10,13, 16,30, 33,23]  # P3/8
#  - [30,61, 62,45, 59,119]  # P4/16
#  - [116,90, 156,198, 373,326]  # P5/32
anchors:
  - [48,56, 55,146, 129,94]  # P3/8
  - [126,221, 80,364, 233,145]  # P4/16
  - [182,433, 349,259, 396,499]  # P5/32
# YOLOv5 backbone
backbone:
  # [from, number, module, args]
#  [[-1, 1, Focus, [64, 3]],  # 0-P1/2
   [[-1, 1, Conv, [64, 3, 2]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, C3, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 9, C3, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, C3, [512]],
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 1, SPP, [1024, [5, 9, 13]]],
   [-1, 3, C3, [1024, False]],  # 9
  ]
# YOLOv5 head
head:
  [[-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
#   [-1, 1, nn.ConvTranspose2d, [256, 256, 2, 2]],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, C3, [512, False]],  # 13
   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
#   [-1, 1, nn.ConvTranspose2d, [128, 128, 2, 2]],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, C3, [256, False]],  # 17 (P3/8-small)
   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 14], 1, Concat, [1]],  # cat head P4
   [-1, 3, C3, [512, False]],  # 20 (P4/16-medium)
   [-1, 1, Conv, [512, 3, 2]],
   [[-1, 10], 1, Concat, [1]],  # cat head P5
   [-1, 3, C3, [1024, False]],  # 23 (P5/32-large)
   [[17, 20, 23], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

在转模型时依旧报错

'/model.13/cv1/conv/Conv'

2.【不可行】使用export.py转出来的onnx模型层结构不对应要转的caffe模型

-网上说“yolov5s转onnx的时候最好不要转后处理的部分,转caffe确实会有些问题。但是重点是能查到的解决方案里没有找到告诉你怎么转能去掉后处理的!大部分都是说加上参数 --train。但是新版本的yolov5(6.2+)是没有–train这个参数的!”

training=torch.onnx.TrainingMode.TRAINING

在原有的基础上对export.py进行了上面的修改,发现还是出现以下报错:

'/model.13/cv1/conv/Conv'

3.尝试使用.pt转onn转caffe(version=9)【无果】

ONNXToCaffe/model_generator at master · xxradon/ONNXToCaffe (github.com)

4.【无果】

yolov5转hisi的nnie(c and c++)_yolov5转nnie-CSDN博客

!!!w7任务终止!!!

yolov5任务结束,其原因是请教了学长,学长说再继续下去很有可能会因为海思3516DV300的算力不支持yolov5而无法流畅运行。

接下来打算用官网说的yolov2(YOLO: Real-Time Object Detection)挂载到海思上看看效果,开始实践。

参考链接:darknet详解(yolo图像检测)-CSDN博客

1.下载

找到Darknet-yolo的代码通过git拉取到ubuntu,再更具需要下载yolo对应的.cfg文件和.weights文件,.cfg放在cfg目录下,.weights文件放在Darkknet根目录下。

2.基础测试+了解Darknet的推理:
2.1使用make编译
make
2.2使用预先训练模型测试

下载预训练权重:

wget https://pjreddie.com/media/files/yolov3.weights
国外服务器下载速度太慢,使用个人保存http://owncloud.hujinwen.com/s/HpvcQSXKjN2UBVo
2.3运行命令检测
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
​
网络摄像头实时检测
如果看不到结果,在测试数据上运行 YOLO 就不是很有趣。我们不是在一堆图像上运行它,而是在网络摄像头的输入上运行它!
要运行此演示,您需要使用 CUDA 和 OpenCV 编译 Darknet。然后运行命令:
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights
您需要将网络摄像头连接到 OpenCV 可以连接的计算机,否则它将无法工作。如果您连接了多个网络摄像头并且想要选择使用哪一个,您可以传递标志-c <num>来选择(OpenCV0默认情况下使用网络摄像头)。

接下来的操作只是为了测试方案可行性(测试yolov3能不能直接通过官方给的转换代码直接转换+部署到hi3516DV300的效果)

3.Darknet模型转caffe方案
3.1 放置yolov3.weights模型文件

将刚下载到windows的yolov3.weights模型文件,通过samba映射的方式上传到你Ubuntu docker的/root/darknet2caffe/目录下

3.2 darknet模型转换为caffe模型。
# 转换命令遵循:
# python cfg[in] weights[in] prototxt[out] caffemodel[out]
# 本文转换命令如下:
python3.8 darknet2caffe.py cfg/yolov3.cfg yolov3.weights yolov3.prototxt yolov3.caffemodel
  • 当转换成功后,会在darknet2caffe目录生成一个yolov3.caffemodel和一个yolov3.prototxt文件.

4.模型量化(转wk)
4.1删掉yolov3.prototxt里最后一个layer{}

(下图是yolov2.protxt的)

4.2操作

这里说一下模型量化imageList.txt制作,理应要从数据集里抽几张有代表性的图片来测试。我这里使用的是yolov3.weights文件所以在这里我使用的图片来自darknet/data的照片(因为是官方用来进行给我们测试推理的效果的,肯定是比较好的,要不然也不会敢放在这里给我们验证,所以我这里挪用这几张来制作imageList.txt。

4.2.1 首先创建一个文件夹2024-3-6-test,将darknet/data的照片放入里面。

4.2.2 然后在该目录下创建txt文本将下面的内容复制进去后,将文件后缀名改成.bat批处理文件。

功能:该目录下的文件的绝对目录写到imagelist.txt里

@echo off
for /r %%i in (*) do (
    echo %%i >> imagelist.txt
)

4.2.3 打开imagelist.txt文件删除除了图片后缀的其他文件的绝对路径。

5.部署
5.1编译

参考5.3 AI视觉实验.md · HiSpark/HiSpark_NICU2023 - Gitee.com

5.2 wk模型部署

wk模型生成之后,需要将生成的wk文件部署到板端。

hitool启动

打开Hi3516-HiTool\HiTool_16d\images\目录下的bootcmd.txt,把里面的命令依次复制,然后粘贴到在开发板的终端的命令行,最后敲回车,让系统运行起来。

setenv bootcmd "mmc read 0x0 0x80000000 0x800 0x4800;bootm 0x80000000;";
setenv bootargs "mem=128M console=ttyAMA0,115200 root=/dev/mmcblk0p3 rw rootfstype=ext4 rootwait blkdevparts=mmcblk0:1M(boot),9M(kernel),100M(rootfs),100M(userfs),2048M(userdata)";
setenv bootdelay 3
saveenv
reset

按下重启按钮,听到滴的一声。

挂载

mount -t vfat /dev/mmcblk1 /mnt

拷贝mnt目录下的文件至正确的目录下

在开发板的终端执行下面的命令,拷贝mnt目录下面的ohos_nnie_demo和data至userdata目录,拷贝mnt目录下面的libvb_server.so和 libmpp_vbs.so至/usr/lib/目录下

cp /mnt/libvb_server.so /usr/lib/
cp /mnt/libmpp_vbs.so /usr/lib/
​
##如果已经拷贝过,就不用拷贝了
cp /mnt/ohos_nnie_demo  /userdata
cp /mnt/data /userdata -rf

在开发板的终端执行下面的命令,给ohos_nnie_demo文件可执行权限

chmod 777 /userdata/ohos_nnie_demo

功能验证

cd /userdata
​
./ohos_nnie_demo 8

很遗憾效果没出来,但是比赛时间快到了,我们经过团队讨论决定先暂停这个功能的开发。

压缩:

Image_Rechange: 批量缩小图片

开发问题

Q1:cpu+train,pycharm闪退

可以尝试用cmd跑train看看问题。我是因为内存太小了。可以用虚拟机跑cpu+train.py,但是考虑到训练时间太久了,还是选择了gpu+train.py

Q2:gpu+train.py,pycharm报错cuda不可用

1.查看自己电脑是否可以使用GPU加速?

想要使用GPU加速,则需要安装cuda,所以首先需要自己的电脑显卡是否支持cuda的安装,也就是查看自己的电脑里面有没有NVIDA的独立显卡,这里再说明一下,AMD的显卡不支持安装cuda来进行加速,具体查看步骤如下:

第一步:开始菜单输入框输入设备管理器,打开设备管理器,找到显示适配器后点击,查看电脑显卡型号

Q3:安装torch中始终使用的是cpu版本的torch-没有办法使用GPU运行代码

针对

import torch
print(torch.__version__)
#显示torch版本号
print(torch.cuda.is_available());
#显示GPU状态:Flase为不能启动

输出

False

解决办法:

1.看看torch、cuda、cudnn之间版本是否匹配

首先在电脑支持gpu加速的关系上,查看显卡驱动的版本号:

nvidia-smi

这里可见我的驱动版本号为12.0,而下载的cuda版本必须比12.0低,这里我挑的是cuda11.8版本。

cuda下载路径:https://developer.nvidia.com/cuda-downloads

由于我是自定义下载,我还需要增加path:

用户变量:

D:\02_02_CUDA_install\v11.8\lib\x64;
D:\02_02_CUDA_install\v11.8\include;
D:\02_02_CUDA_install\v11.8\extras\CUPTI\lib64;

系统变量:

验证:

nvcc -V

下载完cuda,下载cudnn:

根据cudnn和cuda版本关系进行下载:https://developer.nvidia.com/rdp/cudnn-archive

这里我挑的是8.7.0,因为我的cuda版本号为11.8

接下来我们下载torch:

首先把原来的torch卸载了,可以通过

pip uninstall torch //一般来说都是这个就行
pip3 uninstall torch //我自己是要使用这个,原因记不清楚了

根据我的requestment.txt和我的python是3.10,我选择了2.0版本的torch和0.15版本的torchvision。

torch和torchvision下载关系:

在这里我们要注意关于torch和torchvision的下载问题:

【注意1】下载不要用清华园下载,因为它会直接给我们下载cpu版本。

【注意2】在cmd下下载,先cd到项目目录下,再先下载torch再下载torchvision。

以防注意1事件发生,这里我们使用网站里的whl文件进行下载。

操作:

1.打开Start Locally | PyTorch

这里命令行的意思是下载torch、torchvision 、torchaudio这三个包。

我们进入到这个指令后面的网站,找到这三个名字的文件夹,找到我们需要的whl文件。

2.接下来我将讲解怎么样找到我们需要的whl文件:

torch:

torchvision:

直接用这个网址的也是可以的:https://download.pytorch.org/whl/torch_stable.html

torch对应的就是:

torchvision:

将这些whl文件放入工程项目下面。

工程项目下终端下载的指令:

pip install torch-2.0.0+cu118-cp310-cp310-win_amd64.whl
pip install torchvision-0.15.1+cu118-cp310-cp310-win_amd64.whl
//我使用的是pip3,将pip替换成pip3

输入

pip list
//我使用的是pip3,将pip替换成pip3

结果:

这表明gpu可以启动了。

--参考链接:------------------------------------------------------------------------------------------------

关于 以为自己 下载 torch 是GPU版本,结果确实cpu版本 的解决办法_下载的torchgpu版本还是在用cpu跑-CSDN博客

深度学习环境搭建之cuda、cudnn以及pytorch和torchvision的whl文件安装方法_torchvision whl-CSDN博客

win11下安装Cuda和Cudnn(pytorch+GPU环境安装),保姆级教程!!!_win11安装cuda-CSDN博客

Q4:[Errno 13] Permission denied: '.'

报错原因:之前接断点训练/继续训练跑的resume没有关----它就以为你要加载权重,可是你没放权重------所以显示你没有权限。

Q5:[云服务器训练]Arial.ttf

Downloading https://ultralytics.com/assets/Arial.ttf

参考文章:YOLOV5服务器部署启动时卡住:Downloading https://ultralytics.com/assets/Arial.ttf_downloading arial.ttf-CSDN博客

点击下面链接进行下载,并且根据utils/general.py的路径把Arial.ttf放到根目录下,这里我是通过jupyter(仅仅支持小文件上传)上传云服务器。

https://ultralytics.com/assets/

Q6:换源

有时候并不会报超时错误,换源安装也并不一定成功,有源的区别,有的源不支持一些库可以换其他的源。

https://pypi.tuna.tsinghua.edu.cn/simple/

Q7:代理

fatal: 无法访问 ‘https://github.com/openstreetmap/osmosis.git/’:GnuTLS recv error (-110): The TLS connection was non-properly terminated.

apt-get install gnutls-bin
git config --global http.sslVerify false
git config --global http.postBuffer 1048576000

Q8:Linux “make“ command Error 127

sudo apt-get install build-essential

Q9:映射磁盘不可用

1.虚拟机没开启smbd服务

2.像我这种虚拟机安装在外置移动硬盘的,可能是接口接触不良,退出硬盘,拔出插口重新插入。

文献

[1]原文链接:【Yolov5】1.认真总结6000字Yolov5保姆级教程(2022.06.28全新版本v6.1)_yolov5教程-CSDN博客

致谢

长达一个半月的开发,遇到了各种各样的问题,非常感谢给我介绍第一篇yolo保姆博客的学长和该博主,让我初步认识了yolo。后面陆续遇见各种各样的bug多亏网上的博主们的博客,深感敬意。我也深刻的认识到我要学的路还有很长很长,学无止境!感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值