labelImg的使用

YOLOv5训练笔记

一、环境安装

#pytorch 1.7.0
#torchvision 0.5.0
#vs2019

conda create -n yolov5 python=3.7
conda activate yolov5
conda install pytorch torchvision cudatoolkit=10.1
pip install -U -r requirements.txt


#安装pycocotools
   cd cocoapi/PythonAPI
   python setup.py build_ext install
   
#安装apex
   cd apex-master
   pip install -r requirements.txt
   python setup.py install

#测试网络是否可用
python detect.py --source 0 --weights="weights/yolov5x.pt"

将detect.py文件中的112行if cv2.waitKey(0) == ord('q'):这一句改成if cv2.waitKey(1) == ord('q')显示1ms等待

二、开始准备训练自己要识别的目标

labelImg的使用

安装:

	pip install pyqt5

​	pip install labelImg

使用:

​ 1、命令行模式 键入labelimg

​ 2、view 选上Auto save mode、show/hide label panel、Advanced mode。

​ 3、[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K55gxuCa-1604399843901)(C:\Users\18840\Pictures\tempsnip.png)]

img

​ 注:文件夹设置

​ 1、photos: 存放原图片

​ 2、Annotations: 存放xml标注信息文件

​ 3、JPEGImages: 存放压缩图片(我没有用上哎)

​ 4、YOLO数据集是txt格式的

​ 4、图片的来源,网上爬虫下载。

import requests
import os
import urllib
 
class Spider_baidu_image():
    def __init__(self):
        self.url = 'http://image.baidu.com/search/acjson?'
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.\
            3497.81 Safari/537.36'}
        self.headers_image = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.\
            3497.81 Safari/537.36','Referer':'http://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1557124645631_R&pv=&ic=&nc=1&z=&hd=1&latest=0&copyright=0&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&sid=&word=%E8%83%A1%E6%AD%8C'}
        # self.keyword = '刘亦菲壁纸'
        self.keyword = input("请输入搜索图片关键字:")
        self.paginator = int(input("请输入搜索页数,每页30张图片:"))
        # self.paginator = 50
        # print(type(self.keyword),self.paginator)
        # exit()
    def get_param(self):
        """
        获取url请求的参数,存入列表并返回
        :return: 
        """
        keyword = urllib.parse.quote(self.keyword)
        params = []
        for i in range(1,self.paginator+1):
            params.append('tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord={}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=&hd=1&latest=0&copyright=0&word={}&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&cg=star&pn={}&rn=30&gsm=78&1557125391211='.format(keyword,keyword,30*i))
        return params
 
    def get_urls(self,params):
        """
        由url参数返回各个url拼接后的响应,存入列表并返回
        :return:
        """
        urls = []
        for i in params:
            urls.append(self.url+i)
        return urls
    def get_image_url(self,urls):
        image_url = []
        for url in urls:
            json_data = requests.get(url,headers = self.headers).json()
            json_data = json_data.get('data')
            for i in json_data:
                if i:
                    image_url.append(i.get('thumbURL'))
        return image_url
    def get_image(self,image_url):
        """
        根据图片url,在本地目录下新建一个以搜索关键字命名的文件夹,然后将每一个图片存入。
        :param image_url: 
        :return: 
        """
        cwd = os.getcwd()
        file_name = os.path.join(cwd,self.keyword)
        if not os.path.exists(self.keyword):
            os.mkdir(file_name)
        for index,url in enumerate(image_url,start=1):
            with open(file_name+'\\{}.jpg'.format(index),'wb') as f:
                f.write(requests.get(url,headers = self.headers_image).content)
            if index != 0 and index % 30 == 0:
                print('{}第{}页下载完成'.format(self.keyword,index/30))
    def __call__(self, *args, **kwargs):
        params = self.get_param()
        urls = self.get_urls(params)
        image_url = self.get_image_url(urls)
        self.get_image(image_url)
 
if __name__ == '__main__':
    spider = Spider_baidu_image()
    spider()
 

5、把标注好的文件放在yolov5-master/data/coco/images/

images的目录结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lWSZbPAV-1604399843908)(C:\Users\18840\AppData\Roaming\Typora\typora-user-images\image-20201103110958548.png)]

(images是放图片的,图片分为训练集和测试集,labels是放txt文件的,同样分训练集和测试集,注意images文件下和labels文件夹下文件的对应顺序)

从Annotations复制txt文件时注意不要将classes.txt复制过去。

6、在yolov5_material\yolov5-master\data文件夹下

修改coco128.yaml,

​ 先修改nc后面的数,原来是2,训练多少种类别,就改成多少

​ 再修改names列表的内容,就是labelimg中的标签名,顺序要与classes.txt顺序对应

7、再yolov5_material\yolov5-master\models文件夹下

修改yolov5x.yaml(需要训练的那个 )

​ 修改nc后面的数,原来是2,训练多少种类别,就改成多少,其余的内容不懂的话就不要改

8、开始正式的训练

python train.py --img 640 --data data/coco128.yaml --cfg models/yolov5x.yaml --weights weights/yolov5x.pt --batch-size 8 --epochs 100

添加下滑线的位置都是可以修改的。学习率再train.py中的第30行修改

复制上面命令到命令行,在weights文件夹下得到best.pt。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pTIja1kS-1604399843910)(C:\Users\18840\AppData\Roaming\Typora\typora-user-images\image-20201103142507445.png)]

9、裁剪权重strip_optimizer(best),在train.py结尾调用,原项目没有,但是给了接口。

10、我的显卡是960M,训练不了。用的是yolov5s,可以训练。羡慕那些有着强力显卡的大佬。

11、检测,运行命令。

python detect.py --source 00000.jpg --weights=“weights/best.pt” --view-img

detect.py的命令

$ python detect.py --source 0  # webcam
                            file.jpg  # image 
                            file.mp4  # video
                            path/  # directory
                            path/*.jpg  # glob
                            rtsp://170.93.143.139/rtplive/470011e600ef003a004ee33696235daa  # rtsp stream
                            rtmp://192.168.1.105/live/test  # rtmp stream
                            http://112.50.243.8/PLTV/88888888/224/3221225900/1.m3u8  # http stream

12、结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fhWbFmW9-1604399843913)(C:\Users\18840\AppData\Roaming\Typora\typora-user-images\image-20201103143043498.png)]

训练集46张,测试集10张,epoch=100

12、结束

​ 原本用yolov5,把batch size设置到1,依然显示显卡内存不足,有个好显卡还是很重要的,特别是我这种对网络修改和优化都不了解的菜鸡来说。

1225900/1.m3u8 # http stream


12、结果

[外链图片转存中...(img-fhWbFmW9-1604399843913)]

训练集46张,测试集10张,epoch=100

12、结束

​	原本用yolov5,把batch size设置到1,依然显示显卡内存不足,有个好显卡还是很重要的,特别是我这种对网络修改和优化都不了解的菜鸡来说。

参考:B站 UP主:小鸡炖技术(https://www.bilibili.com/video/BV1jz411v7J7?t=546)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LabelImg是一个图像标注工具,可以用于在图像中标记物体的边界框。它可以帮助我们创建用于目标检测的数据集。LabelImg提供了一个图形化界面,使得标注过程更加直观和方便。官方的LabelImg界面是英文版的,但通过修改字体包,我们可以将界面修改成中文版,以便用户更好地使用使用LabelImg的步骤如下: 1. 首先,我们需要下载并安装LabelImg。可以从PyPI链接下载并安装,或者从官方GitHub仓库获取源代码自行安装。 2. 安装完成后,可以通过命令行启动LabelImg。在cmd中输入"labelimg"即可打开LabelImg工具。 3. 打开图片文件夹,选择要标注的图片进行展示。LabelImg支持常见的图片格式和分辨率,如高度375像素,宽度500像素的图片。 4. 在展示的图片上,使用鼠标绘制物体的边界框,标记出物体的位置和大小。标注效果会即时展示在图片上,并且在之前指定的文件夹下自动得到与图片同名的xml文件,其中包含了标注信息。 通过以上步骤,我们可以使用LabelImg进行目标检测数据集的标注。这样标注后的数据集可以被用于训练目标检测模型,如Faster R-CNN、YOLO、SSD等。 总结一下,LabelImg是一个可视化的图像标注工具,可以方便地标记物体的边界框。使用LabelImg可以通过几个简单的步骤打开图片文件夹、进行标注,并自动保存标注结果。这使得创建目标检测数据集变得更加高效和方便。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值