1. 如何测试Pytorch的安装结果

安装完torch的测试工作往往是看是否能import。查看版本是否匹配的步骤容易被忽略。
这样测试:
1. import torch 2. from IPython.display import Image,clear_output 3. clear_output() 4. print('Setup complete, Using torch %s %s' % (torch.__version__,torch.cuda.get_device_properties(0) if torch.cuda.is_available() else 'CPU'))
输出形如下文:
Setup complete, Using torch 1.8.0 _CudaDeviceProperties(name='GeForce RTX 3090', major=8, minor=6, total_memory=24265MB, multi_processor_count=82)
查看GPU算力
torch.cuda.get_device_capability(0)
查看当前Pytorch支持的GPU算力
torch.cuda.get_arch_list()
CUDA capabilities代表GPU计算能力。正在使用的显卡算力必须和已经安装的Pytorch所支持的算力列表中(这一点不得不吐槽一下Nvidia)。Pytorch和版本要和torchvision的版本匹配。
英伟达GPU算例对应表:CUDA GPU
一种情况:
GPU实际算力不在torch支持范围内,这就需要使用nvcc为GPU指定一个“虚拟算力”。比如,GPU算力是8.6,但是现在官网torch最高支持的算力只到7.5(cuda10.2),这样训练的时候就报错:
RuntimeError: CUDA error: no kernel image is available for execution on the device
怎么解决?
1. 到https://download.pytorch.org/whl/nightly/cu110/torch_nightly.html 下载cu11版本的torch和torchvision(开发版)即可,当然python版本也要对应。服务器会偶尔不稳定,如果下载失败就多试几次,be patient.此法不能解决问题,训练一个epoch结束,调用_assert_has_ops函数的时候就会报运行时错误(关键字:RuntimeError: Couldn't load custom C++ ops.)。
l/nightly/cu110/torch_nightly.html

2. 快速下载pt预训练数据集

用weights/download_weights.sh脚本下载预训练模型时,报错。
下载预训练模型报错
官方release由于服务器在国外,可能无法下载,只能从国内的某些地方(比如CSDN、网盘)下载了。我的百度网盘里存了一份:yolov5s.pt 提取码:jycx。
使用.pt导出网络结构
1. 安装onnx、sympy、mpmath和coremltools。
2. 将.pt转为.onnx:(因为netron对.pt文件支持不是很好,网络显示不全)python3 ./models/export.py --weightsyolov5s.pt
注意:
1)这一步torch与torchvision的版本要匹配。我的是torch1.7.1+torchvision0.8.2
2).pt权重文件必须正确。否则会报“torch.nn.modules.module.ModuleAttributeError: 'Detect' object has no attribute 'm'”错误
.onnx的保存路径与使用的.pt权重文件在同一目录。
3. 打开netron导入.onnx查看网络结构。可导出为.png或.svg。

3. 数据集测试

3.1 已有
预训练模型测试
python3detect.py--weightsweights/yolov5s.pt--conf0.25--source./data/images/bus.jpg--device'cpu'
检测结果1
检测结果2
COCO val2017数据集测试
coco val2017共5000张图片,700多M。coco val2017下载。yolov5x下载链接。
python test.py --weights weights/yolov5x.pt --data data/coco.yaml --img 640 --iou 0.65
测试结果:
coco val测试结果
COCO test-dev2017数据集测试
coco2017数据集40000张图片,大小将近7G。coco2017下载链接。test2017文件夹放在/coco/image下,然后将/coco 放在与yolo v5同级目录。coco.yaml里面的路径要写对。
pythontest.py--weightsweights/yolov5s.pt--datacoco.yaml--tasktest--conf0.25--device0
coco128训练
下载coco128数据集:coco128.zip。解压到与train.py的上一级目录。
训练
pythontrain.py--img640--batch16--epochs3--datacoco128.yaml--weightsyolov5s.pt--nosave--cache
同时打开tensorboard可视化工具,查看动态指标曲线
tensorboard --logdir runs/train #存在这种情况:#通过ssh连接(不管是xshell还是MobaXterm)远程服务器训练得到模型,#由于此时没有图形界面,浏览器无法调出,tensorboard可视化结果就必须在本地查看。#有两种方法,一种是将训练文件拷贝到本地,使用本地tensorboard查看;另一种是远程查看。
其中的wandb是一个存储训练结果的线上数据库,yolov5新引进。
pip install -q wandb wandb login
使用github账户关联就行。网站会生成一个API Key,粘贴过来,训练结果就会同步上去。
因为每次都要输入wandb的选项,想禁用掉这个功能。
如何禁用wandb?暂时没有找到简便方法,无奈这个功能和之前代码的耦合度太高,只能用笨办法从逻辑上注释掉与wandb相关的部分。
coco数据集测试完毕。

YOLO不完全概述

YOLO与SSD同属于one-stage方法,其相对于诸如RCNN之类的two-stage的优势是处理速度快,做工程的都懂。
YOLO演变史

提出时间进化点性能(COCO)备注
YOLO v12015
YOLO v22016引入 anchor
DarkNet19
YOLO v32018多尺度特征图
Darknet53
YOLO v4