最详细的 yolov5 环境配置构建 + 所需文件的配置
yolov5的配置过程总体来说还算简单,但是网上大部分博客都没有仔细介绍具体步骤,本文将从最细节的层面记录windows10系统下的yolov5环境配置的全过程,以及yolov5使用的一些细节,以及如何制作和训练自己的数据集。
注:yolov5官网代码更新速度较快,相关依赖环境如pytorch,apex等也会采用更新的版本。博主上传了8月配置成功的工程文件,如需要老版本代码可以自行下载或从官网下载。若配置遇到困难可以参考评论区的一些回答,若还未解决,欢迎评论区留言或私信,博主将尽力解决。
@
-
yolov5介绍
-
资料
- 一、基础部分:
- 二、代码部分:
- 三、优秀的实际应用:
-
资料
- 环境配置所需资源
- 第一步-下载源码
- 第二步-安装anaconda与pycharm
- 第三步-安装cuda10.2和cudnn-10.2-windows10-x64-v7.6.5.32
- 第四步-安装pytorch1.5.1以及其他库
- 第五步-下载权重文件
- 第六步-实际测试
- 第七步(可选操作)-安装apex
-
第八步-训练自制数据集
- 1.coco128数据集
- 2.coco2017数据集
- 3.真正的自制数据集
-
4.虚假的自制数据集
- 1.生成随机数据集的代码如下
- 2.创建yaml文件
- 3.更改train.py的设置
yolov5介绍
先来介绍一下yolov5
yolov5的特点之一就是权重文件非常之小,可以搭载在配置更低的移动设备上
而且yolov5的速度较yolov4更快,准确度更高
此博客还包括一些在学习过程中从其他大佬那整理的资料,包括:
资料
一、基础部分:
1.深入浅出Yolo系列之Yolov3&Yolov4&Yolov5核心基础知识完整讲解
2.深入浅出Yolo系列之Yolov5核心基础知识完整讲解
3.从V1到V4,让你读懂YOLO原理
二、代码部分:
4.YOLOv5代码详解(yolov5l.yaml部分)
5.YOLOv5代码详解(common.py部分)
6.YOLOv5代码详解(test.py部分)
7.YOLOv5代码详解(train.py部分)
三、优秀的实际应用:
8.实时吸烟目标检测
环境配置所需资源
使用到的工具有
1.anaconda,pycharm
2.cuda10.2+cudnn-10.2-windows10-x64-v7.6.5.32+pytorch1.5.1-gpu+。。。。。。。。
ps(对于本文使用的旧版代码pytorch只要大于等于1.5.1即可,新版代码需与官网要求相同--1.6.0+,本文将在之后说明安装步骤)
所需资源:
本博客免费提供所有win10的cuda和cudnn,百度云,提取码:78il
以及anaconda和pycharm的安装包百度云,提取码:95q7
以及权重文件百度云,提取码:9pfg
以及GitHub官方yolov5源码百度云(官网源码已更新,建议下载此源码),提取码:tyn6
以及官方提供的coco测试数据集百度云,提取码:ny9j
配置正式开始
第一步-下载源码
本文采用的是yolov5官网提供的pytorch框架下的源码(官方代码为最新修改,建议使用本文提供的的代码版本--7月31日更新,可从上文百度云链接中下载),点击红色区域即可下载源码压缩包
将其解压到一个不带中文字符的文件夹下(如果带有中文字符,会使OpenCV的cv2.imread()函数读取不了待检测图片或视频)
第二步-安装anaconda与pycharm
两个开发工具从官网均可下载。
anaconda是一个管理用于python开发的包含不同库的虚拟环境的平台,可以高效的管理和创建适用于多个不同项目的project interpreter。安装完成自带一个根环境,路径在conda的安装目录下。进入后可以在环境管理页面创建新环境,新环境的路径在安装目录下的envs中存储,在pycharm中设置interpreter时需要找到所需环境的存储位置,interpreter设置选择conda enviroment,填写python.exe的路径即可完成编译环境与项目的绑定。之后进行虚拟环境设置,安装新的库的时候只需打开cmd,输入activate 环境名,即可进入环境目录,之后pip安装所需库即可。
首先从官网上下载anaconda-py3.7-64版本,勾选这两项方便环境配置,如果安装时没有勾选这两项建议重新安装,并!重!启!,涉及到环境变量的改动都建议在修改后重启。
等待anaconda安装完进入environment界面,点击create,将新环境命名为yolov5test,python版本选择python3.7,点击ok,等待自动生成初始环境,之后即可关闭anaconda。
ps(如果出现anaconda卡load application的情况,可以参考Anaconda创建新的python环境使用cmd创建新环境与操作包的安装)
完成anaconda安装后,从官网下载pycharm,解压安装完成后创建工程,路径选择到之前解压源码的无中文字符路径,注意!!!!,创建完成后此处有红框标记的文件即为路径正确(也可先创建再解压到工程文件中)
之后进入pycharm中选择工程所需的interpreter
第三步-安装cuda10.2和cudnn-10.2-windows10-x64-v7.6.5.32
因为本次使用pytorch1.5.1(如果使用最新版的官网代码,请按照requirement.txt中的环境要求安装,将pytorch升级为1.6即可),对应的cuda为10.1(其实cuda≥10.1即可,只需将cudnn与cuda版本对应上就行),ps(本人之前使用tf=1.14+cuda10.0进行深度学习开发,但是pytorch1.5.1需要安装新的cuda,故安装cuda10.2。下面给出这种情况的解决方法)
第一步:下载双击运行,选自定义
第二步:不要选择visual studio integration,否则无法安装
等待安装完成--约2分钟,期间若有GeForce experience失败则重复上述步骤即可
第三步:更改环境变量
进入环境变量编辑页面,此时已经将cuda10.2安装到默认的NVIDIA cumputing toolkit路径下,需要将系统的环境变量修改为cuda10.2,把10.0的变量去掉。同一台电脑可以拥有多个不同版本的cuda,如果需要用低版本的cuda,只需要将系统环境变量修改为低版本,将高版本的删除即可。
新建环境变量
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\lib\x64
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\include
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\extras\CUPTI\lib64
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.2\bin\win64
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.2\common\lib\x64
此时应该有如下两个变量,如果以前安装的有残存的cuda10.0的路径,删除即可
第四步:安装cudnn
将cudnn解压后,将其中的所有内容复制到以下路径中,ps(默认路径,可以直接用)
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2
第五步:验证
打开cmd,输入nvcc -V验证cuda是否安装成功,出现如下界面即为成功
第四步-安装pytorch1.5.1以及其他库
以管理员身份进入cmd,输入activate yolov5test进入环境目录下,输入
pip install torch===1.5.1 torchvision===0.6.1 -f https://download.pytorch.org/whl/torch_stable.html -i https://pypi.douban.com/simple
使用豆瓣源安装,很多是使用清华源,但是清华源安装时容易超时而导致安装失败,有条件的可以FQ直接安装,效果非常好。
安装完成后再pycharm中创建文件,输入验证pytorch安装是否成功
import torch
print(torch.cuda.is_available())
print(torch.__version__)
出现以下结果即为安装成功
其他库的安装建议根据requirement.txt文件逐个安装。。。清华源太容易崩了
下面给出requirement.txt的内容
# pip install -U -r requirements.txt
Cython
numpy>=1.18.5
opencv-python
torch>=1.5.1
matplotlib
pillow
tensorboard
PyYAML>=5.3
torchvision>=0.6
scipy
tqdm
# pycocotools>=2.0
# Nvidia Apex (optional) for mixed precision training --------------------------
# git clone https://github.com/NVIDIA/apex && cd apex && pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" . --user && cd .. && rm -rf apex
# Conda commands (in place of pip) ---------------------------------------------
# conda update -yn base -c defaults conda
# conda install -yc anaconda numpy opencv matplotlib tqdm pillow ipython
# conda install -yc conda-forge scikit-image pycocotools tensorboard
# conda install -yc spyder-ide spyder-line-profiler
# conda install -yc pytorch pytorch torchvision
# conda install -yc conda-forge protobuf numpy && pip install onnx==1.6.0 # https://github.com/onnx/onnx#linux-and-macos
可以根据下面的指令,依次输入以下命令安装相应的库:
pip install Cython
pip install numpy
pip install opencv-python
pip install matplotlib
pip install pillow
pip install tensorboard
pip install PyYAML
pip install torchvision
pip install scipy
pip install tqdm
第五步-下载权重文件
将下载的权重文件放入项目文件夹中!!!!注意是项目文件夹,而不是weights文件夹!!!!!!
第六步-实际测试
打开项目文件夹,找到inference,这里images存储测试数据,output存储测试结果,同样,测试数据名称不能带有中文字符
基本测试需要运行detect.py,pycharm中运行结果如下
说明:测试数据可以是图片或视频,也可以是本机摄像头。
使用方法为在detect文件最后找到
d_argument('--source', type=str, default='0', help='source') # file/folder, 0 for webcam
默认值改成0即可
本人使用i7-8750+1050Ti跑手机录像30~50FPS,效果还可以
ps:如果出现页面文件太小,无法完成操作,这样的错误是因为虚拟内存不足(虚拟内存定义参考操作系统的虚拟内存),参考修改页面文件即可解决
第七步(可选操作)-安装apex
官网地址
介绍:
这个存储库包含nvidia维护的实用程序,以简化Pytorch中的混合精度和分布式培训。这里的一些代码将包括在上游Pytorch最终。Apex的目的是尽可能快地为用户提供最新的实用程序。
Windows support is experimental, and Linux is recommended.pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" .
may work if you were able to build Pytorch from source on your system. pip install -v --no-cache-dir .
(without CUDA/C++ extensions) is more likely to work. If you installed Pytorch in a Conda environment, make sure to install Apex in that same environment.
1.从官网上下载源码,降里面的内容解压到yolov5工程文件夹下
2.打开pycharm的terminal界面,输入
pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext"
但是感觉貌似不太对。。输入会报
ERROR: You must give at least one requirement to install (see "pip help install")
可以尝试在terminal中输入
python setup.py install --cpp_ext --cuda_ext
等待1-2分钟即可完成安装
第八步-训练自制数据集
1.coco128数据集
训练数据集需要下载coco数据集,解压到与工程文件并列的位置,运行train.py
注:如果使用自制训练集训练自己的网络模型且GPU不太给力,可以调小网络参数和训练规模。(因为coco128数据集只有128张图片,且标记的种类较多,所以训练出来的网络最终效果不太理想,只是用来测试是否可以训练)
2.coco2017数据集
因为数据集较大,且标注为json格式。。。。(听说要转xml再转txt才能训练yolov5?),顾再研究研究,有大佬知道的可以评论去补充一波
感谢Thanks♪(・ω・)ノ
coco2017标注为json格式
目标检测只需要用到instances_train2017.json和instances_val2017.json两个标注文件,一个是训练集的标注,一个是验证集的标注
在此给出已经完成转换的两种格式的压缩包xml,txt
并给出将json->xml->txt格式标注的源码
json2xml.py
# 使用时仅需修改21、22、24行路径文件
import os
import time
import json
import pandas as pd
from tqdm import tqdm
from pycocotools.coco import COCO
def trans_id(category_id):
names = []
namesid = []
for i in range(0, len(cats)):
names.append(cats[i]['name'])
namesid.append(cats[i]['id'])
index = namesid.index(category_id)
return index
root = 'coco2017' # 你下载的 COCO 数据集所在目录
dataType = 'train2017'
anno = '{}/annotations/instances_{}.json'.format(root, dataType)
xml_dir = '{}/xml/{}_xml'.format(root, dataType)
coco = COCO(anno) # 读文件
cats = coco.loadCats(coco.getCatIds()) # 这里loadCats就是coco提供的接口,获取类别
# Create anno dir
dttm = time.strftime("%Y%m%d%H%M%S", time.localtime())
if os.path.exists(xml_dir):
os.rename(xml_dir, xml_dir + dttm)
os.mkdir(xml_dir)
with open(anno, 'r') as load_f:
f = json.load(load_f)
imgs = f['images']
df_cate = pd.DataFrame(f['categories'])
df_cate_sort = df_cate.sort_values(["id"], ascending=True)
categories = list(df_cate_sort['name'])
print('categories = ', categories)
df_anno = pd.DataFrame(f['annotations'])
for i in tqdm(range(len(imgs))):
xml_content = []
file_name = imgs[i]['file_name']
height = imgs[i]['height']
img_id = imgs[i]['id']
width = imgs[i]['width']
xml_content.append("<annotation>")
xml_content.append(" <folder>VOC2007</folder>")
xml_content.append(" <filename>" + file_name + "</filename>")
xml_content.append(" <size>")
xml_content.append(" <width>" + str(width) + "</width>")
xml_content.append(" <height>" + str(height) + "</height>")
xml_content.append(" </size>")
xml_content.append(" <segmented>0</segmented>")
# 通过img_id找到annotations
annos = df_anno[df_anno["image_id"].isin([img_id])]
for index, row in annos.iterrows():
bbox = row["bbox"]
category_id = row["category_id"]
cate_name = categories[trans_id(category_id)]
# add new object
xml_content.append(" <object>")
xml_content.append(" <name>" + cate_name + "</name>")
xml_content.append(" <pose>Unspecified</pose>")
xml_content.append(" <truncated>0</truncated>")
xml_content.append(" <difficult>0</difficult>")
xml_content.append(" <bndbox>")
xml_content.append(" <xmin>" + str(int(bbox[0])) + "</xmin>")
xml_content.append(" <ymin>" + str(int(bbox[1])) + "</ymin>")
xml_content.append(" <xmax>" + str(int(bbox[0] + bbox[2])) + "</xmax>")
xml_content.append(" <ymax>" + str(int(bbox[1] + bbox[3])) + "</ymax>")
xml_content.append(" </bndbox>")
xml_content.append(" </object>")
xml_content.append("</annotation>")
x = xml_content
xml_content = [x[i] for i in range(0, len(x)) if x[i] != "\n"]
### list存入文件
xml_path = os.path.join(xml_dir, file_name.replace('.jpg', '.xml'))
with open(xml_path, 'w+', encoding="utf8") as f:
f.write('\n'.join(xml_content))
xml_content[:] = []
xml2txt.py
import os.path
import xml.etree.ElementTree as ET
class_names = ['lip']
xmlpath = 'F:\\share\\标注\\xml\\' # xml文件的位置
txtpath = 'F:\\share\\标注\\txt\\' # 导出txt的位置
files=[]
for root, dirs, files in os.walk(xmlpath):
None
number = len(files)
i = 0
while i < number:
name = files[i][0:-4]
xml_name = name + ".xml"
txt_name = name + ".txt"
xml_file_name = xmlpath + xml_name
txt_file_name = txtpath + txt_name
xml_file = open(xml_file_name)
tree = ET.parse(xml_file)
root = tree.getroot()
filename = root.find('filename').text
image_name = root.find('filename').text
w = int(root.find('size').find('width').text)
h = int(root.find('size').find('height').text)
f_txt = open(txt_file_name, 'w+')
content = ""
first = True
for obj in root.iter('object'):
name = obj.find('name').text
class_num = class_names.index(name)
xmlbox = obj.find('bndbox')
x1 = int(xmlbox.find('xmin').text)
x2 = int(xmlbox.find('xmax').text)
y1 = int(xmlbox.find('ymin').text)
y2 = int(xmlbox.find('ymax').text)
if first:
content += str(class_num) + " " + \
str((x1+x2)/2/w) + " " + str((y1+y2)/2/h) + " " + \
str((x2-x1)/w) + " " + str((y2-y1)/h)
first=False
else:
content += "\n" + \
str(class_num) + " " + \
str((x1 + x2) / 2 / w) + " " + str((y1 + y2) / 2 / h) + " " + \
str((x2 - x1) / w) + " " + str((y2 - y1) / h)
print(str(i/(number - 1) * 100) + "%\n")
f_txt.write(content)
f_txt.close()
xml_file.close()
i += 1
print("done!")
3.真正的自制数据集
使用各种目标检测的标注工具都行,我用的LabelImg
可以下载源码安装,也可以直接pip安装
安装方法参考:
https://blog.****.net/qq_34809033/article/details/80589868?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight
使用方法参考:
https://zhuanlan.zhihu.com/p/90834296
https://blog.****.net/python_pycharm/article/details/85338801
4.虚假的自制数据集
尝试训练了coco128数据集,但是效果不理想。
可以采用了pygame绘图自制数据集训练的方法。
1.生成随机数据集的代码如下
import math
import random
import pygame
pygame.init()
windowSize = [640, 640]
screen = pygame.display.set_mode(windowSize)
clock = pygame.time.Clock()
color = pygame.color.Color('#57B0F6')
black = pygame.color.Color('#000000')
count = 0
done = False
fileNo = 0
round = 1
while not done and round<1000:
screen.fill(black)
x = 100 + random.randint(0, 400)
y = 100 + random.randint(0, 400)
pygame.draw.ellipse(screen, color, [x, y, 100, 100])
pygame.display.flip()
zero=""
if round>=1 and round<=9:
zero="00000000000"
if round>=10 and round<=99:
zero="0000000000"
if round>=100 and round<=999:
zero="000000000"
pygame.image.save(screen, "images\\" + zero + str(round) + ".jpg") #这句话保存图片
f=open("labels\\" + zero +str(round)+".txt",'w+')
f.write("0 "+str((x+50)/640)+" "+str((y+50)/640)+" 0.15625 0.15625")
f.close()
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
round+=1
pygame.quit()
通过pygame在黑色背景下绘制一个蓝色圆形图案,并根据yolov5标记的导入规则--每张图片一个txt文件,每一行表示一个object。第一个数表示种类在yaml中定义的下标(只有一个就写0),第二三个数表示矩形框中心的横纵坐标(位于正中间,则都为0.5),第四五个数表示矩形的宽高(若矩宽高都为图片的一半,则都为0.5)
images文件夹
labels文件夹
共随机生成1000张图片,位置均随机,并生成对应的标注。
2.创建yaml文件
在yolov5的工程文件中找到data文件夹,创建circle.yaml文件,将下面的代码输进去
train: ../creat_image/images/ #改为自己的训练文件的路径
val: ../creat_image/images/ #改为自己的测试文件的路径
# number of classes
nc: 1
# class names
names: ['circle']
3.更改train.py的设置
训练属性设置说明
# 存储模型结构的配置文件
parser.add_argument('--cfg', type=str, default='models/yolov5s.yaml', help='model.yaml path')
# 存储训练、测试的数据的文件 coco128.yaml->circle.yaml
parser.add_argument('--data', type=str, default='data/circle.yaml', help='data.yaml path')
#
parser.add_argument('--hyp', type=str, default='', help='hyp.yaml path (optional)')
# 指的就是训练过程中整个数据集将被迭代多少次,显卡不行你就调小点
parser.add_argument('--epochs', type=int, default=100)
# batch-size:一次看完多少张图片才进行权重更新,梯度下降的mini-batch,显卡不行你就调小点。
parser.add_argument('--batch-size', type=int, default=30, help="Total batch size for all gpus.")
# 输入图片宽高,显卡不行你就调小点。-------必须是32的倍数,输入250会自动调整成256
parser.add_argument('--img-size', nargs='+', type=int, default=[320, 320], help='train,test sizes')
# 进行矩形训练
parser.add_argument('--rect', action='store_true', help='rectangular training')
# 恢复最近保存的模型开始训练
parser.add_argument('--resume', nargs='?', const='get_last', default=False,
help='resume from given path/to/last.pt, or most recent run if blank.')
# 仅保存最终checkpoint
parser.add_argument('--nosave', action='store_true', help='only save final checkpoint')
# 仅测试最后的epoch
parser.add_argument('--notest', action='store_true', help='only test final epoch')
#
parser.add_argument('--noautoanchor', action='store_true', help='disable autoanchor check')
# 进化超参数
parser.add_argument('--evolve', action='store_true', help='evolve hyperparameters')
# gsutil bucket
parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')
# 缓存图像以加快训练速度
parser.add_argument('--cache-images', action='store_true', help='cache images for faster training')
# 权重文件路径,用于迁移训练,可以以官方提供的几个训练好的模型为基础进行训练
# default='' ----> default='yolov5s.pt'
parser.add_argument('--weights', type=str, default='', help='initial weights path')
# 重命名results.txt to results_name.txt
parser.add_argument('--name', default='', help='renames results.txt to results_name.txt if supplied')
# cuda device, i.e. 0 or 0,1,2,3 or cpu
parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
# 多尺度训练,img-size +/- 50%
parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%%')
# 单类别的训练集
parser.add_argument('--single-cls', action='store_true', help='train as single-class dataset')
打开train.py,找到后面位置的这个语句,将default改为自己的circle.yaml的路径
parser.add_argument('--data', type=str, default='data/circle.yaml', help='data.yaml path')
本人使用1050Ti+i7-8750的笔记本电脑,采用320,320图片输入,训练100轮次,训练时间大约1.5小时
完成训练后会在yolov5文件夹的run下保存有训练模型以及训练参数的图表
使用detect.py检测训练结果需要更改模型路径,改为run/exp.../weights/best.py(完成训练后会提示生成的权重文件在哪)
之后与前文步骤类似,将从数据集中挑几张图片输入,运行即可得到输出
如果觉得这篇博客有用的话欢迎
上一篇: YOLO 系列目标检测算法的发展历程
下一篇: 深入了解 YOLO v1
推荐阅读
-
Visual Studio Code 配置 C、C++ 文件调试调试环境的详细步骤
-
最详细的 yolov5 环境配置构建 + 所需文件的配置
-
java 环境变量配置和解释(最详细的教程)
-
2021 最详细的 Python 安装和配置环境图文教程 - 获取更多 Python 相关知识可关注公众号 "乐字节 "发送:
-
最新、最详细的 Python 开发环境构建与 PyCharm 安装配置教程【图+文】【简单易懂】。
-
最全面、最详细的 openvpn 服务构建 iptables 配置 (a)
-
从零到一的nvm、npm、cnpm、yarn、vue全套安装和环境配置以及创建新项目和如何运行人的项目大全,最详细,保姆级
-
Java 类加载器的作用 - 简介:类加载器是 Java™ 中一个非常重要的概念。类加载器负责将 Java 类的字节码加载到 Java 虚拟机中。本文首先详细介绍了 Java 类加载器的基本概念,包括代理模型、加载类的具体过程和线程上下文类加载器等。然后介绍了如何开发自己的类加载器,最后介绍了类加载器在 Web 容器和 OSGi™ 中的应用。 类加载器是 Java 语言的一项创新,也是 Java 语言广受欢迎的重要原因之一。它允许将 Java 类动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1.0 开始出现,最初是为了满足 Java Applets 的需求而开发的,Java Applets 需要从远程位置下载 Java 类文件并在浏览器中执行。现在,类加载器已广泛应用于网络容器和 OSGi。一般来说,Java 应用程序的开发人员不需要直接与类加载器交互;Java 虚拟机的默认行为足以应对大多数情况。但是,如果遇到需要与类加载器交互的情况,而您又不太了解类加载器的机制,就很容易花费大量时间调试异常,如 ClassNotFoundException 和 NoClassDefFoundError。本文将详细介绍 Java 的类加载器,帮助读者深入理解 Java 语言中的这一重要概念。下面先介绍一些基本概念。 类加载器的基本概念 顾名思义,类加载器用于将 Java 类加载到 Java 虚拟机中。一般来说,Java 虚拟机以如下方式使用 Java 类:Java 源程序(.java 文件)经 Java 编译器编译后转换为 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码并将其转换为 java.lang 实例。每个实例都用来表示一个 Java 类。通过该实例的 newInstance 方法创建该类的对象。实际情况可能更加复杂,例如,Java 字节代码可能是由工具动态生成或通过网络下载的。 基本上,所有类加载器都是 java.lang.ClassLoader 类的实例。下面将详细介绍这个 Java 类。 java.lang.ClassLoader 类简介 java.lang.ClassLoader 类的基本职责是根据给定类的名称为其查找或生成相应的字节码,然后根据这些字节码定义一个 Java 类,即 java.lang.Class 类的实例。除此之外,ClassLoader 还负责加载 Java 应用程序所需的资源,如图像文件和配置文件。不过,本文只讨论它加载类的功能。为了履行加载类的职责,ClassLoader 提供了许多方法,其中比较重要的方法如表 1 所示。下文将详细介绍这些方法。 表 1.与加载类相关的 ClassLoader 方法
-
41 个下载免费 3D 模型的最佳网站-使用说明:使用权限可能因型号而异。因此,在下载文件之前,请仔细检查每个下载页面上的许可证和使用权限。 17. Clara.io Clara.io 是一个创建 3D 内容的全球平台,也是一个培养新 3D 艺术家的社区。Clara.io 提供+100,000个免费的3D模型,包括OBJ,Blend,STL,FBX,DAE,Babylon.JS,Three.JS格式,用于 Clara.io,Unity 3D,Blender,Sketchup,Cinema 4D,3DS Max和Maya。 使用说明:免费,标准和专业帐户仅供个人使用,如果您需要将 clara.io 用于商业用途,请与销售团队联系。 18. 3DExport 3DExport是一个市场,您可以在其中购买和销售用于CG项目的3D模型,3D打印模型和纹理。它提供15 +不同的3D格式供下载,如3DS MAX(.max),Cinema4D(.c4d),Maya(.mb,.ma),Lightwave(.lwo),Softimage(.xsi),Wavefront OBJ(.obj),Autodesk FBX(.fbx)等。它还提供15种不同的语言! 使用说明:免费下载仅供个人和非商业用途。 19. 3D Warehouse 3D Warehouse是一个开放的库,允许用户共享和下载SketchUp 3D模型,用于建筑,设计,施工和娱乐!任何人都可以免费制作,修改和重新上传内容到3D仓库,您可以找到任何您能想到的东西,如家具,电子产品,室内产品等。 使用说明:3D Warehouse中的所有模型都是免费的,因此任何人都可以下载文件以用于SketchUp甚至其他软件,如AutoCAD,Revit和ArchiCAD。 20. CadNav.com CadNav是CGI平面设计师和CAD / CAM / CAE工程师的在线3D模型库,我们提供超过50000 +免费3D模型和CAD模型下载。在CadNav网站上,您可以下载高质量的多边形网格3D模型,3D CAD实体对象,纹理,Vray材料,3D作品,CAD图纸等。 使用说明:免费下载仅供个人和非商业用途。 21. All3dfree.net 就像网站名称一样,它提供免费的3D模型,还包括Vray材料,CAD块,2d和3d纹理集合,无需注册即可免费下载。它是不断更新的,因此您可以查找或请求3DS,MAX,C4D,skp,OBJ,FBX,MTL等格式的模型。 使用说明:所有资源均不允许用于商业用途,否则您将承担责任。 22. Hum3D 自2005年以来,Hum3D帮助来自3多个国家的80D艺术家节省3D建模时间,并制作逼真的3D模型,用于电影,视频游戏,AR应用程序和可视化。所有模型均由首席3D艺术家进行验证,他们检查其是否符合专业要求和最新的3D建模标准。 使用说明:免费下载仅供个人和非商业用途。 23. Artist-3D.com 艺术家-3D 库存的免费 3D 模型下载按通用类别排序。它为人体解剖学、汽车、家具、火箭、卫星等模型提供 AutoDesk 3DS Max 格式。您还可以在浏览他们的网站时找到教程和类似类型的建模。 使用说明:使用权限可能因型号而异。因此,在下载文件之前,请仔细检查每个下载页面上的许可证和使用权限。 24. Free the models 就像本网站的标题一样,它为3d应用程序和3d游戏引擎提供免费的内容模型。您可以为您的任何项目找到许多有趣且有用的模型!它提供3ds,wavefront,bryce,poser,lightwave,md2和unity3d格式的模型。还有一个很棒的纹理集合,可以在您最喜欢的建模和渲染程序中使用。 使用说明:您从这里下载的所有内容都可以免费使用,除非它不能包含在另一个免费的网络或CD收藏中,也不能单独出售。否则,您可以在商业游戏,3D应用程序或渲染作品中使用它。您不必提供信用,但如果您这样做,那就太好了。 25. Resources.blogscopia 本网站由一家名为Scopia的公司创建。他们制作3D图像和视频,您可以找到许多为CGI工作的信息架构设计的模型,所有这些都可以在现实生活中使用。您可以免费下载它们,但是,如果您想一次下载它们,您可以支付 3 到 9 欧元。 使用说明:您可以免费下载模型部分的所有文件。每个压缩文件都包含您也可以在此处找到的许可证。基本上,您可以对文件执行任何操作。唯一的限制是不归属于Scopia的重新分发。 26.ambientCG 1000+公共领域PBR材料适合所有人!环境CG是使用许多不同的方法和资产类型创建的,例如照片纹理(PBR),贴花(PBR),图集(PBR),照片纹理(普通),物质存档(SBSAR),雕刻画笔,3D模型和地形。您可以在所有项目中*使用它们! 使用说明:在 ambientCG 上提供下载的所有 PBR 材料、画笔、照片和 3D 模型均根据知识共享 CC0 1.0 通用许可提供。您可以复制、修改、分发和执行作品,即使是出于商业目的,也无需征得许可。信用将不胜感激。 不要满足于平庸的大理石纹理 - 立即使用我们的免费PBR大理石纹理升级您的3D设计。 27.Pixar One Twenty Eight 这是一个提供官方动画行业经典纹理的网站:皮克斯,创建于 1993 年,该纹理库包括 128 个重复纹理,现在免费提供。 它包含您来到的纹理,包括砖块和动物毛皮。肯定会有一些你可以使用的东西。 使用说明:皮克斯动画工作室的《Pixar One Twenty Eight》根据知识共享署名4.0国际许可协议进行许可。即使出于商业目的,您也可以重新混合、调整和构建您的作品,只要您以相同的条款对新创作进行信用和许可。 访问数以千计的免费纹理并提升您的设计游戏 - 立即开始下载! 28. 3DXO 即使有近 620 个免费贴纸可供下载,3DXO 也不是最大的资源,但它的内容非常有用,不需要注册。无论是简单的墙壁或地板,还是一些奇怪的小东西,您都需要的纹理都可以在此网站上看到。 使用说明:使用权限可能因型号而异。因此,在下载文件之前,请仔细检查每个下载页面上的许可证和使用权限。 29. 3DModelsCC0 3DModelsCC0 与其他产品的不同之处在于它包含超过 250+ 个高质量 3D 模型,并且本网站上的所有内容都是免费的,完全是公共领域!使用我们的模型时无需信用或归属! 使用说明:为每个人提供完全免费的公共领域内容。 30.Sketch up texture club Sketchup Texture Club是一个非营利性的教育和信息门户网站,由3D社区的图像促进协会管理,特别强调面向学生和建筑和室内设计专业人士的可视化和渲染技术,以及所有正在学习3D可视化的人。 使用说明:您无需支付版税或使用费。纹理可以免费下载和使用。不允许将纹理作为竞争产品出售或重新分发,即使图像被修改也是如此。 31. FlippedNormals FlippedNormal 是一个提供计算机图形和 3D 资产的市场,您可以找到许多用于雕刻、建模、纹理、概念艺术、3D 模型、游戏资产或课程的高级资产! 使用说明:使用权限可能因型号而异。因此,在下载文件之前,请仔细检查每个下载页面上的许可证和使用权限。 32. NASA 3D NASA 3D网站是一个在线门户,提供与太空和各种NASA任务相关的大量三维模型和模拟。该网站是用户友好的,并提供有关每个型号的详细信息。该网站允许用户探索和下载几种不同格式的模型,包括 OBJ、STL 和 FBX,只需单击下载按钮即可。 使用说明: 要下载模型,只需单击模型页面上的下载按钮并选择所需的格式。 33. 3DAGOGO (Astroprint) 3DAGOGO 是一个提供广泛 3D 模型的网站,包括角色、车辆和建筑物。3DAGOGO 的独特功能之一是它专注于适合 3D 打印的模型,使其成为希望创建物理原型或模型的设计师的绝佳资源。要使用 3DAGOGO,设计师只需在网站上搜索他们正在寻找的模型类型,然后下载 STL 格式的文件。 使用说明: 要使用 3DAGOGO,只需搜索所需的 3D 模型类型并下载 STL 格式的文件。根据需要自定义模型,并确保在将其用于商业目的之前检查使用权限。 34. FreeCAD FreeCAD是一款了不起的3D建模软件,可让您在计算机上创建令人难以置信的3D设计。该软件可免费下载和使用,它提供了广泛的工具和功能,可用于创建用于各种目的的3D模型。 该网站易于浏览,您可以找到开始使用FreeCAD的所有必要信息。此外,该网站还提供一系列教程和指南,可帮助您了解 3D 建模的来龙去脉。 使用说明: 要下载模型,请访问网站并从库中选择所需的模型。该网站还提供了一系列使用该软件的教程和指南。 35. Pinshape Pinshape是一个提供一系列3D打印模型的网站。网站上提供的型号质量很高,因此您可以确保您的最终印刷产品看起来很棒。该网站提供了广泛的模型,包括从家居用品到小雕像和珠宝的所有物品。 但这还不是Pinshape所能提供的全部!该网站还允许用户上传和共享自己的3D模型。这意味着您不仅可以下载出色的模型,还可以通过分享自己的设计为社区做出贡献。此外,Pinshape 提供了一系列自定义选项,因此您可以调整和调整模型以满足您的特定需求。 使用说明: 要下载模型,请在网站上创建一个帐户,搜索所需的模型,然后单击下载按钮。该网站还为每种型号提供了一系列定制选项。 36.Yeggi Yeggi 提供了大量免费的 3D 模型,您可以下载各种格式的模型,例如 STL、OBJ 和 FBX。该网站易于使用,您可以按关键字、类别或特定网站搜索模型。 Yeggi 对于任何寻找 3D 模型的人来说都是一个很好的资源。它提供了大量的模型集合,从日常物品到复杂的机械,以及介于两者之间的一切。该网站的收藏量在不断增长,每天都有新的型号增加。 使用说明: 要下载模型,请在网站上搜索所需的模型,然后单击下载按钮。该网站还提供指向托管模型的原始网站的链接。 37. Open3DModel 来自开放3D模型的图像 Open3DModel具有各种类别的模型,包括建筑,车辆和角色。无论您需要建筑物,汽车还是人的3D模型,都可以在此网站上找到。 该网站易于浏览,您可以按类别或关键字搜索模型。每个模型都附带预览图像和详细信息,例如文件格式、大小和多边形数量。此信息可以帮助您选择适合您需求的模型。 使用说明: 要下载模型,请访问网站,从库中选择所需的模型,然后单击下载按钮。 使用最好的 3D 资产管理工具简化您的 3D 制作流程。立即试用它们,将您的 3D 项目提升到一个新的水平! 38. 3DExport 对于那些为其 3D 设计项目寻找 3D 模型、纹理和其他资源的人来说,该平台是一个很好的资源。该网站有大量模型可供选择,包括 3D 打印对象、游戏资产等。用户可以按类别、文件格式或价格范围浏览,以找到适合其项目的完美资源。此外,3DExport 还提供一系列教程和其他 3D 资源,以帮助用户提高技能并创建更令人印象深刻的设计。 使用说明: 要使用 3DExport,只需创建一个帐户并浏览可用型号。您可以按类别、格式和价格进行搜索,以找到所需的型号。找到喜欢的模型后,只需下载它并开始在您的项目中使用它。 39.Blend Swap Blend Swap是一个社区驱动的市场,提供与Blender软件兼容的各种免费3D模型。该平台允许用户共享和下载模型、纹理和其他资产,以便在他们的项目中使用。 使用说明: 创建免费帐户后,您可以浏览社区上传的大量3D模型。当您找到要使用的一个时,只需下载它并将其导入您选择的 3D 软件即可。 40. 3DShook 3DShook 是一个高级 3D 模型市场,提供一系列用于建筑、游戏等各个行业的高质量模型。该平台提供基于订阅的模型,具有不同的定价计划,允许用户访问一系列模型。 使用说明: 注册免费帐户后,只需浏览3D模型库,选择您喜欢的模型,然后以您需要的格式下载它们。 41. Smithsonian X 3D 史密森尼 X 3D 对于正在寻找历史文物和文物的高质量 3D 模型的设计师来说,这是一个独特的资源。该平台提供了大量3D模型,这些模型是根据史密森尼博物馆和研究中心中的真实物体扫描创建的。 使用说明: