在这里感谢各个大佬的参考文献及资料。在我学习深度学习的过程中,我参考了如下网站:
Win10+PyTorch+YOLOv5 目标检测模型的训练与识别 | | 洛城风起
YOLOv5 COCO数据集 训练 | 【YOLOv5 训练】_墨理学AI的博客-CSDN博客_yolov5训练coco数据集
准备工作
系统环境:win10
cuda 版本:11.3
Cuda环境配置
在cuda官网中下载11.3版本,根据提示完成安装后在系统环境中如下配置:
cuda系统环境配置
其中,变量值是cuda的安装包位置(../v11_3)。
此外,需要在系统变量Path中添加如下变量:
Path环境变量配置
其中,路径位置为cuda安装包下的bin、libnvvp、extras\CUPTI\lib64、cuda\bin。
cudnn版本:8.2
其中cuda与cudnn版本需要对应。
yolov5下载
已经检测运行的Yolov5算法下载链接:链接:https://pan.baidu.com/s/1NFimV3SmieM5A2BLyV_HAg
提取码:fwec
通过pycharm打开项目进入yolov5-master
在控制台中输入如下指令下载torch+torchvision库,其中torch版本要与cuda版本对应
具体可参考Previous PyTorch Versions | PyTorch
pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113
安装完之后测试是否安装成功可运行以下代码
import torch
print(torch.__version__)#torch版本号
flag = torch.cuda.is_available() #cuda是否可以使用
print(flag)
ngpu= 1
device = torch.device("cuda:0" if (torch.cuda.is_available() and ngpu > 0) else "cpu")
print(device)
print(torch.cuda.get_device_name(0))#gpu设备参数
若有如下输出则说明能使用gpu进行训练
若出现false,则说明torch版本号与cuda不匹配。
训练
coco训练集
yolov5提供了coco训练集的相关文件,找到data/coco.yaml可以看到其提供了coco的训练路径和下载链接,此时我们需要把download相关的代码注释或删除。(直接用代码下载会异常的卡)
下载coco训练集
链接:https://pan.baidu.com/s/106UjHhV0Zh6hFcHJh1TgVQ
提取码:grgd
coco2017训练集包含了10万张照片近18G数据。
将下载好的coco数据集放置如下目录:
# ├── yolov5
# └── datasets
# └── coco ← downloads here
在coco文件夹中新建images文件夹分别将图片中的train2017和val2017放入images文件中
images文件夹下
labels标签需要将json格式的标签转为.txt格式,我已将转换完的标签传入网盘:链接:https://pan.baidu.com/s/1PV07i7pmKrGrCfDAwtWyhg
提取码:cdsf
将labels.zip文件解压到coco文件夹下
并下载train2017.txt和val2017.txt文件放置于coco文件夹下
链接:https://pan.baidu.com/s/1FjUH1OuiWm8CCtdTQIM-XQ
提取码:efeg
至此,coco数据集准备工作做完了。
接下来修改coco.yaml代码,将路径改为coco数据集路径
path: ../datasets/coco # dataset root dir
train: train2017.txt # train images (relative to 'path') 118287 images
val: val2017.txt # train images (relative to 'path') 5000 images
开始训练
在控制台输入以下代码
python train.py -–img 640 -–batch 4 --epoch 300 --data coco.yaml –-cfg ./models/yolov5s.yaml –-weights weights/yolov5s.pt –-workers 0
其中,epoch代表训练次数,在yolov5中,以300次为宜。
--data即为数据集配置文件。
--cfg 为预训练模型配置文件。
--weights 为预训练模型。(上述2项可忽略,但是会增加训练时间、减少训练收敛速度)
如果进行如下操作,则说明已经开始训练,耐心等待即可。(coco训练集所需要的时间极长,所以推荐接下来的coco128训练集)
coco128训练集
同样的,下载coco128训练集
链接:https://pan.baidu.com/s/1XEbn0IyVx8WSCQ7-epk2eQ
提取码:wqer
此时下载的coco128可直接解压到pycharmProject\object_detection\datasets文件中
然后,打开项目中的coco128.yaml配置文件修改path路径
path: ../datasets/coco128 # dataset root dir
train: images/train2017 # train images (relative to 'path') 128 images
val: images/train2017 # val images (relative to 'path') 128 images
同样的,注释或删除掉download段代码。
开始训练
在控制台输入如下代码(仅修改了data项)
python train.py -–img 640 -–batch 4 -–epoch 300 -–data coco128.yaml –-cfg ./models/yolov5s.yaml –-weights weights/yolov5s.pt –-workers 0
自定义训练集训练
1.打开myvoc.yaml
nc为要训练的物体种类数量。
name后为物体的种类名。
接下来将自己的数据集图片放置VOCData\images中,将标注的.txt文件放入labels文件中。(如果不知道如何标注,可以百度labelimg使用)
2.修改 txt2yolo_label.py 修改成为你的标签分类
3.修改 models\yolov5s.yaml 修改成为你的标签分类数
4.控制台运行代码处理标签数据
python .\split.py
python .\txt2yolo_label.py
开始训练
python train.py –img 640 –batch 4 –epoch 300 –data ./data/myvoc.yaml –cfg ./models/yolov5s.yaml –weights weights/yolov5s.pt –workers 0
其中对yolov5s或者yolov5m的选择可以视情况而定。s偏向于更快速的识别,m偏向于更准确的识别。
最后通过训练集训练的模型在runs\train\exp中输出。
测试
在test文件夹下放入想要测试的图片。控制台输入如下代码
python detect.py –-source ./test –-weights runs/train/exp/weights/best.pt --img 640 --conf 0.5
测试完后在runs\detect\exp文件夹下可以看到输出图片
即代表模型以及训练出效果了。
Android端移植
1.首先要做的是将模型转码为.ptl文件,打开export.py文件,找到如下代码并修改
try:
print(f'\n{prefix} starting export with torch {torch.__version__}...')
#f = file.with_suffix('.torchscript.pt')
fl = file.with_suffix('.torchscript.ptl')
ts = torch.jit.trace(model, im, strict=False)
#(optimize_for_mobile(ts) if optimize else ts).save(f)
(optimize_for_mobile(ts) if optimize else ts)._save_for_lite_interpreter(str(fl))
#print(f'{prefix} export success, saved as {f} ({file_size(f):.1f} MB)')
print(f'{prefix} export success, saved as {fl} ({file_size(fl):.1f} MB)')
except Exception as e:
print(f'{prefix} export failure: {e}')
然后在控制台输入
python export.py --weights runs/train/exp/weights/best.pt --include torchscript
得到如下文件
下载torch移动端物体检测官方demo
https://github.com/pytorch/android-demo-app
我们需要的是android-demo-app/ObjectDetection/目录下的app
将.ptl文件放入ObjectDetection\app\src\main\assets目录下
使用android studio打开ObjectDetection,耐心等待gradle sync(这里可能会出现一系列问题,就不一一罗列了)
加载完后,打开MainActivity.java,修改代码
将其改为自己的模型,下面的.txt文件为模型的物体种类,默认是classes.txt,部分截图
若是自己的训练集训练的模型,则还需修改PrePostProcessor.java中的
private static int mOutputColumn = 85; // 识别的类别数+5
其中mThreshold变量为最小显示的置信率,本课题设置为30%,过低会导致过度识别,过高则会导致app不显示识别框。
demo提供了已有图片检测、选取图片检测以及实时图片检测。
最后,生成.apk安装包在手机中安装使用。下图为实时物体检测实操效果。
文章来源:https://www.toymoban.com/news/detail-410254.html
最后,感谢各位大佬的付出,这也是我人工智能领域的第一次实践。特以此文章记录,并给以后想学习的各位参考。入门的过程中可能会出现很多困难,但是世上无难事,只怕有心人。文章来源地址https://www.toymoban.com/news/detail-410254.html
到了这里,关于Yolov5+win10+pytorch+android studio实现安卓实时物体检测实战(coco128/coco/自己的训练集)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!