Yolov5+win10+pytorch+android studio实现安卓实时物体检测实战(coco128/coco/自己的训练集)

在这里感谢各个大佬的参考文献及资料。在我学习深度学习的过程中,我参考了如下网站:

Win10+PyTorch+YOLOv5 目标检测模型的训练与识别 | | 洛城风起

YOLOv5 COCO数据集 训练 | 【YOLOv5 训练】_墨理学AI的博客-CSDN博客_yolov5训练coco数据集

准备工作

系统环境:win10

cuda 版本:11.3

Cuda环境配置

在cuda官网中下载11.3版本,根据提示完成安装后在系统环境中如下配置:

Yolov5+win10+pytorch+android studio实现安卓实时物体检测实战(coco128/coco/自己的训练集)_第1张图片

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进行训练

Yolov5+win10+pytorch+android studio实现安卓实时物体检测实战(coco128/coco/自己的训练集)_第2张图片

 若出现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文件中

Yolov5+win10+pytorch+android studio实现安卓实时物体检测实战(coco128/coco/自己的训练集)_第3张图片

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后为物体的种类名。

Yolov5+win10+pytorch+android studio实现安卓实时物体检测实战(coco128/coco/自己的训练集)_第4张图片

接下来将自己的数据集图片放置VOCData\images中,将标注的.txt文件放入labels文件中。(如果不知道如何标注,可以百度labelimg使用)

2.修改 txt2yolo_label.py 修改成为你的标签分类

 Yolov5+win10+pytorch+android studio实现安卓实时物体检测实战(coco128/coco/自己的训练集)_第5张图片

 3.修改 models\yolov5s.yaml 修改成为你的标签分类数

Yolov5+win10+pytorch+android studio实现安卓实时物体检测实战(coco128/coco/自己的训练集)_第6张图片

 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文件夹下可以看到输出图片

Yolov5+win10+pytorch+android studio实现安卓实时物体检测实战(coco128/coco/自己的训练集)_第7张图片

即代表模型以及训练出效果了。

Android端移植

1.首先要做的是将模型转码为.ptl文件,打开export.py文件,找到如下代码并修改

Yolov5+win10+pytorch+android studio实现安卓实时物体检测实战(coco128/coco/自己的训练集)_第8张图片

    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,部分截图

Yolov5+win10+pytorch+android studio实现安卓实时物体检测实战(coco128/coco/自己的训练集)_第9张图片

 若是自己的训练集训练的模型,则还需修改PrePostProcessor.java中的

private static int mOutputColumn = 85; // 识别的类别数+5

其中mThreshold变量为最小显示的置信率,本课题设置为30%,过低会导致过度识别,过高则会导致app不显示识别框。

demo提供了已有图片检测、选取图片检测以及实时图片检测。

最后,生成.apk安装包在手机中安装使用。下图为实时物体检测实操效果。

Yolov5+win10+pytorch+android studio实现安卓实时物体检测实战(coco128/coco/自己的训练集)_第10张图片

 最后,感谢各位大佬的付出,这也是我人工智能领域的第一次实践。特以此文章记录,并给以后想学习的各位参考。入门的过程中可能会出现很多困难,但是世上无难事,只怕有心人。

你可能感兴趣的:(python,算法,android,pycharm,pytorch)