训练一个自己的YOLO-tiny模型

训练一个自己的YOLO-tiny模型

0x01 YOLO是什么

YOLO是一个实时目标检测系统,通俗点说就是在输入数据(图片或者视频)中查找特定的目标。举个例子,如果让一个专门识别龙的YOLO模型观看《权力的游戏》,在理想情况下,一旦画面中出现了龙,YOLO系统就会激动地用框框标记出画面中的龙。

为什么是YOLO-tiny

大概是贫穷限制了我的运算速度吧,YOLO-tiny用精确度换来了速度快和性能要求低的优点,适合练手和学习或者像我一样玩一玩的用户。

0x02 事前准备的准备

首先你可能需要一台电脑吧(可能有些用户会使用树莓派甚至是装了linux模拟器的安卓用户来虐待自己吧)。我的CPU是不知道应该叫啥四代ES版本的i7,显卡是上古时代的GTX860M,内存只有8G,名副其实的低配置用户了。顺便一提,这台电脑一天会绿屏N次,我会从现在开始记录绿屏次数,直到这篇文章写完,再顺带一提,这是二奶机,因为大奶机用的AMD矿卡,所以不能使用GPU来加速TensorFlow训练。再再顺带一提,旁边的室友虽然是1070Ti,但是他需要用他的电脑玩欢乐斗地主,所以不能帮我跑训练模型。
回到主线上来,你还得具有一些常识...会使用搜索引擎的那种常识。

0x03 事前准备

这里假设你已经安装好了Python,并且具备了一些"常识"后,你就可以继续往下看了。
为了方便演示,我使用了Python的虚拟环境,并且安装了如下库


images_11.png

0x04 配置相关文件

首先,我们需要对yolov3-tiny.cfg进行编辑,
在这个文件里,我们需要关注[yolo]和[yolo]前的一个[convolutional]
首先将所有[yolo]里面classes修改为1
得到classes=1
classes的含义是有多少种需要被识别的物体,这里我只训练yolo识别一种物体,所以设置为1

对所有[yolo]的前一个[convolutional]中的filters进行修改
其取值为filters = 3 * ( classes + 5 ),由于上一步中classes=1所以这里filters取18
到这里,yolov3-tiny.cfg就修改完毕了
然后是修改model_data中的coco_classes.txt和voc_classes.txt,将待检测物体的标签填写进去,每种标签占一行。因为我只有一种待识别物体,所以这两个文件中都只有一个单词
进入到yolo所在目录,运行

python convert.py -w yolov3-tiny.cfg yolov3-tiny.weights model_data/tiny_yolo_weights.h5

转换完成后可以看见如图所示内容

images_01.png

0x05 当然是制作数据啦,DIO

怎么制作数据呢...我写了ImgTag去标注数据,并且在训练过程中使用ImgTag产生的数据
[PlayStore链接]https://play.google.com/store/apps/details?id=com.chaosgoo.imgtag_free
[CoolApk链接]https://www.coolapk.com/apk/234539]
免费版本和收费版本功能完全一样,只是有无广告的区别。因为广告接入的是admob,所以国内网络并不保证广告一定会加载出来,因此二者的区别就更小了。当然,如果你看到了广告,希望您能戳以下广告啦。
后期计划加入从相机拍照然后标注和读取视频然后标注的功能。

0x06 训练模型

在训练自己的模型之前,我们还需要编辑一下train.py中的内容

  • anchors_path = 'model_data/tiny_yolo_anchors.txt' 指定anchors为tiny-yolo版本
  • 因为我已经明确知道我训练的是yolo-tiny模型,所以在27行,修改为is_tiny_version = True
    此时就可以执行
python train.py

漫长的等待之后,模型就跑完了.跑完以后会显示类似内容


images_02.png

0x07 使用模型

使用模型,就是指定yolo在检测目标时候,使用我们刚刚(可能并不是刚刚)产生的权重文件。
进入到yolo的目录,编辑yolo.py
其中需要重点关注的内容就是

 _defaults = {
    "model_path": 'model_data/yolo.h5', # 指定使用的模型
    "anchors_path": 'model_data/yolo_anchors.txt',
    "classes_path": 'model_data/coco_classes.txt',
    "score" : 0.3, # 当评估出的得分大于0.3时候,就标记出来
    "iou" : 0.45,
    "model_image_size" : (416, 416),
    "gpu_num" : 1,
}

我们需要修改以下model_path的值,因为..某些特殊的原因,我在运行的时候指定模型并不能正常进行,所以我使用这种方法。
model_path那一行修改为

"model_path": 'logs/000/trained_weights_final.h5',

我一共标注了200张图片,相对而言图片数量可能还不够,但是已经可以看到目前模型已经可以正常识别部分浣熊了。比如银河护卫队中的火箭浣熊哦


raccoon.gif

2020-12-29补档
训练数据集+示例代码地址
https://github.com/chaosgoo/imgtag_tutorial

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容