Predict.py的编写
你需要注意的是:
此文章仅为ChatGpt的回答,是本人用于理解paddle相应模块而CV过来的,并不一定具有实际效益
一种可行的Predict.py12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182import argparseimport osimport cv2import numpy as npimport paddlefrom paddle.vision.transforms import Compose, Normalizefrom paddledet.utils.logger import setup_loggerfrom paddledet.models.detectors import YOLOv3from paddledet.datasets.builder import build_datase ...
Paddle环境搭建
此文章以python的搭建为例
一、安装Anacondahttps://www.anaconda.com
注意勾选All User
这里最好是勾选第一个选项,其目的是将anaconda添加到系统变量中,这样我们可以直接通过cmd调用conda,更加方便
然后你就可以使用anaconda来设置不同的环境
比如这里我们建一个专门用于Paddle的环境(控制台输入)
conda create -n PaddleDetection python==3.7创建PaddleDetection环境,并要求其为python3.7版本
conda activate PaddleDetection进入所创建的PaddleDetection环境中
当目录左侧有(xxxxx)显示时,就表明你已进入该环境,可以基于该环境进行操作,pip install / pip uninstall的操作也只会影响该环境
注意:当左侧显示(base)时,这是默认环境
二、安装CUDA你的显卡必须是NVDIA显卡!!!
你可以在https://developer.nvidia.com/找到CUDA的下载
但是请注 ...
百度Paddle模型训练
注意:本说明并没有详细谈及各参数的调整
对于多卡训练,只需要将python tools/trainxxxx改为:
python -m paddle.distributed.launch —selected_gpus 0,1,2,3 tools/trainxxxxxx
其中0,1,2,3参数是因为有4张卡,若是两张卡训练,此处应写0,1
你可以通过nvidia-smi查询显卡数量
以百度飞浆推出的PaddleDetection目标检测开发套件为例
项目架构这是其Github项目文件
我们将要用到的基本架构如下:
对于数据集其中,car_train是我们自己的数据集,这里的数据集格式为VOC
JPEGImages存放所有数据集图片,Annotations中存放所有标注文件
你可以通过labelimg软件进行数据的标注
当我们有了这样的数据集后,就可以准备进行模型训练了
模型训练前的准备我们这里使用的是yolov3模型,你可以在克隆下来的PaddleDetection的:PaddleDetection/configs/中找到它
但是可以发现,在这些yml中,没有我们想要的y ...
GMD09601-0.96OLED显示屏
GMD09601-0.96OLED显示屏
驱动芯片:SSD1306
支持接口:SPI/IIC
分辨率:128*64
接口定义
GND:电源地
VDD:电源正(3.3V ~ 5V)
SCK:时钟线
SDA:数据线
RES:复位线
DC:数据/命令
CS:片选
对于096 OLED屏幕接线F207
GND 电源地VCC 电源正(3.3~5V)D0(SCL) SCK管脚D1(SDA) MOSI管脚RES(RST) 用来复位(低电平复位)DC(D/C) 数据和命令控制管脚 1表示数据 0表示命令CS(NSS) 片选管脚
1234567GND -> GNDVCC -> 3V3D0 -> PA5D1 -> PA7RES -> PA4DC -> PA6CS -> NONE
【LeetCode 1617】统计子树中城市之间最大距离
题目描述给你 n 个城市,编号为从 1 到 n 。同时给你一个大小为 n-1 的数组 edges ,其中 edges[i] = [ui, vi] 表示城市 ui 和 vi 之间有一条双向边。题目保证任意城市之间只有唯一的一条路径。换句话说,所有城市形成了一棵 树 。
一棵 子树 是城市的一个子集,且子集中任意城市之间可以通过子集中的其他城市和边到达。两个子树被认为不一样的条件是至少有一个城市在其中一棵子树中存在,但在另一棵子树中不存在。
对于 d 从 1 到 n-1 ,请你找到城市间 最大距离 恰好为 d 的所有子树数目。
请你返回一个大小为 n-1 的数组,其中第 d 个元素(下标从 1 开始)是城市间 最大距离 恰好等于 d 的子树数目。
请注意,两个城市间距离定义为它们之间需要经过的边的数目。
示例 1:
输入:n = 4, edges = [[1,2],[2,3],[2,4]]输出:[3,4,0]解释:子树 {1,2}, {2,3} 和 {2,4} 最大距离都是 1 。子树 {1,2,3}, {1,2,4}, {2,3,4} 和 {1,2,3,4} 最大距离都为 2 。不存在城 ...
C语言学习相关
函数递归
函数递归,简单的理解就是,自己调用自己,直到遇到边界条件,停止递归
比如我们想实现一个阶乘函数
12345678910111213141516171819202122232425262728int n = 5;//求n! 这里是5!//不使用递归,一种可行的做法是这样int ans = 1;for (int i = 1; i <= n; i++) { ans *= i;}printf("%d! = %d", n, ans);//使用递归int _n(int x) { if (x == 0)return 1; return x * _n(x - 1);}printf("%d! = %d", n, _n(n));/*对于 _n(5),我们拆分一下它自己调用自己的过程↓_n(5) 5 * _n(4) 4 * _n(3) 3 * _n(2) 2 * _n(1) 1 * _n(0) 1达到边界,返回值为:5*4*3*2*1*1的 结果 (是,结果,不是这 ...
STM32阵列按键
阵列按键12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182uint8_t Key_GetNum(void) { uint8_t keyNum = 0; /* 在Key_init()中 设置所有行为高电平,列为输入下拉模式(IPD) GPIO_SetBits(GPIOB, Key_ROW1 | Key_ROW2 | Key_ROW3 | Key_ROW4); GPIO_ResetBits(GPIOA, Key_Pin_A_All); GPIO_ResetBits(GPIOC, Key_Pin_C_All); */ GPIO_SetBits(GPIOB, Key_ROW4); GPIO_ResetBits(GPIOB, Key_ROW1); if (GPI ...
CH32(F10X F20X)
对于WCH-link的接线F1031234567U -> 板上SWD区域Rx -> PA9(Tx)Tx -> PA10(Rx)GND -> GND3V3 -> VCCSWDIO-> PA13SWDLK-> PA14
F2071234567U -> 板上SWD区域Rx -> TXDTx -> RXDGND -> GND3V3 -> VDDSWDIO -> SWIOSWDLK -> SWCK
对于096 OLED屏幕接线F207
GND 电源地VCC 电源正(3.3~5V)D0(SCL) SCK管脚D1(SDA) MOSI管脚RES(RST) 用来复位(低电平复位)DC(D/C) 数据和命令控制管脚 1表示数据 0表示命令CS(NSS) 片选管脚
1234567GND -> GNDVCC -> 3V3D0 -> PA5D1 -> PA7RES -> PA4DC -> PA6CS -> NONE
最短路
最短的求解一般会遇到多种情况
有向无环图
权值为正
权值有负
有向有环图
权值为正
权值有负
负权边和负权环 Bellmon-Ford
权值非负的有向或无向图 Dijkstra
Dijkstra
Dijkstra本质上是一种贪心算法,通过不断调整每个点的“当前距离”最终得到最优结果
这种不断调整的过程,维基百科上面称为“relax”(松弛)
算法流程
对于求一点s到其他所有点的最短距离
对于每个点v均维护一个当前距离(dis[v])和 是否访问过(vis[v])。首先将dis[s]初始化为无穷,所有点访问状态(vis)置为未访问
对于一条边u->v,其边权为weight[u->v],我们存储在了v.first中(v为G[u]中的一个邻接点)
从所有未访问的点中,找出当前距离最小的,设为u,并将其标记为已访问的。
调整u的所有边(若是有向图则为出边)连接的并且未被访问过的点:
若weight[u->v] + dis[u] < dis[v], 则将dis[v]更新为dis[u]+weight[u->v],体现在代码中的操作即是:if (d ...
拓扑排序
什么是拓扑排序?在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。且该序列必须满足下面两个条件:
每个顶点出现且只出现一次
若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面
有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说
拓扑排序有什么用?
它可以用来解决形如:
有n个任务需要完成,每个任务有一个耗时和一个前置任务列表,前置任务完成后才能开始当前任务。求完成所有任务的最短时间
这样具有依赖关系的问题
拓扑排序的实现
实现拓扑排序的关键就是维护一个入度为0的顶点的集合
Eg:P1113 杂务题目描述John的农场在给奶牛挤奶前有很多杂务要完成,每一项杂务都需要一定的时间来完成它。比如:他们要将奶牛集合起来,将他们赶进牛棚,为奶牛清洗乳房以及一些其它工作。尽早将所有杂务完成是必要的,因为这样才有更多时间挤出更多的牛奶。当然,有些杂务必须在另一些杂务完成的情况下才能进行。比如:只有将奶牛赶进牛棚才能开始为它清洗乳房,还有在未给奶 ...



