day2-day4

续上一篇:采用了opencv自己的多层链接分类器做了简单的检测后,发现根本达不到我所需的要求,于是某宝买了opencv+yolo+pytorch的网课,逐渐有了更深的理解,分类器已经是很过时的技术了,之前对深度学习和神经网络并没有了解,但是赶鸭子上架,应用重要,原理后续再学吧,在初步了解了CV的基本概念后,动手跟着做带神经网络和深度学习的目标检测

day5

动手吧!

首先下载YOLOV5,yolo2,3,4都是以论文的形式呈现的,而yoloV5更像是一个项目,有着成熟的代码,开箱即用的那种

1.先在D盘建了个文件夹YOLO,下载这个项目,然后解压到YOLO里

地址:https://github.com/ultralytics/yolov5

pytorch手写目标检测所有代码 pycharm目标检测_json

 

pytorch手写目标检测所有代码 pycharm目标检测_百度_02

 2.打开pycharm,把包导入:如果你的环境<py3.6,建议升级一下,如果符合,会导的就打开项目,不会导的就把yolov5-master文件复制到已经打开的项目下边

pytorch手写目标检测所有代码 pycharm目标检测_目标检测_03

打开文件就能看到这个

pytorch手写目标检测所有代码 pycharm目标检测_百度_04

 里边是运行起来所需加的一些包

按着命令下载就行

tips:我用的是CPU版本,因为笔记本没显卡,这样就有一个很重要的问题,就是pytorch的安装,建议先到pytorch官网去看下,因为如果直接pip装很容易出现torch和torchvison不匹配的情况,巨麻烦

2.这里安装就不展开讲了,运行这个

pytorch手写目标检测所有代码 pycharm目标检测_pytorch手写目标检测所有代码_05

 缺的就会提示你,这里说一下wandb的问题,我之前没接触过wandb,所以报错后就pip装了wandb,然后注册号拿到验证码,验证码不知道为什么pycharm复制不上去,只能手打,安装后,打开终端输入wandb login,登录上去,就可以用了

3.到这里,yolov5的配置就算完成了,接下来说说数据集制作的问题,我用了最土的办法就是使用labelme,也就是自己标注需要训练的图片

要装的东西

pip install pyqt 

pip install pillow

pip install labelme

装完终端输入lebelme就会弹出来标注窗口

在yolov5-master下创建一个文件夹 train,在train下创建三个文件夹img、json、labels

左边菜单open是开一张图,open dir就是打开目录(图片目录),开了图片后右键菜单,第一个是点连框,第二个是选区域框,我对精度要求并不高也没有姿态的需求,所以都采用了区域框,框完后保存,将生成的json文件存入之前创建的train中的json里

标注方法,我要的是猪,所以我就把图片里的猪框出来

4.到这一步,假设你已经完成了图片标注,也就是图片存在img里,标注文件存在json中,那么下一步,就是把json转化为txt

json转化txt代码

import json
import os
 
name2id =  {'hero':0,'sodier':1,'填你标注的标签':2}
def convert(img_size, box):
    dw = 1. / (img_size[0])#自己改
    dh = 1. / (img_size[1])
    x = (box[0] + box[2]) / 2.0 - 1
    y = (box[1] + box[3]) / 2.0 - 1
    w = box[2] - box[0]
    h = box[3] - box[1]
    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return (x, y, w, h)
 
def decode_json(json_floder_path, json_name):
    txt_name = '填train下的labels文件夹' + json_name[0:-5] + '.txt'
    #存放txt的绝对路径
    txt_file = open(txt_name, 'w')
 
    json_path = os.path.join(json_floder_path, json_name)
    data = json.load(open(json_path, 'r', encoding='gb2312',errors='ignore'))
 
    img_w = data['imageWidth']
    img_h = data['imageHeight']
 
    for i in data['shapes']:
        label_name = i['label']
        if (i['shape_type'] == 'rectangle'):
            x1 = int(i['points'][0][0])
            y1 = int(i['points'][0][1])
            x2 = int(i['points'][1][0])
            y2 = int(i['points'][1][1])
 
            bb = (x1, y1, x2, y2)
            bbox = convert((img_w, img_h), bb)
            txt_file.write(str(name2id[label_name]) + " " + " ".join([str(a) for a in bbox]) + '\n')
 
if __name__ == "__main__":
 
    json_floder_path = '填train下的json文件夹'

    json_names = os.listdir(json_floder_path)
    for json_name in json_names:
        decode_json(json_floder_path, json_name)

5.到此,json文件夹就可以删了,剩下img文件夹和labels文件夹,这就是我们需要拿来训练的数据集


训练截图

pytorch手写目标检测所有代码 pycharm目标检测_百度_06

时间关系,本篇作为记录匆匆赶出来的,细节不到位,接下来我要去尝试用百度的paddlepaddle啦!