树莓派基础以及YOLOv8模型的应用
目录
所需应用下载链接:
树莓派家谱:
树莓派硬件:
树莓派操作系统类别与烧录:
操作系统类别:
系统烧录:
树莓派基础实操:
树莓派首次开机与关机:
树莓派如何用网线与树莓派的连接:
利用无线网络连接:
VNC远程控制树莓派:
1.树莓派上面安装VNC服务器:
2.电脑上安装VNC查看器:
3.树莓派和笔记本进行连接:
树莓派设置静止ip地址:
树莓派换源:
为什么要更换树莓派源:
树莓派与window之间的文件传输:
YOLOv8在树莓派上的应用:
YOLOv8网络结构与YOLOv5之间的对比:
C3与C2f的区别:
主干网络的区别:
解码头的区别:
yolov8的代码讲解:
感谢mmYOLO的图例
所需应用下载链接:
树莓派官网:
Raspberry Pi
树莓派与window之间传输数据软件:
两个都能很好使用
WinSCP软件下载:WinSCP :: Official Site :: Free SFTP and FTP client for Windows
MobaXterm:https://mobaxterm.mobatek.net/
远程控制树莓派:
VNC:Download VNC Viewer by RealVNC®
SD卡格式化工具(SDFormatter)
链接:https://pan.baidu.com/s/1RoAkkW8nNaOCGMrPIpCFvg
提取码:wujq
链接:https://pan.baidu.com/s/1KQLYxaxAPAaz-zB2eeoA5g
提取码:b54j
树莓派家谱:
树莓派硬件:
博主使用的是树莓派4代B版,搭载1.5GHz 64位四核Cortex-A72 CPU,内存可选1/2/4/8GB,支持蓝牙5.0、USB 3.0、双4K输出,供电为5V Type-C,其余配置与3代B+相近。
摄像机模块排线:3.5mm圆孔耳机线的右边
视频输出接口:2个mini-HDMI
再右边是type-c的电源接口
40针GPIO连接器
支持POE供电:4个小针脚
sd卡插在树莓派的背面
树莓派操作系统类别与烧录:
操作系统类别:
管理计算机硬件与软件资源的计算机的程序
eg:Win11系统、苹果系统、UNIX、Linux
UNIX:需要专业的硬件设备
Linux:规避了UNIX和苹果系统的缺点;通过命令行操作;用于服务器;安卓系统基于Linux开发而来
树莓派官方系统:Raspberry Pi OS
树莓派非官方系统:Ubuntu、LibreElec、RetroPie、TLXOS
系统烧录:
SD卡、读卡器、系统(官网上找)
SD卡格式化工具(SDFormatter)
链接:https://pan.baidu.com/s/1KQLYxaxAPAaz-zB2eeoA5g
提取码:b54j
链接:https://pan.baidu.com/s/1RoAkkW8nNaOCGMrPIpCFvg
提取码:wujq
准备32Gb的内存卡
首先要将内容卡格式化:
rasberrypi.org-Software-Raspberry Pi OS
直接下载:(16:16)
每天十分钟带你学会树莓派--入门篇-03系统烧录_哔哩哔哩_bilibili
官方系统烧录:(13:25)
每天十分钟带你学会树莓派--入门篇-03系统烧录_哔哩哔哩_bilibili
树莓派基础实操:
树莓派首次开机与关机:
电源:5V-3A
sd卡(tf卡):用于存储系统---建议8g以上
(+读卡器)
鼠标键盘:有线usb接口的(无线可能影响自检和驱动)
显示屏+HDMI线
接线注意事项:
1.连接显示器不显示:
(顺序相反屏幕会什么都不显示)
2.树莓派一直重启:
3.关机方式:
方法一:
左上角的黑色窗口(相当于windows里面的cmd)
sudo poweroff^C
关闭电源sudo shutdown -h now
立刻关机sudo shutdown -r now
立刻重启sudo shutdown -h +2
2分钟后关机
方法二:
树莓派如何用网线与树莓派的连接:
1.连线:网线一端插树莓派上,一端插电脑上
2.共享:将电脑的网络共享给树莓派
3.查找:查找树莓派的IP地址
cmd窗口中:
arp -a
4.利用树莓派的IP地址连接树莓派
树莓派学习教程基础篇05:无显示屏键鼠等外设,一根网线远程连接树莓派,十分钟玩转系列之基础篇_哔哩哔哩_bilibili
利用无线网络连接:
树莓派网络配置信息
country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid=*无线网名字*
psk=*密码*
priority=10
}
无线网名字与密码都为电脑热点的名字、密码
将树莓派连接上笔记本的热点:(7:37)
远程桌面连接:(8:51)
树莓派中安装工具xrdp:(9:15)
sudo apt-get install xrdp
下载好安装工具,继续电脑远程桌面连接:(11:23)
每天十分钟带你学会树莓派--基础篇 06 RDP远程控制树莓派(无网线连接)_哔哩哔哩_bilibili
VNC远程控制树莓派:
每天十分钟带你学会树莓派 基础篇07 树莓派VNC连接,配置树莓派的静态IP地址_哔哩哔哩_bilibili
1.树莓派上面安装VNC服务器:
(4:04)
每天十分钟带你学会树莓派 基础篇07 树莓派VNC连接,配置树莓派的静态IP地址_哔哩哔哩_bilibili
法一:桌面模式
法二:命令行模式
sudo raspi-config
2.电脑上安装VNC查看器:
(7:09)
每天十分钟带你学会树莓派 基础篇07 树莓派VNC连接,配置树莓派的静态IP地址_哔哩哔哩_bilibili
vnc官网:RealVNC® - Remote access software for desktop and mobile | RealVNC
3.树莓派和笔记本进行连接:
运行树莓派的VNC,命令行:
vncserver
树莓派设置静止ip地址:
每天十分钟带你学会树莓派 基础篇07 树莓派VNC连接,配置树莓派的静态IP地址_哔哩哔哩_bilibili
1.查找默认网关:(12:25)
cmd:
ipconfig
默认网关不一定为最后一行
2.分配给树莓派的ip地址:(12:40)
3.修改树莓派的DHCP配置文件:(13:40)
树莓派的终端窗口:
sudo nano /ect/dhcpcd.conf
打开的文件末尾添加上配置信息:
interface wlan0static ip_address=你的ip地址 /24static routers=你的默认网关static domain_name_servers=你的默认网关
(这里的无线网关是因为老师使用的笔记本连接的是wifi)
粘贴完成后按
ctrl+s 写入
ctrl+x 退出
重启树莓派
树莓派换源:
Raspberry Pi OS 中国软件源 | 树莓派实验室
视频教学:全网最全、最详细树莓派换源?!是的,没有之一!(附笔记文本)_哔哩哔哩_bilibili
树莓派系统有三种版本,每个版本的源又分为32位与64位,需要根据自己树莓派的实际情况进行换源操作
stretch
buster
bullseye
getconf LONG_BIT #查看树莓派系统多少位 32/64
cat /etc/os-release #查看系统版本
uname -a #查看系统构架 armxxx
一定要注意自己树莓派是什么系统以及版本
为什么要更换树莓派源:
更换软件源(package repository)的本质,是把 apt 系统解析到的 base-URL 从官方默认的 http://archive.raspberrypi.org 与 http://raspbian.raspberrypi.org 替换为地理位置更近、网络质量更优、同步延迟更低的镜像站。此举可通过缩短 RTT、增大可用带宽、降低丢包率,显著减少 TCP 握手与 TLS 协商时间,并提高 HTTP/2 多路复用的效率,从而使软件包索引(InRelease、Packages.xz)与二进制文件(.deb)的下载时间从分钟量级降至秒量级。实测表明,在 100 Mbit/s 教育网出口下,官方源平均 RTT≈280 ms、带宽≈1.2 MB/s,切换至清华大学 TUNA 镜像后 RTT≈8 ms、带宽可跑满 11 MB/s,速度提升接近一个数量级。
此外,镜像站通常对上游仓库做 hourly 级 rsync 同步,延迟控制在 1 h 以内,与官方源保持版本一致性;同时提供多架构(armhf/arm64)与多分支(main/contrib/non-free/rpi)完整快照,可在本地软件包版本冻结、回退或构建私有 fork 时提供确定性来源
列如博主使用的系统:
1、编辑 /etc/apt/sources.list 文件(软件源)sudo chmod 777 /etc/apt/sources.list
sudo nano /etc/apt/sources.list2、源代码前面都加一个 # 用来注销源代码,bookworm 系统用以下内容取代:
deb https://mirrors.tuna.tsinghua.edu.cn/debian bookworm main contrib non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian bookworm-updates main contrib non-free-firmware
然后 Ctrl+x 退出,接着 y 保存,再按一次ctrl退出。
树莓派与window之间的文件传输:
通过在window上训练的模型转移到树莓派上,实现树莓派yolov8的应用
视频教学:
如何实现树莓派与Windows之间传输文件?_哔哩哔哩_bilibili
【终端】全能终端神器MobaXterm_哔哩哔哩_bilibili
WinSCP软件下载:WinSCP :: Official Site :: Free SFTP and FTP client for Windows
MobaXterm:https://mobaxterm.mobatek.net/
YOLOv8在树莓派上的应用:
网络结构的一些基础概念在这片文章有所提及:https://blog.csdn.net/Klusfsc/article/details/144015984?spm=1011.2415.3001.5331
YOLOv8网络结构与YOLOv5之间的对比:
模型训练都是在window上训练的,树莓派的算力不足以跑模型训练
YOLOv8的网络结构:
YOLOv5的网络结构:
YOLOv8的Head部分从原先的耦合头变成了解耦头结构,简化了模型结构并提高了推理速度。
YOLOv8在LOSS计算方面采用了TaskAlignedAssigner正样本分配策略,并引入了Distribution Focal Loss,确保了检测结果的准确性和鲁棒性。
YOLOv8的Backbone类似于YOLOv5的Backbone,不同点是将C3换成了C2F,以及将第一个Convolution层设置为kernel size等于3,stride为2(YOLOv5的Kernel Size为6,padding为2)。
C3与C2f的区别:
主干网络的区别:
C3有个残差的链接在左侧
(chat)
分组卷积(Group Convolution)
分组卷积是一种特殊的卷积操作,它将输入通道分割成多个组,每个组单独进行卷积操作,最后将结果合并。这种做法减少了不同通道之间的信息交互,可以有效降低计算复杂度。例如,在PyTorch中,可以通过设置groups参数来实现分组卷积,如nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding, groups=in_channel)。
深度可分离卷积(Depthwise Separable Convolution)
深度可分离卷积是一种更为极端的分组卷积形式,其中每个组的通道数为1。它由两部分组成:深度卷积(Depthwise Convolution)和逐点卷积(Pointwise Convolution)。深度卷积只对每个通道进行卷积操作,而逐点卷积则通过1x1卷积来调整输出通道数。这种方法显著减少了参数量和计算量,是轻量化模型设计中常用的技巧。
瓶颈结构(Bottleneck)
瓶颈结构是一种在深度卷积层前后添加1x1卷积层的策略,旨在减少卷积层的输入和输出维度,从而降低计算复杂度。通常,瓶颈结构包括一个1x1卷积来减少通道数,接着是一个较大的卷积核(如3x3)来提取特征,最后再通过一个1x1卷积恢复到原始通道数。这种结构在ResNet和Inception等网络中广泛应用。
Split 操作
在神经网络中,Split 操作用于将一个输入张量分割成多个输出张量。在ncnn框架中,Split 操作是一个无参数无权重的操作,其输出张量的数量和形状由输入张量的维度和分割参数决定。例如,split(x, 2)将输入张量x分割成两个等大小的输出张量。
Concat 操作
Concat 操作与Split相反,它将多个输入张量沿特定维度连接成一个输出张量。在ncnn中,Concat操作也是一个无参数无权重的操作,它根据输入张量的形状和连接参数来决定输出张量的维度。例如,concat([x1, x2])将两个输入张量x1和x2沿通道维度连接起来。
Partial Convolution(PConv)
Partial Convolution是一种新的卷积技术,旨在减少冗余计算和内存访问,特别是在处理部分掩码图像时。PConv通过将输入张量分割成处理区域和未处理区域,只对处理区域进行卷积操作,从而提高了效率。这种技术在某些神经网络中被用于加速推理。
简而言之:
C2f 用“劈叉-并行-串接”代替 C3 的“整块-串行”,同样深度却更少参数、更快推理、更好梯度回传
解码头的区别:
yolov5从主干特征提取网络送入到卷积层,
boundingbox:边界框 4个数值表示
object: 置信度 1个数值表示
cls:类别 有几类就有几个数值
相比之下yolov8
边界框回归用的是clou损失函数
置信度与分类:二进制交叉熵的一个损失函数
yolov8的代码讲解:
本文不赘述代码内容,有需求可以参考下面的视频
https://www.bilibili.com/video/BV1Ms421u7VH/?spm_id_from=333.337.search-card.all.click&vd_source=e150fe027448aa29e27528beba4d0950
yolov5的代码讲解:https://blog.csdn.net/Klusfsc/article/details/144015984?spm=1011.2124.3001.6209