Skip to playerSkip to main content
  • 2天前
文字稿
00:00好,那今天我们来讲第二个教程
00:02就是那个YoloWord
00:05YoloWord在那个科科数据集的一个应用
00:09首先呢我们先把ReadMe的教程给大家来讲一讲
00:12我们讲一下我们这个文件的一些作用
00:14我们知道有很多是其他的一些比较杂志杂巴的文件
00:17然后那个我都放进去了
00:21所以有些东西呢它是没有必要的
00:24对,所以我们就教程里面的这个文件是有用的
00:28第一个是man.ipnb
00:29这个jumptonnotebook文件它是YoloWord训练的一个主代
00:33
00:34pad.py它是对科科数据集的图片进行部分的选取
00:38我们是默认选取
00:39训练集一千张,验证集一千张
00:41那行,我们先讲pad.py
00:44这是第一步,我们进行那个数据集的一个选取
00:48因为什么?
00:49因为YoloWord它原始的数据集你看有多大?
00:52你自己看,我给大家标出来三个条红的是下载的
00:57你看,onulations,images,trem images,value,ation images
01:01你看这个有多大
01:03这个打标就241个m了
01:05然后训练的要18个g
01:08然后验证的要1个g
01:10你自己想想看
01:11你这个,如果你电脑没有GPU的话
01:14因为我之前跑的时候是在我家老台式电脑上跑的
01:17所以说跑的很慢,没有GPU
01:19然后都跑了好几个钟头了,差不多
01:23然后,而且都是在我选了一千张图片以后才这个样子的
01:27如果你原始图片的话
01:28可能上万张
01:31就上万张
01:32那么你不得跑
01:33你没有GPU的电脑不得跑
01:35一个礼拜才能跑啊
01:36对吧
01:36所以说,我们为了那个就是一个小规模的一个实验验证
01:40对吧
01:40所以我们呢
01:41就是一个part.py
01:43对原始的数据进行部分读取
01:46那你看我们聊
01:46导路三文库
01:47OS库
01:48Random库
01:49还有那个shutter库
01:50shutter库
01:51就是一个也是路径处理库
01:53我们默认root是一个点杠
01:55对吧
01:56然后你看trendsauce就是我们点杠
01:58join是什么train2017
02:02就是ValueSauce
02:03train2017和Value2017是什么
02:05就是我们从那个coco下载出来的原数语集
02:11解压后的一个真实的东西
02:12那你看
02:13原始压缩文件zip
02:15zip都在这
02:16解压后就是这样的一个文件夹名称
02:19
02:19然后你看到吧
02:20然后就是这样子一个
02:22然后同时呢traindst
02:24那我们也是的
02:26traindst
02:27然后就是我们那个怎么样
02:29就是那个点杠我们那个就是
02:33选取后
02:34选取后我们那个
02:37新的一个数据集的图片
02:40那你看了
02:41我们是把它加在什么
02:42我们把它加在这里面的
02:46就是加到点杠
02:47trainsubset
02:48ValueSubset
02:49然后接下来那个就是我们OS
02:52make dictionary
02:53就是把这个
02:54我们OS酷
02:55然后我们那个制作一个
02:57新建一个文件夹
02:58然后把这两个
03:00trainsubset
03:01ValueSubset
03:02给放在我们的根目录底下
03:04然后接下来呢
03:04我们就随去选取这个
03:06我知道一开始写5000张啊
03:08实际上后来我改成1000张了
03:09因为5000张我翻跑了以后
03:10还是还是很
03:12量很吓人
03:12我跟你们说
03:13就时间太吓人了
03:16
03:16所以后来我这边就是
03:18选取1000张
03:18你看random.sample
03:20就是那个随机数据
03:21应该取样取1000张
03:23然后
03:23f in trainflies
03:25然后就是我们一个copy
03:26把我们的一个这个
03:30文件路径加上去
03:31对吧
03:32文件路径加上去
03:34就是我们把那个trainsource
03:36那一个内容
03:37copy到我们那个traindist
03:38里面去
03:39就是那个里面trainsource
03:41选1000张
03:41copy到traindist
03:42valuesource
03:43里面选100张
03:44copy到valuedist
03:45这个也是一样的一个逻辑
03:47对吧
03:49然后我们就可以打印出
03:50成为完成了
03:51然后呢
03:52还有一个重要的点
03:53就是你看
03:53为什么我这要加了一个
03:54images
03:55transip set
03:55value subset
03:58因为我们要把打标给弄好
04:00我们要打标给弄好
04:01我们就默认它读取images
04:03它那个youtal world
04:04它对一个路径的读取
04:05它文件命名是很有
04:07有严格的一个命名的
04:09或者说
04:10然后我们自己可以在这个data.yml里面进行一个定义
04:15看我们进入一个pass
04:16项目总路径
04:17trainvalue的相对路径
04:18下面各个标签的一个分类
04:19对吧
04:20看到吧
04:21就是我们的pass
04:22trainvalue的一个路径
04:23还有names
04:24总共有80
04:2580类
04:260到79
04:26对吧
04:27所以就这几个元素
04:28pass
04:29trainvalue和names
04:31这样子
04:32然后在我们pop.py弄完了以后呢
04:34我们还有一个就是transfer.py
04:36因为你看我们原始下来的数据集
04:39它是annotations
04:39它是一个什么
04:40它是一个
04:41你看它是一个什么
04:42它是一个json的文件夹
04:43它是一个json命名的一个文件
04:46打标文件
04:47但是呢
04:48它json文件呢
04:49它是读不出来的
04:50实际上我们那个youtal world
04:51是读不出来的
04:52我们只能那个读
04:54读取什么txt形式的文件
04:55那你看
04:56我们这打标打出来的是什么
04:57labels
04:58transpset
04:59看到吧
05:00一个一个txt文件
05:01看到没有
05:02value这样也是一个一个txt文件
05:04那么我们就要通过transfer.py
05:06然后我们读进我们的
05:08这个什么
05:09annotations
05:10看到吧
05:10annotations
05:11先读进去
05:12然后
05:14看到吧
05:14然后转换成一个labels的transpset
05:17这个是instance
05:19txt
05:202017.json
05:21这一个json文件把它打成
05:23一个labels
05:24一张图片
05:25对应一张
05:27那个txt的打标
05:29真的也是的
05:29一样的道理
05:32然后我们就用一个coho to yolo
05:33就是一个进行转换
05:35那这是一个函数
05:36导入三个库
05:37json,ost,qdm
05:40然后看
05:40首先我们是read
05:42read有一个coho json的一个标志文件
05:44看到吧
05:45然后make a dictionary
05:45然后我们建立一个映示
05:47看到吧
05:48就是coho的catering id
05:49然后映射到什么
05:510到79一个打标
05:52就是我们data.yml
05:54里面打标
05:54打好的
05:55对打标
05:56然后接下来就是图片id
05:58映射到什么
05:59文件名
06:00文件尺寸
06:01所以image id
06:02image file name
06:03for image in coco images
06:05image id
06:05image width
06:06height
06:07这个是一个大小size
06:08就fine name
06:09一个size
06:09所以进行一个循环读取
06:11然后进行一个打标
06:13然后每张图片
06:14我们缓存一个标签
06:15它避免重复写入
06:16接下来就是一个txtdm
06:18我们用coho的anurations
06:20然后进行一个converting
06:22转换
06:23首先我们是image id
06:24就是一个anurations的image id
06:26看到吧
06:27fire name也是的
06:28image id to fire name
06:29就这个东西弄过来
06:30with height就是two size弄过来
06:32看到吧
06:33这样三个元素
06:34我们就全部预处理好了
06:36现在我们进行一个类别映射
06:38category id
06:39就是anurations
06:40cat id
06:41如果不在的话
06:42我们continue
06:43然后现在我们cls id
06:46就是分类人id
06:47所以就category is cat id
07:04对吧
07:05对吧
07:05然后我们进行内面映射和类别映射
07:07接下来就是我们yolo的一个图片处理
07:10我们看x小坐标
07:13y小坐标
07:13对啊就是左上
07:15左上角对吧
07:16x最小值
07:17y坐标最小值
07:18然后with height
07:20然后把它映射到一个bbox里面去
07:22然后x center就是什么
07:24x mirror加上w除以2了
07:26再除一个with了
07:28那么y的一个center
07:29y的一个中心呢也是的
07:30y的最小值加上一个高度的height除以2了
07:33我们再除一个weight了
07:34对吧
07:35然后w再除一个with
07:38等于除以等于一个with
07:39然后height再除以等于一个height
07:42就进行一个处理嘛
07:43把它映射到一个中心
07:45然后那个
07:47接下来就是一个标签的缓存
07:52如果它不在这个标签里面呢
07:53我们就是把它作为一个什么
07:55进行一个set
07:56集合进行自动一个去从
07:59对吧
07:59然后我们把label cached
08:01我们就加上去
08:02盖下这些cached的信息
08:04class id
08:06x center y center with height
08:08然后呢
08:09我们把它写入一个标签文件
08:10finding labels in labels.cached.items
08:14把它作为一个items进读取
08:16然后加上os pass join
08:18看到吧
08:18join
08:19然后我们就是那个
08:20我们把原来的label dictionary
08:22images里面的label dictionary是什么呢
08:24它那个是一个jpg
08:26然后我们替换成一个txt
08:28然后呢
08:29我们这个open
08:31label fly
08:31一个write
08:32然后我们把它写进去
08:33就把这个class id
08:34x center y center with height
08:36in labels
08:37我们全部把它一个个写进去
08:38看到吧
08:38所以你看我们的一个txt的样力是怎么样的
08:42看到没有
08:43就我们一对应吧
08:44首先就是class id
08:45id第一个50
08:46然后
08:47x center
08:48保留六位小数
08:49x center y center
08:50看到吧
08:51然后那个width height
08:53也是保留六位小数
08:54那就是这样一个顺序写进去的
08:56这就是一张图片
08:57我们0009号图片对应的一个什么
09:03对应的一个
09:05对应的一个什么
09:06对应一个我们原始图片的一个分类
09:12我一下子找不到那个image的对应
09:13但是它反正肯定是一对应上的
09:18所以这就是我们一个transfer.py的一个作用
09:20它就是什么作用
09:21它总而言
09:22它就是一个把那个打标数据拆分为连续txt形式
09:26对吧
09:27json转换成一个txt
09:28而且更变我们的实际图片的一个情况
09:31进行一个一对一的转换
09:33还有我们data.ym要设立的一个类别进行一个转换
09:38雖然代码还是有一点搞的
09:43但它确实是很核心很重要的一步
09:44因为你没有这个东西
09:45你直接读
09:46你直接读那个东西
09:47就读那个json文件
09:49它就等于白训练了
09:51因为它读不出来
09:52它打不了标
09:53一个东西打不了标
09:54那你怎么进行一个目标检测呢
09:55对吧
09:56没办法的
10:00这就是这样的一个作用
10:02所以我们再总结一下就是什么
10:04先是那个
10:04我们设计一个函数
10:06然后读取coco标注文件
10:07然后建立类别验试
10:09然后图片id到文件名尺寸的一个印试
10:11然后进行一个缓存
10:12开始的一个写入
10:14然后同时呢
10:15进行yolo的一个格式转换
10:16最后呢我们把那个标签进行缓存
10:18避免重复
10:19然后最后我们写进去
10:21写到我们txt里面去
10:22
10:23然后接下来呢
10:24就是我们那个
10:25我们把part py
10:26transfer的py
10:27然后data ym
10:28我们都讲完了
10:29然后再来呢我们就讲我们的训练
10:31一个man.ip1nb的一个代码
10:34其实这个是最简单的
10:35首先呢我们yolo word
10:36我们先ultradex import yolo
10:39对吧
10:39然后model等于yolo
10:41括号yolo v8s-word v2.pt
10:45我们就是这样进行一个模型的一个原始模型的一个导入
10:48就在这里
10:49模型文件
10:50就是v8的一个word
10:52有了word的一个导入
10:53然后data
10:54你看data是什么
10:55data.yml
10:56我们把那个打标路径都写好了
10:58我们轮次呢
10:59是5
11:00然后image size呢
11:01是640
11:02然后p4呢
11:03是16轮
11:03然后device cpu
11:05如果你device是0的话
11:07那么你就用gpu
11:09所以你还可以是0
11:15然后project就是rins.detect
11:17看到吧
11:18rins.detect
11:18然后它里面就会那个
11:21就会那一轮轮一轮轮训练出来的
11:23然后最后name就是这个
11:26就是子文天下name
11:27
11:28这就是一个训练
11:29然后看到吧
11:31那么一轮训练
11:31它就会打印出这样的一个内容
11:33gpu的占用率
11:35我是0
11:36因为我当时我用cpu弄的
11:38bbox loss
11:39class loss
11:40dfi loss
11:41instances
11:42然后size
11:43然后就要训练的一个时间
11:44训练一个进度
11:45对这样子
11:46然后接下来呢
11:47我们训练完了以后
11:48然后呢
11:49我们就import cv2
11:50图箱树领
11:51open cv
11:52然后ultratax import ulo
11:53第一个加载全重
11:54看到吧
11:55rins.detect
11:56然后cocoWord5
11:58to18
11:58然后waves
11:59然后在下面waves
12:01然后在里面best.pt
12:03看到没有
12:05加点文件夹
12:06然后我们进行一个推理函数inferlocal
12:08然后我们把image pass
12:09promote text等于not
12:10读进去
12:11所以我们用cv2
12:12读进一个我们的图片路径
12:14对不对
12:15if promote text
12:16就什么意思啊
12:17我们假设有这个提示词
12:20那么就什么
12:25我们就什么意思啊
12:26我们就是用户传入那边0
12:27然后进行转换成一个id
12:32然后这个就是进行一个
12:34通过逗号一个split
12:35然后进行stript
12:36把两边的空余给去掉
12:37然后classes就是k4k
12:39v1model.names.item
12:41就是k
12:42就是k名嘛
12:42建制队
12:43就进行一个
12:44建制队一个拆分
12:45然后else呢
12:47就是把它属于所有类别
12:49然后传类别id
12:50而不是类别名
12:51我们要传类别id
12:52把它noblemodel.names.case
12:55类别id
12:55caseid嘛
12:57然后v嘛就是一个name嘛
12:59对吧
12:59然后我们把那个
13:01转换成一个列表list
13:02然后results就是model
13:04然后括号
13:05调用model
13:06image
13:06图片
13:07class then classes
13:09然后我们的知情度
13:10设为0.25
13:11然后annuated
13:13就是result0.plot
13:14annuated
13:15就是打标嘛
13:150嘛
13:16对吧
13:17cv2model.result
13:19annuated
13:20就是我们cv2
13:21进行一个图片的显示
13:23然后wait key0
13:25distree all windows
13:26就显示完以后
13:27我们就立即关掉
13:28就月后集焚
13:29相当于就是这样一个作用
13:31然后print
13:31类别标签
13:32看到吧
13:32类别标签
13:33我们知道类别标签
13:34所有有多少类
13:3680类
13:3670到70有全有的
13:38但是未发现目标
13:39看到没
13:39未发现目标
13:41result0.boxes.id
13:47然后也是notnone
13:48那么classid
13:49等于int box.classes
13:51score
13:51就是知情度
13:53box.conference
13:54link
13:55然后classname
13:57model.names
13:58get
13:58classid
13:59对吧
13:59然后print一个score
14:01对吧
14:03这里就是我们自己读进去的一个图片路径
14:07就是我们进行一个样本测试
14:09还有多少样本
14:10
14:11接下来我们来讲一下
14:12因为这个确实失误了
14:14因为一开始我这个图片路径没弄好
14:17所以说我就不管了
14:19所以还没读出来
14:20但是代码逻辑肯定是正确的
14:22可以这么说
14:22
14:23然后呢
14:24接下来我们就是用了一个
14:27因为这个总的不太方便吧
14:29我们用gradle写了一个web
14:30进行一个验证
14:32然后就是app1和app2
14:34我们把app1和app2
14:35两个对比起来看
14:36用gradle写了一个web
14:38进行验证
14:38对吧
14:39这些逻辑都不变
14:41这些逻辑都不变
14:42看到吧
14:43这是我们提示词
14:44如果没有呢
14:45这里的话就是什么
14:45看到吧
14:46这里的话就是app.py
14:47就是我们框定特别那边
14:48我们仅仅检测
14:50就是提示词是person的
14:52yuloword它应该是可以通过提示词
14:54进行一个目标
14:54目标检测
14:55所以我们仅仅检测
14:56它就是person的
14:57person这个类别
14:57如果没有person
14:58那么就不管
15:00那就是
15:00其他的都一样
15:03其他的都一样
15:07跟刚刚代码逻辑都一样的
15:08看到吧
15:10然后这里就是gradle的界面
15:11看到吧
15:12gradle界面
15:12然后我们设置一个blocks
15:16这个yuloworddemo
15:17然后开放词会演示
15:19gradle.roll
15:19gradle.column
15:21这个就是输入图片
15:24然后那个提示词输入
15:25然后这个就是一个检测
15:28同样之下就是一个检测结果
15:30详情报告
15:31看到吧
15:32比较简单的
15:33这个gradle还比较简单的
15:35就是一个
15:35这里这个可视化
15:37前面就是一个验证
15:39验证
15:39这里就是一个验证
15:40刚刚的逻辑是一样的
15:41
15:43是一个用户输入的类别名嘛
15:45输入然后类别名到类别ID的一个映射
15:47然后不存在会怎么样
15:49然后再来就是一个推理
15:50推理
15:50看到吧
15:52那这里有个就是cv2.convertcolor
15:56我们这里有个color
15:57rgb2.color
15:58我们进行一个图像的一个
16:01那个什么就是
16:01那个rgb的一个转换
16:03
16:05然后我们再生成一个报告
16:06它最后多少
16:07然后6.0
16:08bucked classes
16:09有多少classes
16:10直进度
16:11然后names
16:12怎么样
16:13然后这样子
16:14
16:15然后首先来不论一下
16:17NHP点P线外吧
16:50就是我们去把词帐的一个论划
16:51我们这里有个训练
16:51在肄里面
16:51是一些东西的
16:52也要
16:53这是我们可以看的
16:53这一分钟
16:53一分钟
17:00太大
17:07如果
17:07我们能够
17:16我们就输入一下这个链接
17:24嗯?还没下来出来吗?
17:32不应该啊
17:54继续都没下来出来
18:04哎呀,我要死的尴尬了
18:06我换个第二个试试看好吧
18:12第二个就是所有类别的检测
18:14你看这里我们不设promote text的
18:16发现没有
18:40重一下还出来了
18:46哎呀,我们拖哪张图片呢?
18:48我上看看啊
18:56看一下
19:01呃,有了我的随时好吧
19:06然后,呃,我选value吧
19:09比如选拾招
19:14present,skins,0.37
19:18这未发现目标是啥?
19:20哦,因为这个
19:21因为这个我没写
19:22我这个没设,没设发现目标
19:24我知道web里面没写进去
19:26看到就差不多这样的一个结果
19:28present,0.95,skin,0.65
19:29还有这个是什么?
19:31什么0.37啊,差不多
19:33
19:35你还可以下载到本地呢
19:36这结果
19:38
19:46那我们再把刚刚那个app.px跑一下吧
19:49刚刚应该是出bug了
19:50我感觉
20:17我们再换一张
20:20因为这张图片
20:22应该就检测不到
20:24他检测了一遍person
20:25看到未发现目标
20:26检测不到
20:27看到
20:34嗯,这就是差不多我们的一个逻辑了
20:37所以我们最后来梳理一下啊
20:39首先我们各个文件的一个作用
20:40就是man.ip.nb就是训练主代码
20:43p.py
20:43就是我们第一步要走p.py
20:45进一个数据文件中选取拆分
20:48然后transfer进行打标的一个转换成
20:50json转为txt
20:51然后man进行一个训练
20:53然后得到一个模型
20:54然后这样我们就可以用app
20:56或app.py进行一个调用了
20:58然后这两个呢
20:59就是data.yml是我们直接写好的路径
21:02你可以直接改路径
21:03然后这个是模型的原始文件
21:05对,然后这是下载的一些库
21:06你可以自己看一看
21:10还有一个最重要的东西啊
21:11你要在c忘号user-isr.cache-clip-vitb-32.pt
21:20你要下载这个
21:22你可以去hackingface进行搜索下载
21:32那下载数据就这三个
21:33荒虹的
21:34
21:38然后这就是我们这次进行一个教程
21:40我们下载数据就这次进行一个转换成
评论

推荐视频