一、注册,并取得算力
不多赘述
二、选择模型
这里选择了目标检测模型
RT-DETR_HGNetV2_h
点击运行一下创造项目
建议选择消耗最大的卡,每个月会有时间限制
这里已经打开一个了,所以选不了
三、数据集
如果只是熟悉操作的话可以选择预设已有的数据集
点击启动项目上方的修改按钮
在这里添加数据集
3.1预设数据集只要点击添加就可以了,但创建数据集要考虑的事就很多了
这里使用labelme进行数据集创建
先下载pip
然后通过指令下载labelme:
pip install labelme
速度慢的话可以在后面跟上国内的pip源,如:
pip install labelme -i https://pypi.tuna.tsinghua.edu.cn/simple
然后输入labelme打开软件,要是打不开就试试管理员终端
处理图片信息
大多数模型训练不需要过于清晰的图片,所以这里要降低图片的像素,具体降低多少根据实际情况而定
import cv2
import os
#批量重新设置图片尺寸大小
path = 'A:\\opencv\\'
for filename in os.listdir(path):
file = path + filename
img = cv2.imread(file)
img2 = cv2.resize(img, (0, 0), None, 0.5, 0.5)# 0.5,0.5为长宽降低的比例
cv2.imwrite(file, img2)
然后就是改名了,如果名字不统一后面会比较麻烦
import glob
import os
#图片批量重命名
directory = 'A:\opencv'
pattern = '*.jpg'
i = 0
for filename in os.listdir('A:\\opencv\\images'):
newname='cat.'+str(i)+pattern
i+=1
os.rename('A:\\opencv\\images\\'+filename,'A:\\opencv\\images\\'+newname)
具体要怎么改根据自己的情况而定
打开目录,选择拍好的图片文件夹
点击左上角的文件按钮
1.自动保存打开(打的快)
2.路径选到自己的json文件夹(最好就在图片旁边建一个文件夹,后面好找到)
3.保存图像关闭(大多数不需要,会白白增大json文件的占用储存)
点击左上角的编辑按钮选择矩形
有的模型只接收矩形框进行训练,不然后面验证数据集的时候就要伏笔了,会通不过。
框选
然后一个个框就好了
这里采用了labelme数据集的标准文件夹格式
标注的文件在jsons里面
然后是很重要的一点,要重写所有json文件的图片路径。
这似乎是因为系统的问题,示例文件中json的图片路径应该是Linux系统下标注的,与windows系统中标注的图片路径格式不同
直接标注的json文件中的图片路径:
示例中需要的文件路径格式:
这会在后面验证数据的时候报不知道的错误:
重写json文件
import json
import os
#重写josn路径
# 读取JSON文件
path = 'D:\\opencv\\train\cat_all\\jsons\\'
for i in range(10650):
newPath = "cat." + str(i) + ".jpg"
Path = path + "cat." + str(i) + ".json"
if os.path.exists(Path):
with open(Path, 'r') as f:
data = json.load(f)
# 修改图像路径
data['imagePath'] = newPath
# 保存修改后的JSON文件
with open(Path, 'w') as f:
json.dump(data, f, indent=4)
其中for i in range()的参数自己设置成图片的数量就可以
写train_anno_list.txt文件
#重写说明性.txt文件
import os
import json
filelist = open(r'D:\opencv\train\cat_all\train_anno_list.txt','r+',encoding = 'utf-8')
line = filelist.readlines()
path = 'D:\\opencv\\train\cat_all\\jsons\\'
for i in range(20000):
# append = "cat." + str(i) + ".jpg"
Path = path + "cat." + str(i) + ".json"
if os.path.exists(Path):
filelist.write("jsons/cat." + str(i) + ".json\n")
else:
print(i)
然后随便选取剪切一部分到验证集txt文件(val_anno_list.txt)里就好,要是验证集为空的话也会在初始验证数据集时报错。虽然平台自带分割数据集的功能。
unlabel文件空了似乎没有什么事,但示例数据集中此文件的格式似乎不太一样:
没有前面的json/路径
最后将整个文件夹压缩成zip,回到老地方点击创建数据集
然后进入环境,选择开发者模式,解压数据集
unzip -d ../ cat_all.zip
路径啥的可以自己定。
然后图形化操作平台很全面
一步步来就可以了
转换数据集格式等等
四、快进到模型部署
最大的坑来了:python版本和系统
ubuntu的python3.10和3.9的一直报错,windows也一直报错
比如opencv的python包,报一个错去搜,说包的版本高了,要降。
等降了,又报一个错,又说版本低了,要升。
你两打一架吧。
然后各种版本不对,缺少函数,参数缺失
最后直接转Ubuntu的python3.8万事大吉
但他的示例模型文件有点不好,需要在终端输入参数才能正常调用
以下代码可以直接调用摄像头
# Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import fastdeploy as fd
import cv2
import os
import numpy as np
import time
from tqdm import tqdm
def build_option():
option = fd.RuntimeOption()
option.use_paddle_infer_backend()
option.paddle_infer_option.enable_log_info = False
return option
cv2.namedWindow("test") # 创建一个已windowname为名字的窗口
cap = cv2.VideoCapture(0) # camera_id为设备摄像头的id,默认是0,如果有usb摄像头可能会变为1
option = build_option()
# 配置runtime,加载模型
model = fd.vision.detection.PaddleDetectionModel(
"inference.pdmodel", "inference.pdiparams", "inference.yml", runtime_option=option)
dump_result = dict()
while cap.isOpened():
ok, frame = cap.read() # 读取一帧数据,ok表示摄像头读取状态,frame表示摄像头读取的图像矩阵mat类型
if not ok:
break
result = model.predict(frame)
# 预测结果可视化
vis_im = fd.vision.vis_detection(frame, result, score_threshold=0.5)
cv2.imshow("test", vis_im) # 显示图像
c = cv2.waitKey(10)
if c & 0xFF == ord('q'): # 退出条件
break
cap.release()
# 释放摄像头并销毁所有窗口
cv2.destroyAllWindows()
#
# cv2.imwrite("visualized_result.jpg", vis_im)
# print("Visualized result save in ./visualized_result.jpg")