深度学习 原理性实践

前言 以前一直是调用,从来都是知其然而不知其所以然,不太好,正好最近一直在使用yolov5,又很想搓一个自然语言聊天机器人,就决定学一学: Part1 理论基础 1.1 正向传播 输入为矩阵,对矩阵进行仿射变换后加上激活函数,反复几层之后输入,经过Softmax输出结果。用交叉熵损失判断其模型好坏,并进行下一步操作 1.2 反向传播 首先明确反向传播即损失值对网络中仿射变换参数的改变 对于softmax层,反向传播softmax层输出预测与实际的差值 对于仿射变换层,引入正则化惩罚项:reg与学习率:epsilon来约束反向传播 这个时候对于一般仿射变换: H = W*X +B 与其反向传播的输入值dW,dB 有 dW = dW + reg * W 更新W与B有: W = W – epsilon * dW B = B – espsilon * dB 这样就能实现反向传播在仿射变换中的流动了…

DIY激光雷达

前言:用arduino 和舵机和激光测距搓的,具体实现明天再写,好困啊\ Part1 什么是激光雷达 雷达很好理解(这里不讨论相控阵那种怪物),想象成旋转的测距仪。用电磁波发射与返回的时间差测得距离,而波长变化的测量甚至可以使用开普勒效应来得知被测物体的速度。 而我们因为没有能够在实验室这么小范围内还能正常定向发射的电磁波原(有也买不起,买得起也会被抓去谈话)所以退而求其次使用了激光测距的方法,原理与电磁波一模一样,都是电磁波嘛(笑。但是测量速度的功能就给砍了。 Part2 搓一个 那么对于角度的感知本来想用步进电机的,但是考虑到丢步的问题,还得用霍尔或者别的啥方法来校准,实在不太优雅,所以选择了舵机作为旋转的底座。 理论存在,实践可行,返回的数据包括角度与距离,那么只需要可视化这两个数据就可以啦,显示我们使用了一块oled的小屏幕,基本所有的东西都是自己以前做过的,所以非常好写。 #include <Wire.h> #include <Servo.h> #include <SparkFun_…

基于opencv的自动标注yolov5数据集

前言: 具体使用请查看我的github仓库: https://github.com/qwqpap/auto_maker 再需要yolo识别物体之前,通常需要漫长的标注过程,而本程序主打一个自动化 把目标图片放进以目标名字命名的文件夹 把目标名字文件夹放在images文件夹下面 确保每个类别的图片数量是一致的 把背景图片放在back文件夹 Part 1 一点线性代数 我们可以发现在对图片进行仿射变换时,只需要对原图片的一组基向量进行变化即可 那么在进行透视变换的时候就需要对三个想来进行同时的变换即可 具体的数学计算看代码吧,太晚了我想睡一会了 这个:言って。好好听 下面有两个版本,分别是仿射变换和透视变换,效果都还行,目前GitHub上面是透视变换的版本qwq。 import pyautogui as gui import cv2 import numpy import os import time import glob import cv2 import num…

ROS自查手册

0.0 Readme 本文纯属我自己当笔记用,估计不会很有用吧(笑 1 ROS前置工作 通常各种教程这个时候就会要求用虚拟机或者双系统了,但是我一直觉得这是一个极其令人不解的行为,因为反正是学习,跑的都是仿真,装个双系统也没什么用,还要花掉很大一块硬盘空间,所以这里使用Docker在windows11下面部署ros的虚拟环境,那么图形化就使用vscode,ssh和xming来实现吧。 具体操作在之前的文章如何使用docker在windows上愉悦运行ROS/ROS2 – 天鹅绒房间 (qwqpap.xyz) 2 ROS文件结构 ROS的文件结构,在工作目录下/src中放置自己写的功能包(或者别的包),/build里面是编译项目所需文件,功能包中的/scripts则存放各种Python脚本(解释型语言存疑 WorkSpace --- 自定义的工作空间 |--- build:编译空间,用于存放CMake和catkin的缓存信息、配置信息和其他中间文件。 |--- devel…

树莓派pico的无源蜂鸣器音乐库

实验室有人买了一大堆蜂鸣器,手边正好又有pico,就写了个库 class Play_music: ''' 使用蜂鸣器来在pico上面播放最多八个声道的音乐 using buzzer to play music on raspberry pico channel_1~8的gpio引脚将设置为0,2,4,6,8,10,12,14 the channel_1~8 is for gpio 0,2,4,6,8,10,12,14 请确保列表长度相同(我懒了) please make sure that the…

(还在写)电子DIY入门指北

前言 编者自己の话 什么是电子DIY?其实我也没法有个很好的定义,但是可以通过讲故事的方法来讲讲。 有没有看过你买的电脑的接口?一台新的,漂亮的,现代的电脑的接口。比如我的surface pro8除了充电和耳机就只有两个雷电4接口了。或者说叫做usb4接口。USB-Universal Serial Bus通用串行总线协议,从u盘到打印机,相当通用,相当好用,但是你能不能使用这个接口来物理意义地控制一些设备呢? 答案是否定的,在接口的进化中早已失去了那种直接与物理设备进行控制的功能,这是合理且美好的,但是不可避免地,会少很多好玩的事情。 在上古时代(也就是十来年前我还在上幼儿园之前)那个时候的电脑是有很多很丑陋的接口的 那个小小的梯形可不是vga接口哦,这些都是COM口(串口),怎么说捏,这个东西的协议可多了TTL、RS-232、RS-485一堆,一般用来连打印机,各种奇奇怪怪的工控设备之类的玩意,现在已经基本见不到了。因为“通用串行总线协议”统一了这一大堆东西。 但是总是存在一些爱好者觉得生活中的东…

基于esp32和VFD屏的天气小电视重制版

去年做了个基于oled屏幕的小电视,但是受限于技术力和屏幕尺寸限制,做出来的东西只能说是很不完善。 正好看到了vfd屏幕,很酷,决定做一个。 1 用u8g2库点亮vfd屏幕 1.1 u8g2库的安装 淘宝卖家给了个魔改过的u8g2库,我很不解,但是很好用(bushi vfd屏u8g2库 – 天鹅绒房间 (qwqpap.xyz) 关于u8g2库的安装这里简略说明 解压放在你arduino ide 的\Arduino\libraries\下就可以。 1.2 u8g2库的使用方法 首先我们需要屏幕驱动的名字,然后创建对应的对象就可以啦。 对于本例而言,我们使用一块分辨率 256*50, 驱动为GP1287AI的vfd屏幕,故你的代码应该开头包含这样一段 #include <U8g2lib.h> U8G2_GP1287AI_256X50_1_3W_HW_SPI u8g2(…