通过Tensorflow-DirectML 快速启用 AMD及NVIDIA GPU 加速

2023-10-20 22:50

本文主要是介绍通过Tensorflow-DirectML 快速启用 AMD及NVIDIA GPU 加速,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

系列文章目录

第一章 Tensorflow 机器学习入门之环境搭建及图片训练与识别


文章目录

目录

前言

一、本文目的是什么?

二、使用步骤

1.安装微软 Tensorflow-DirecTML支持

2.Python 环境及Tensorflow-DirecTML安装注意事项

​3.目标识别输入数据处理

4.进行数据处理,学习

​5.生成PB文件,用于后续的目标识别

6.目标识别

总结

前言

随着人工智能的不断发展,机器学习也越来越重要,很多人都开启了学习路程,本文就介绍了机器学习的基础内容。

不同的GPU与Tensorflow进行整合调用的时候,会有很多的技术细节,最近使用微软的DirectML感觉还可以,非常方便,在windows及WSL Linux下都能很好的使用GPU的运算能力。把这个操作过程记录下,方便自己,也方便初学的同学。

我的系统环境:

Windows11

GPU:AMD Radeon RX6700TX

python:Python 3.6.13 :: Anaconda, Inc.(注意,不应超过3.6版本

WSL:Ubuntu 20.04.

conda 4.11.0


一、本文目的是什么?

通过Tensorflow搭建训练环境及利用训练结果进行目标检测。本文包括操作流程说明及数据文件和代码。我在windows11及ubuntu20.04上都走通了整个流程,以下介绍以ubuntu操作为主,windows根据情况转换即可。

二、使用步骤

1.安装微软 Tensorflow-DirecTML支持

        微软与Nvidia、AMD 和英特尔等供应商合作,以确保在 Windows 10及以上 和 WSL 上提供流畅的体验,以便在支持 DirectX 12 的 GPU 上加速训练。关于GPU的驱动支持,请看微软的说明:TensorFlow with DirectML on WSL | Microsoft Docs

2.Python 环境及Tensorflow-DirecTML安装注意事项

        我使用conda 作为python环境管理,非常方便,简单易用,安装成功后,应当创建专用于DirecTML的环境,我是这样的:

conda activate directm

安装DirecTML:

pip install tensorflow-directml

     注意:如果原先有安装过 tensorflow,一定要卸载,如果又有安装过tensorflow-directml,而且未起作用,也应当一并卸载。

pip uninstall tensorflow

pip uninstall tensorflow-directml

如果不是新创建的conda directml,尽量卸载完所有tensorflow有关的模块,否则。。。。

pip list | grep tensorflow

pip uninstall tensorflow***

        安装成功后,查看下tensorflow相关包,应当是这个样子的,注意:不能再去安装 tensorflow:

pip list | grep tensor


tensorboard              1.15.0
tensorboard-data-server  0.6.1
tensorboard-plugin-wit   1.8.1
tensorflow-directml      1.15.5
tensorflow-estimator     1.15.1

3.目标识别输入数据处理

将已经标定的图片及xml文件转换成 .record文件(xml文件可以使用labelImg进行标识产生,不在本文讨论范围。):

首先是 xml转换为csv,代码中涉及路径的,需要根据实际情况修改,python xml_to_csv.py中有一处需要修改:

cd /home/akun-u/dev/deeplearning/raccoon_datasetpython xml_to_csv.py

执行上述命令后,会在当前目录生成两个csv文件

Successfully converted files:201 xml to csv(./train_labels.csv).
Successfully converted files:16 xml to csv(./test_labels.csv).

xml_to_csv.py文件内容如下:

import glob
import os
import xml.etree.ElementTree as ETimport pandas as pddef xml_to_csv(path):xml_list = []for xml_file in glob.glob(path + '/*.xml'):tree = ET.parse(xml_file)root = tree.getroot()for member in root.findall('object'):value = (root.find('filename').text,int(root.find('size')[0].text),int(root.find('size')[1].text),member[0].text,int(member[4][0].text),int(member[4][1].text),int(member[4][2].text),int(member[4][3].text))xml_list.append(value)column_name = ['filename', 'width', 'height', 'class', 'xmin', 'ymin', 'xmax', 'ymax']xml_df = pd.DataFrame(xml_list, columns=column_name)return xml_dfdef main():for direcory in ['train','test']:image_path = os.path.join('/home/akun-u/dev/deeplearning/raccoon_dataset/annotations', direcory)print("xmlfile:", image_path)xml_df = xml_to_csv(image_path)csv_path = './{0}_labels.csv'.format(direcory)xml_df.to_csv(csv_path, index=None)print(f'Successfully converted files:{len(xml_df)} xml to csv({csv_path}).')main()

接着将csv文件转换为 .record:注意文件路径要填写正确

cd /home/akun-u/dev/deeplearning/raccoon_datasetpython generate_tfrecord.py --csv_input=test_labels.csv --output_path=data/dataset/test.record --image_dir=imagespython generate_tfrecord.py --csv_input=train_labels.csv --output_path=data/dataset/train.record --image_dir=images

generate_tfrecord.py文件内容如下:

"""
Usage:# From tensorflow/models/# Create train data:python generate_tfrecord.py --csv_input=data/train_labels.csv  --output_path=train.record# Create test data:python generate_tfrecord.py --csv_input=data/test_labels.csv  --output_path=test.record#yhk add
python generate_tfrecord.py \--csv_input=data/test_labels.csv \--output_path=data/dataset/test.record \--image_dir=images/
python generate_tfrecord.py \--csv_input=data/train_labels.csv \--output_path=data/dataset/train.record \--image_dir=images/"""
from __future__ import absolute_import, division, print_functionimport io
import os
from collections import OrderedDict, namedtupleimport pandas as pd
import tensorflow as tf2tf= tf2.compat.v1 #yhk addfrom object_detection.utils import dataset_util
from PIL import Imageflags = tf.app.flags
flags.DEFINE_string('csv_input', '', 'Path to the CSV input')
flags.DEFINE_string('output_path', '', 'Path to output TFRecord')
flags.DEFINE_string('image_dir', '', 'Path to images')
FLAGS = flags.FLAGS# TO-DO replace this with label map
def class_text_to_int(row_label):if row_label == 'raccoon':return 1else:return 2def split(df, group):data = namedtuple('data', ['filename', 'object'])gb = df.groupby(group)return [data(filename, gb.get_group(x)) for filename, x in zip(gb.groups.keys(), gb.groups)]def create_tf_example(group, path):with tf.gfile.GFile(os.path.join(path, '{}'.format(group.filename)), 'rb') as fid:encoded_jpg = fid.read()encoded_jpg_io = io.BytesIO(encoded_jpg)image = Image.open(encoded_jpg_io)width, height = image.sizefilename = group.filename.encode('utf8')image_format = b'jpg'xmins = []xmaxs = []ymins = []ymaxs = []classes_text = []classes = []for index, row in group.object.iterrows():xmins.append(row['xmin'] / width)xmaxs.append(row['xmax'] / width)ymins.append(row['ymin'] / height)ymaxs.append(row['ymax'] / height)classes_text.append(row['class'].encode('utf8'))classes.append(class_text_to_int(row['class']))tf_example = tf.train.Example(features=tf.train.Features(feature={'image/height': dataset_util.int64_feature(height),'image/width': dataset_util.int64_feature(width),'image/filename': dataset_util.bytes_feature(filename),'image/source_id': dataset_util.bytes_feature(filename),'image/encoded': dataset_util.bytes_feature(encoded_jpg),'image/format': dataset_util.bytes_feature(image_format),'image/object/bbox/xmin': dataset_util.float_list_feature(xmins),'image/object/bbox/xmax': dataset_util.float_list_feature(xmaxs),'image/object/bbox/ymin': dataset_util.float_list_feature(ymins),'image/object/bbox/ymax': dataset_util.float_list_feature(ymaxs),'image/object/class/text': dataset_util.bytes_list_feature(classes_text),'image/object/class/label': dataset_util.int64_list_feature(classes),}))return tf_exampledef main(_):writer = tf.python_io.TFRecordWriter(FLAGS.output_path)path = os.path.join(FLAGS.image_dir)examples = pd.read_csv(FLAGS.csv_input)grouped = split(examples, 'filename')for group in grouped:tf_example = create_tf_example(group, path)writer.write(tf_example.SerializeToString())writer.close()output_path = os.path.join(os.getcwd(), FLAGS.output_path)print('Successfully created the TFRecords: {}'.format(output_path))if __name__ == '__main__':tf.app.run()

4.进行数据处理,学习

在接着执行以下语句之前,请:

1.修改 /deeplearning/pipeline.config 文件中的路径(有5处)

2.根据实际情况调整 /deeplearning/conf/clickv2_label_map.pbtxt

接下来执行:python object_detection/model_main.py

注意:执行python object_detection/model_main.py时,尽量一行写完整个语句,我原先使用了 \ 连接多行语句,一直调试失败,浪费了不少时间。

语句执行过程中,有出现 “DirectML: creating device on adapter 0 (AMD Radeon RX 6700 XT”,字样

RX 6700 XT是我的显卡型号,请注意看,该字样能够确定是否有使用GPU,这个执行过程会花费很长时间,我的显卡在--num_train_steps=50000 --num_eval_steps=2000的情况下,执行了约3小时。

cd  /home/akun-u/dev/deeplearning/models/researchpython object_detection/model_main.py --pipeline_config_path=/home/akun-u/dev/deeplearning/conf/ssd_mobilenet_v2_coco_2018_03_29/pipeline.config --model_dir=/home/akun-u/dev/deeplearning/models --num_train_steps=50000 --num_eval_steps=2000 --alsologtostderr

该命令会在 models目录下生成多个model.ckpt开头的文件。

执行情况如图:

5.生成PB文件,用于后续的目标识别

cd /home/akun-u/dev/deeplearning/models/research/object_detectionpython export_inference_graph.py --input_type=image_tensor --pipeline_config_path=/home/akun-u/dev/deeplearning/conf/ssd_mobilenet_v2_coco_2018_03_29/pipeline.config --trained_checkpoint_prefix=/home/akun-u/dev/deeplearning/models/model.ckpt-50000 --output_directory=/home/akun-u/dev/deeplearning/train_pb

6.目标识别

注意:修改识别后文件保存路径(img_recongnize.py中:1处)

cd /home/akun-u/dev/deeplearningpython img_recongnize.py

运行后会在指定目录下生成多个jpg文件,打开可看到可识别目标被框选,如下图:


总结

以上就是今天要讲的内容,本文仅仅简单介绍了tensorflow-directmp的基本使用,自己过了好多坑,终于爬出,留个文本。。。

我的代码:https://download.csdn.net/download/sinat_32065311/85275745

代码来源:

GitHub - microsoft/tensorflow-directml: Fork of TensorFlow accelerated by DirectML

https://github.com/tensorflow/models

https://github.com/datitran/raccoon_dataset

Tensorflow Object detection 教程

这篇关于通过Tensorflow-DirectML 快速启用 AMD及NVIDIA GPU 加速的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/250218

相关文章

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

AI Toolkit + H100 GPU,一小时内微调最新热门文生图模型 FLUX

上个月,FLUX 席卷了互联网,这并非没有原因。他们声称优于 DALLE 3、Ideogram 和 Stable Diffusion 3 等模型,而这一点已被证明是有依据的。随着越来越多的流行图像生成工具(如 Stable Diffusion Web UI Forge 和 ComyUI)开始支持这些模型,FLUX 在 Stable Diffusion 领域的扩展将会持续下去。 自 FLU

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

如何用GPU算力卡P100玩黑神话悟空?

精力有限,只记录关键信息,希望未来能够有助于其他人。 文章目录 综述背景评估游戏性能需求显卡需求CPU和内存系统需求主机需求显式需求 实操硬件安装安装操作系统Win11安装驱动修改注册表选择程序使用什么GPU 安装黑神话悟空其他 综述 用P100 + PCIe Gen3.0 + Dell720服务器(32C64G),运行黑神话悟空画质中等流畅运行。 背景 假设有一张P100-

v0.dev快速开发

探索v0.dev:次世代开发者之利器 今之技艺日新月异,开发者之工具亦随之进步不辍。v0.dev者,新兴之开发者利器也,迅速引起众多开发者之瞩目。本文将引汝探究v0.dev之基本功能与优势,助汝速速上手,提升开发之效率。 何谓v0.dev? v0.dev者,现代化之开发者工具也,旨在简化并加速软件开发之过程。其集多种功能于一体,助开发者高效编写、测试及部署代码。无论汝为前端开发者、后端开发者

利用Django框架快速构建Web应用:从零到上线

随着互联网的发展,Web应用的需求日益增长,而Django作为一个高级的Python Web框架,以其强大的功能和灵活的架构,成为了众多开发者的选择。本文将指导你如何从零开始使用Django框架构建一个简单的Web应用,并将其部署到线上,让世界看到你的作品。 Django简介 Django是由Adrian Holovaty和Simon Willison于2005年开发的一个开源框架,旨在简

CentOs7上Mysql快速迁移脚本

因公司业务需要,对原来在/usr/local/mysql/data目录下的数据迁移到/data/local/mysql/mysqlData。 原因是系统盘太小,只有20G,几下就快满了。 参考过几篇文章,基于大神们的思路,我封装成了.sh脚本。 步骤如下: 1) 先修改好/etc/my.cnf,        ##[mysqld]       ##datadir=/data/loc

SAM2POINT:以zero-shot且快速的方式将任何 3D 视频分割为视频

摘要 我们介绍 SAM2POINT,这是一种采用 Segment Anything Model 2 (SAM 2) 进行零样本和快速 3D 分割的初步探索。 SAM2POINT 将任何 3D 数据解释为一系列多向视频,并利用 SAM 2 进行 3D 空间分割,无需进一步训练或 2D-3D 投影。 我们的框架支持各种提示类型,包括 3D 点、框和掩模,并且可以泛化到不同的场景,例如 3D 对象、室

UE5 半透明阴影 快速解决方案

Step 1: 打开该选项 Step 2: 将半透明材质给到模型后,设置光照的Shadow Resolution Scale,越大,阴影的效果越好

快速排序(java代码实现)

简介: 1.采用“分治”的思想,对于一组数据,选择一个基准元素,这里选择中间元素mid 2.通过第一轮扫描,比mid小的元素都在mid左边,比mid大的元素都在mid右边 3.然后使用递归排序这两部分,直到序列中所有数据均有序为止。 public class csdnTest {public static void main(String[] args){int[] arr = {3,