视频与AI,与进程交互(二) pytorch 极简训练自己的数据集并识别

这篇具有很好参考价值的文章主要介绍了视频与AI,与进程交互(二) pytorch 极简训练自己的数据集并识别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目标学习任务

检测出已经分割出的图像的分类

2 使用pytorch

pytorch 非常简单就可以做到训练和加载

2.1 准备数据

视频与AI,与进程交互(二) pytorch 极简训练自己的数据集并识别
如上图所示,用来训练的文件放在了train中,验证的文件放在val中,train.txt 和 val.txt 分别放文件名称和分类类别,然后我们在代码中写名字就行

里面我就为了做一个例子,放了两种文件,1 是 卡宴保时捷,2 是工程车,如下图所示
视频与AI,与进程交互(二) pytorch 极简训练自己的数据集并识别
train.txt 如下图所示
视频与AI,与进程交互(二) pytorch 极简训练自己的数据集并识别
val.txt 也是同样如此

3 show me the code

3.1 装载数据类

新增一个loaddata.py 文件

import torch
import random
from PIL import Image
class LoadData(torch.utils.data.Dataset):
    def __init__(self, root, datatxt, transform=None, target_transform=None):
        super(LoadData, self).__init__()
        file_txt = open(datatxt,'r')
        imgs = []
        for line in file_txt:
            line = line.rstrip()
            words = line.split('|')
            imgs.append((words[0], words[1]))

        self.imgs = imgs
        self.root = root
        self.transform = transform
        self.target_transform = target_transform

    def __getitem__(self, index):
        random.shuffle(self.imgs)
        name, label = self.imgs[index]
        img = Image.open(self.root + name).convert('RGB')
        if self.transform is not None:
            img = self.transform(img)
        label = int(label)
        return img, label

    def __len__(self):
        return len(self.imgs)

LoadData 类是从torch.util.data.Dataset上继承下来的,需要一个transform类输入,实际上就是转化大小

3.2 网络类

定义一个网络类,只有两个输出

import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 16, 3)
        self.pool = nn.MaxPool2d((2, 2))
        self.pool1 = nn.MaxPool2d((2, 2))
        self.conv2 = nn.Conv2d(16, 32, 3)
        self.fc1 = nn.Linear(36*36*32, 120)
        self.fc2 = nn.Linear(120, 60)
        self.fc3 = nn.Linear(60, 2)

    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = self.pool1(F.relu(self.conv2(x)))
        x = x.view(-1, 36*36*32)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

3.3 主要流程

import torch
from PIL import Image
import torchvision.transforms as transforms
import matplotlib.pyplot as plt
import numpy as np
import torch.nn as nn
import torch.optim as optim
from loaddata import LoadData
from modelnet import Net

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
print(device)


classes = ['工程车','卡宴']
transform = transforms.Compose(
   [transforms.Resize((152, 152)),transforms.ToTensor(),
    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
train_data=LoadData(root ='./data/train/',
                 datatxt='./data/'+'train.txt',
                 transform=transform)
test_data=LoadData(root ='./data/val/',
                datatxt='./data/'+'val.txt',
                transform=transform)
train_loader = torch.utils.data.DataLoader(dataset=train_data, batch_size=2, shuffle=True)
test_loader = torch.utils.data.DataLoader(dataset=test_data, batch_size=2)

def imshow(img):
   img = img / 2 + 0.5     # unnormalize
   npimg = img.numpy()
   plt.imshow(np.transpose(npimg, (1, 2, 0)))
   plt.show()


net = Net()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)

for epoch in range(10):
   running_loss = 0.0
   for i, data in enumerate(train_loader, 0):
       inputs, labels = data
       optimizer.zero_grad()
       outputs = net(inputs)
       loss = criterion(outputs, labels)
       loss.backward()
       optimizer.step()

       running_loss += loss.item()
       if i % 200 == 0:
           print('[%d, %5d] loss: %.3f' %
                 (epoch + 1, i + 1, running_loss / 200))
           running_loss = 0.0

print('Finished Training')

PATH = './test.pth'
torch.save(net.state_dict(), PATH)

net = Net()
net.load_state_dict(torch.load(PATH))

correct = 0
total = 0
with torch.no_grad():
   for data in test_loader:
       images, labels = data
       outputs = net(images)
       _, predicted = torch.max(outputs.data, 1)
       total += labels.size(0)
       correct += (predicted == labels).sum().item()

print('Accuracy of the network on the test images: %d %%' % (
   100 * correct / total))

视频与AI,与进程交互(二) pytorch 极简训练自己的数据集并识别
如上图所示,epoch为5时精确度为80%,为10时精确度为100%,各位不要当真,这这是训练集里面的数据集做识别,并不是真的精确度。

3.4 识别代码

import torch
from PIL import Image
import torchvision.transforms as transforms
import matplotlib.pyplot as plt
import numpy as np
import torch.nn as nn
from modelnet import Net

PATH = './test.pth'
transform = transforms.Compose(
    [transforms.Resize((152, 152)),transforms.ToTensor(),
     transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])



net = Net()
net.load_state_dict(torch.load(PATH))

img = Image.open("./data/val/102.jpg").convert('RGB')
img = transform(img)
with torch.no_grad():
    outputs = net(img)
    _, predicted = torch.max(outputs.data, 1)
    print("the 102 img lable is ",predicted)

如下图所示,102 为卡宴识别为1 正确
视频与AI,与进程交互(二) pytorch 极简训练自己的数据集并识别

后记

后面我们准备是从视频中传递过来图像进行分类,同时使用我们的工具VT解码视频后进行内存共享来生成图像,而不是从磁盘加载。要用到我们的c++ 解码工具,和pytorch进行交互
以下是第一篇文章:视频与AI,与进程交互(一)
VT 工具准备开源,端午节节后开出来文章来源地址https://www.toymoban.com/news/detail-496651.html

到了这里,关于视频与AI,与进程交互(二) pytorch 极简训练自己的数据集并识别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AI学习笔记四:yolov5训练自己的数据集

    若该文为原创文章,转载请注明原文出处。 一般情况下,大部分人的电脑都是没有cpu的,cpu也是可以训练的,但花费的时间太长,实际200张图片,使用CPU训练300轮花了3天,本章记录使用云服务器来训练自己的数据集。 使用的云服务器是AutoDL,一直在使用,性价比还是比较高的

    2024年02月15日
    浏览(54)
  • 【AI】yolov5:数据下载、图像标注、训练、预测等,超详细笔记;pytorch转onnx再转TensorRT;训练识别口罩

    https://gitcode.net/mirrors/ultralytics/yolov5/ 1)安装pytorch 2)安装cudnn 3)下载yolov5源码: 4)安装yolov5依赖

    2024年02月15日
    浏览(48)
  • 基于pytorch自己训练一个小型的chatgpt闲聊程序

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 OpenAI公式在2018年提出了一种生成式预训练(Generative Pre-Trainging,GPT)模型用来提升自然语言理解任务的效果,正式将自然语言处理带入预训练时代,预训练时代意味着利用更大规模的文本数据一级更深层次

    2023年04月26日
    浏览(54)
  • 训练自己的ai模型(四)学习笔记与项目实操(什么也不懂,但有数据,怎么搞?无监督学习算法)

    很开心有人还在催更,有点小震惊吧。 (原来真有人在csdn发学习记录啊) (原来真有人在csdn看学习记录啊) ai模型方向的知识,我也在学习中,可能疑惑不比大家少。 直接开始! 不管你的是什么数据,只要你有数据,你就可以试一试,跑一跑。 使用 无监督学习算法 。

    2024年02月07日
    浏览(69)
  • 【AI实战】训练一个自己的ChatGPT

    本文使用 Alpaca-LoRA 来训练一个自己的 ChatGPT,数据集包括开源的55w数据集和我自己的1000w的医疗问答数据集。 CUDA 10.2 Ubuntu 20.04 python 3.8 torch 2.0.0 使用 Alpaca-LoRA 的代码,我们先 clone Alpaca-LoRA: 若出现下面的报错信息: 可以按照这篇文章进行处理: https://blog.csdn.net/helloasimo/a

    2024年02月03日
    浏览(50)
  • 【Bubbliiiing视频记录】Pytorch 搭建自己的Unet语义分割平台

    b站 地址 语义分割:对图像每个像素点进行分类 常见神经网络处理过程:Encoder提取特征,接着Docoder恢复成原图大小的图片 分为三个部分 主干特征提取部分: 卷积和最大池化的堆叠 获得五个初步有效特征层 加强特征提取部分: 五个初步有效特征层进行上采样 + 特征融合

    2024年02月12日
    浏览(41)
  • 训练自己的ai模型(一)学习笔记与项目实操

    ai模型大火,作为普通人,我也想做个自己的ai模型 收集数据:需要确定想要训练模型的数据类型,并找到相应的数据源。这可能需要一些领域知识和搜索技巧,以找到合适的数据源。 数据清理和预处理:一旦收集到数据,需要对其进行清理和预处理,以确保数据集的质量和

    2024年02月11日
    浏览(42)
  • AI开发之——Leonardo—Training&Datasets自己训练模型(6)

    准备条件 模型训练过程 使用训练模型 至少5张训练模型图像,最高不超过30张 3.1 切换到 TrainingDatasets 的 Your Datasets 下 3.2 点击 Create New Dataset 按钮后弹出如下界面,填写Name和Description内容 3.3 点击 Create Dataset 按钮后,切换到 Edit Dataset 选项卡 3.4 点击底部的 Upload Images ,将图片

    2024年02月13日
    浏览(38)
  • pytorch快速训练ai作画模型的python代码

    在 PyTorch 中训练 AI 作画模型的基本步骤如下: 准备数据集: 需要准备一个包含许多图像的数据集, 这些图像可以是手绘的或者是真实的图像. 定义模型: 选择一个适当的深度学习模型, 并使用 PyTorch 定义该模型. 例如, 可以使用卷积神经网络 (CNN) 或者生成对抗网络 (GAN). 训练模型

    2024年02月09日
    浏览(56)
  • Yolov5+win10+pytorch+android studio实现安卓实时物体检测实战(coco128/coco/自己的训练集)

    在这里感谢各个大佬的参考文献及资料。在我学习深度学习的过程中,我参考了如下网站: Win10+PyTorch+YOLOv5 目标检测模型的训练与识别 | | 洛城风起 YOLOv5 COCO数据集 训练 | 【YOLOv5 训练】_墨理学AI的博客-CSDN博客_yolov5训练coco数据集 系统环境:win10 cuda 版本:11.3 Cuda环境配置 在

    2023年04月11日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包