毕业设计:嵌入式平台的目标检测-4
目前进展 之前提到使用yolov5官方代码实现了目标检测,并且使用第三方tensorrt库实现加速推理。
最近有一些科研上的需求,因为yolov5官方代码冗余度太高,于是寻找了yolov5的第三方库,注释非常清晰,可读性非常高,遂决定基于这个库开展接下来的工作。
使用记录 工程参考:https://github.com/bubbliiiing/yolov5-pytorch#%E6%96%87%E4%BB%B6%E4%B8%8B%E8%BD%BD
YOLOv5目标检测主要有训练和预测两个阶段
1.训练:使用到的文件:voc_annotation.py, train.py
用Imglabel制作数据集,最终得到原始图片和xml标签文件
在model_data/ 下添加自己数据集的类别txt文件
使用voc_annotation.py文件生成训练集和验证集txt文件。这个txt是最终用于训练的,可以理解为将图片、标签和类别三个文件集合起来
执行train.py开始训练,当然需要更改一些参数
2.预测:使用到的文件:predict.py, yolo.py
修 ...
Pillow
参考Pillow
简介 PIL( Python Imaging Library)是 Python 的第三方图像处理库,由于其功能丰富,API 简洁易用,因此深受好评。
自 2011 年以来,由于 PIL 库更新缓慢,目前仅支持 Python 2.7 版本,这明显无法满足 Python3 版本的使用需求。于是一群 Python 社区的志愿者(主要贡献者:Alex Clark 和 Contributors)在 PIL 库的基础上开发了一个支持 Python3 版本的图像处理库,它就是 Pillow。
Pillow 不仅是 PIL 库的“复制版”,而且它又在 PIL 库的基础上增加了许多新的特性。Pillow 发展至今,已经成为了比 PIL 更具活力的图像处理库。
Pillow 的初衷只是想作为 PIL 库的分支和补充,如今它已是“青出于蓝而胜于蓝”。
Pillow 是 Python 中较为基础的图像处理库,主要用于图像的基本处理,比如裁剪图像、调整图像大小和图像颜色处理等。与 Pillow 相比,OpenCV 和 Scikit-image 的功能更为丰富,所以使用起来 ...
Opencv-python
Opencv简介图像处理简介Opencv简介及安装方法pip install opencv-python==3.4.1.15 # 无专利,比较推荐的版本pip install opencv-contrib-python==3.4.1.15 # opencv拓展包
python第三方包官网
Opencv模块
基础模块:图像和视频读取模块,内核模块,图像和视频处理模块
高级模块:视频分析模块、2D特征读取模块、机器学习模块、图像拼接模块等等
扩展模块
Opencv基本操作图像基础操作图像的读取、显示、保存:
imread
imshow
imwrite
注:opencv保存的图像其实都是以numpy为基础的,即一个二维数组,如果是BGR图像,则每个元素处都是一个有三个元素的一维数组,分别存储BGR三个值,如果是灰度图,则每个元素处都是一个有一个元素的一维数组,存储灰度值。
绘制几何图形:
line
circle
rectangle
putText
图像像素点的操作:
图像属性:
大小:行数、列数size
形状shape
通道数
数据类型dtype
像素数
图像通道的拆分和合并 ...
python os模块
1. 简介 os就是“operating system”的缩写,顾名思义,os模块提供的就是各种 Python 程序与操作系统进行交互的接口。通过使用os模块,一方面可以方便地与操作系统进行交互,另一方面页可以极大增强代码的可移植性。如果该模块中相关功能出错,会抛出OSError异常或其子类异常。
注意,如果是读写文件的话,建议使用内置函数open();如果是路径相关的操作,建议使用os的子模块os.path;如果要逐行读取多个文件,建议使用fileinput模块;要创建临时文件或路径,建议使用tempfile模块;要进行更高级的文件和路径操作则应当使用shutil模块。
当然,使用os模块可以写出操作系统无关的代码并不意味着os无法调用一些特定系统的扩展功能,但要切记一点:一旦这样做就会极大损害代码的可移植性。
此外,导入os模块时还要小心一点,千万不要为了图调用省事儿而将os模块解包导入,即不要使用from os import *来导入os模块;否则os.open()将会覆盖内置函数open(),从而造成预料之外的错误。
2. 常用功能 注意,os模块中大多数接受路 ...
像素,分辨率,PPI
PT:pt是个物理标量,不管在什么显示设备上其物理尺寸都是一样的。1pt=1/72英寸,1英寸=2.54厘米
Piexl:像素
PPI:pixel per inch,每英寸像素数
DPI:dot per inch,每英寸点数量
Resolution:分辨率
分物理和数字考虑,物理又分输入、显示和输出
物理:物理实体
输入有相机、手机拍照等,对于物理输入,在不影响观感的前提下,PPI越低越好,比如相同像素的相机和手机,相机的CMOS面积远大于手机,每个像素占有的面积更大,每个像素感光效果越好
显示有电脑显示器、手机显示器等,1080P,2K,4K,像素值固定,PPI固定,PPI越大越好,因为单位面积像素数越多,越精细
输出有打印机,一般用DPI衡量,DPI越大,说明打印效果越好
数字:存储在计算机内的一张图像值的张量
根据映射关系,将数字图像映射到实际的显示器上显示。图像像素的裁剪就是对原图下采样,改变图像质量。图片放大就是数字图像的一个像素由实际物理显示器的多个像素显示,图片缩小相反,实际物理显示器的一个像素内含有多个数字图像的像素
Python包的发行与安装
1.为什么需要对项目分发打包? 平常我们习惯了使用 pip 来安装一些第三方模块,这个安装过程之所以简单,是因为模块开发者为我们默默地为我们做了所有繁杂的工作,而这个过程就是 打包。
打包,就是将你的源代码进一步封装,并且将所有的项目部署工作都事先安排好,这样使用者拿到后即装即用,不用再操心如何部署的问题(如果你不想对照着一堆部署文档手工操作的话)。
不管你是在工作中,还是业余准备自己写一个可以上传到 PyPI 的项目,你都要学会如何打包你的项目。
Python 发展了这么些年了,项目打包工具也已经很成熟了。他们都有哪些呢?
你可能听过 disutils、 distutils 、distutils2、setuptools等等,好像很熟悉,却又很陌生,他们都是什么关系呢?
2. 包分发的始祖:distutils distutils 是 Python 的一个标准库,从命名上很容易看出它是一个分发(distribute)工具(utlis),它是 Python 官方开发的一个分发打包工具,所有后续的打包工具,全部都是基于它进行开发的。
distutils 的精髓在于编写 ...
毕业设计:嵌入式平台的目标检测-3
当前进展 上一个博客提到使用YOLOv4帧率较低,在windows10 GTX1650上帧率为15FPS,在Nvidia Xavier AGX上为5FPS,低的离谱,不过挺奇怪的,理论上应该AGX远超1650,当时我也没多想,可能是哪里出了问题…(不过我第一步任务是把代码跑通,接下来开始提速)
模型选择 后来比较了一下,YOLOv5的准确性和速度都高于v4,tiny版本另说,v5和刚出没多久的v8属于同一家公司ultralytics,而且最适合商用,因此选择yolov5替代v4。v6、v7、v8和v5相比没有很大的改善。
yolov5 Github地址:https://github.com/ultralytics/yolov5
v5模型有较多版本,选择YOLOv5s作为测试模型。
官方代码 clone官方代码后,装指定的环境,官方推荐直接pip install -r requirements.txt安装必要的环境,但我不推荐这样,手动安装既能了解安装详细过程也能控制版本。建议先安装pytorch和Cudatoolkit。显卡驱动、cudatoolkit、pytorch、 ...
Parser
Parser模块 官方文档
该模块是python自带的用于管理参数的模块,用法如下:
import argparse# 创建一个 ArgumentParser 对象parser = argparse.ArgumentParser() parser.add_argument('--vocab_file', default='europarl/txt/vocab.json', type=str)parser.add_argument('--MAX_LENGTH', default=30, type=int)parser.add_argument('--save', action='store_true', help='GAT with sparse version or not.')# 后面参数用args.vocab_file、args.MAX_LENGTH、args.save 使用,去掉前面的-- # 解析添加的参数args = parser.parse_args ...
毕业设计:嵌入式平台的目标检测-2
目标检测综述 A survey of modern deep learning based object detection models
https://www.sciencedirect.com/science/article/pii/S1051200422001312
YOLO YOLO系列目标检测算法网上教程很多,当然也需要看原论文
目前进展 已完成在Nvidia Xavier AGX上搭建miniforge和pytorch的环境,成功运行YOLOv4源码。但帧率较低
Nvidia Jetson系列嵌入式开发套件信息参考 https://www.nvidia.cn/autonomous-machines/embedded-systems/
关于miniforge、miniconda、anaconda等的区别可参考 https://zhuanlan.zhihu.com/p/518926990
嵌入式平台 nvidia嵌入式平台:Jetson Orin:Jetson AGX Orin、Jetson Orin NX、Jetson Orin Nano;
Jets ...
毕业设计:嵌入式平台的目标检测-1
毕业设计设计内容 目标检测是计算机视觉领域的一项关键技术,是后续目标识别、目标理解等高阶任务的前序。随着深度神经网络研究的快速发展,目标检测已经能达到甚至超过人类的相应能力。然而,大规模神经网络的推理需要强大的算力支持,如果将其移植到低功耗,小体积,算力低的嵌入式平台上是实现目标检测应用于移动端的关键步骤。本课题重点研究YOLO系列目标检测模型在英伟达Xavier系列板卡上的实现。
技术要求
掌握linux操作系统、目标检测与深度学习的相关概念
研究YOLO系列目标检测模型,阅读源码
收集数据集,通过训练给出优化后的神经网络模型并部署至嵌入式平台上
成果形式 开题报告;毕设论文;神经网络程序和实验结果