前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >厚积薄发的一年---用Jetson Nano实现入侵检测的项目分享

厚积薄发的一年---用Jetson Nano实现入侵检测的项目分享

作者头像
云帆沧海
发布2024-01-17 17:30:35
1770
发布2024-01-17 17:30:35
举报
文章被收录于专栏:编程杂记编程杂记

回顾2023,有为了一个BUG或知识熬过夜,也有为了项目连续几天三点一线,在这期间的积累的一砖一瓦中,除了直接获得专业知识,提高专业技能外,更多的是从项目中得到足以使我终生受益的其他收获。 下面就一今年收获最多的项目来总结我的2023 ————————————————————————————————

偶然的发现

一次在刷短视频的时候,看到一个把区域框起来,有人进入区域的话就把会报警,如果人离开区域外就不会报警,精准的识别了需要看守的区域,而不是监控画面的全部。

开始行动

看完之后我就想自己能不能做一个这样的,于是我便开始上网查阅资料,根据自己对视觉的理解开始着手起来。

我想到的是用Opencv鼠标事件作为交互的手段,并且用OpenCV的混合高斯模型背景建模实现动态检测,这种方案原理就是对后一帧和前一帧进行比较,不一样的点视为动态点,可以检测到特定区域内的动态物体,总是实现较为简单。便开始编写程序上机测试。

在这里插入图片描述
在这里插入图片描述

上机测试之后,缺点明显,不能缺定动态物体为人类,极易受其他的东西干扰,保护不了动态物体。

选择使用神经网络

在发现以上问题之后决定开始寻求解决办法于是就开始使用YOLOv5深度神经网络,来寻求更加精确的检验。具体思路是用把人类当做目标,转化为目标检测问题,目标检测当下流行方法是深度学习。深度学习可以准确的区分出人类,并且可以精准抓拍人类,避免其他的东西干扰,随着计算机的算力发展,深度学习由于其优秀的性能,在众多目标算法中脱颖而出,得到了广泛的应用。

学习Docker

由于神经网络需要训练,服务器上需要训练需要建立docker环境来避免干扰到其他项目同时也能独立的进行训练,于是开始学习docker的使用方法。 安装docker:

代码语言:javascript
复制
curl -fsSL https://test.docker.com -o test-docker.sh
 sudo sh test-docker.sh

拉取镜像

代码语言:javascript
复制
docker pull ubuntu

运行容器

代码语言:javascript
复制
docker run -it ubuntu /bin/bash

退出容器: 使用 exit 命令退出容器 主机内容传入 Docker 容器:

代码语言:javascript
复制
docker run -it -v /host/path:/container/path ubuntu /bin/bash

这会将主机上的 /host/path 映射到容器内的 /container/path。

Docker 内容传到主机:

要将容器内的文件或目录传递到主机上,可以使用 docker cp 命令。首先,确定容器的ID或名称,然后执行以下命令:

代码语言:javascript
复制
docker cp <container_id_or_name>:/container/path /host/path

这将从容器中复制 /container/path 到主机上的 /host/path。 学习这些基本思路之后我开始训练模型

在这里插入图片描述
在这里插入图片描述

训练好了之后开始测试刚开始似乎结果不是那么好,于是开始修改网络,以及训练的方法。 开始查阅资料最终决定采用改进Mosaic9,增强小目标的检测。

受YOLOv5算法中Mosaic增强的启发,本设计进一步拓展了这一方法,采用了Mosaic9增强技术。在Mosaic9中,将9张图片随机裁剪并拼接成一张大图,以此来增强神经网络对小目标的区分能力和提升模型的泛化能力。 通过使用更多的图像样本进行拼接,Mosaic9增强技术可以提供更多的视觉上下文信息,使得模型在训练过程中能够更好地理解不同目标之间的相互关系。这对于小目标的检测和分类尤为重要,因为小目标往往具有更少的可见特征,需要依靠周围环境的上下文来进行准确的预测。[6] 此外,Mosaic9增强技术还可以帮助提升模型的泛化能力。通过将多个场景和不同角度的图像合并到一张训练图像中,模型可以学习到更多的变化和复杂性,从而更好地适应各种不同的测试数据。这有助于减少过拟合的风险,并提高模型在现实世界中的实际应用效果,Mosaic9增强技术是一种强大的数据增强方法,通过拼接多个随机裁剪的图像,为神经网络提供了更丰富的信息和更广泛的视野。这种增强方法可以改善模型对小目标的检测和分类能力,并提升模型的泛化能力,使其更适用于各种真实场景中的目标识别任务。

在这里插入图片描述
在这里插入图片描述

增强之后效果有明显的提升。

具体方法

在utils/dataloaders.py,找到mosaic板块

代码语言:javascript
复制
mosaic = self.mosaic and random.random() < hyp['mosaic']
if mosaic:
	# Load mosaic
	img, labels = load_mosaic(self, index)  # use load_mosaic4
	
	shapes = None
	
	# MixUp augmentation
	if random.random() < hyp['mixup']:
	    img, labels = mixup(img, labels, *load_mosaic(self, random.randint(0, self.n - 1)))

把:

代码语言:javascript
复制
img, labels = load_mosaic(self, index)

代码语言:javascript
复制
 img, labels = mixup(img, labels, *load_mosaic(self, random.randint(0, self.n - 1)))

改为:

代码语言:javascript
复制
img, labels = load_mosaic9(self, index)   

代码语言:javascript
复制
 img, labels = mixup(img, labels, *load_mosaic9(self, random.randint(0, self.n - 1)))

jetson Nano这块开发板进行部署

为了更加贴近实际,决定给这个小项目落地。于是我选择了jetson Nano这块开发板进行部署 考虑到行人检测的实际应用场景和需求,选择将模型部署于嵌入式开发平台,其中NVIDIA公司的jetson Nano是一个理想的选择。 jetson Nano是一款功能强大的小型计算机,它具备强大的计算能力,jetson Nano搭载了NVIDIA的GPU,拥有128个CUDA核心,可以提供高性能的计算能力,能够并行运行多个神经网络模型,实现实时的行人检测任务;jetson Nano广泛应用于图像分类、物体检测、图像分割、语音处理等各种应用场景。它适用于多个行业领域,如智能安防、无人驾驶、机器人技术等;jetson Nano提供了简单易用的开发环境和工具,使开发人员能够快速搭建和部署深度学习模型。它支持常用的深度学习框架,如TensorFlow、PyTorch等,开发人员可以选择他们熟悉的框架进行模型的开发和训练;jetson Nano的功耗仅为5瓦,具有出色的能效比。这使得它非常适合部署在资源有限的嵌入式设备中,如智能摄像头等,实现高效的行人检测任务。 Jetson Nano搭载的是Ubuntu系统,烧录的是英伟达的镜像。 从GitHub上下载源码文件夹,查看requiremen.txt安装YOLOv5所需要的运行环境,使用pip进行安装,值得注意的是pythorch和thorchvision版本要对应,

在这里插入图片描述
在这里插入图片描述

命令行输入:

代码语言:javascript
复制
sudo apt-get install python3-pip libopenblas-base libopenmpi-dev libomp-dev
pip3 install Cython
pip3 install numpy torch-1.8.0-cp36-cp36m-linux_aarch64.whl

接着下载对应版本的torchvision,并输入命令:

代码语言:javascript
复制
sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev
cd torchvision
export BUILD_VERSION=0.9.0  #python3 setup.py install --user
cd ../  
 pip install 'pillow<7' 

安装完成后其余的库用pip安装。运行代码缺谁装谁,在安装完成以后开始测试环境是否搭建成功,使用YOLO官方提供的权重和图片进行测试,测试结果如下,YOLOv5代码运行正常,表示部署成功。 接着把代码部署在上面即可。

具体实物图如下:

在这里插入图片描述
在这里插入图片描述

到这里这个项目就结束了,在这个项目中我学习到了docker的用法,进一步熟悉了Ubuntu系统的使用,同时也学会了改进YOLOv5使其提高精度,比项目本身更重要的是通过项目学习到的东西。

不忘初心,不念过往,不惧将来

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 偶然的发现
  • 开始行动
    • 选择使用神经网络
      • 学习Docker
        • Docker 内容传到主机:
          • 具体方法
            • jetson Nano这块开发板进行部署
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档