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、
注:文件夹设置
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=1557124
645631_R&pv=&ic=&nc=1&z=&hd=1&latest=0©right=0&se=1&showtab=0&fb=0&width=&he
ight=&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©right=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的目录结构
(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。
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、结果
训练集46张,测试集10张,epoch=100
12、结束
原本用yolov5,把batch size设置到1,依然显示显卡内存不足,有个好显卡还是很重要的,特别是我
这种对网络修改和优化都不了解的菜鸡来说。
参考:B站 UP主:小鸡炖技术(https://www.bilibili.com/video/BV1jz411v7J7?t=546)