位置: IT常识 - 正文

【3】使用YOLOv8训练自己的目标检测数据集-【收集数据集】-【标注数据集】-【划分数据集】-【配置训练环境】-【训练模型】-【评估模型】-【导出模型】(yolov3怎么用)

编辑:rootadmin
原力计划【3】使用YOLOv8训练自己的目标检测数据集-【收集数据集】-【标注数据集】-【划分数据集】-【配置训练环境】-【训练模型】-【评估模型】-【导出模型】

推荐整理分享【3】使用YOLOv8训练自己的目标检测数据集-【收集数据集】-【标注数据集】-【划分数据集】-【配置训练环境】-【训练模型】-【评估模型】-【导出模型】(yolov3怎么用),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:yolov3用什么实现,yolov1 实现,yolov3用什么实现,yolov3怎么用,yolov1 实现,yolov4使用教程,yolov3怎么用,yolov5的使用,内容如对您有帮助,希望把文章链接给更多的朋友!

在自定义数据上训练 YOLOv8 目标检测模型的步骤可以总结如下 6 步:

🌟收集数据集🌟标注数据集🌟划分数据集🌟配置训练环境🌟训练模型🌟评估模型1. 收集数据集

随着深度学习技术在计算机视觉领域的广泛应用,行人检测和车辆检测等任务已成为热门研究领域。然而,实际应用中,可用的预训练模型可能并不适用于所有应用场景。

例如,虽然预先训练的模型可以检测出行人,但它无法区分“好人”和“烂人”,因为它没有接受相关的训练。因此,我们需要为自定义检测模型提供足够数量的带有标注信息的图像数据,来训练模型以区分“好人”和“烂人”。

从而更好地保护我们的安全。同时提醒大家在生活中也应该注意识别那些道貌岸然的小人行为,以保护自己的权益。

本文将介绍几种收集数据集的常见方法,帮助大家更好地解决实际问题。

1.1 使用开源已标记数据集

使用开源数据集是收集数据的最简便方式之一。例如,ImageNet是一个大型图像数据库,包含超过1400万张图像,可用于深度学习模型的训练。此外,像COCO、PASCAL VOC这样的数据集也经常用于目标检测模型的训练和评估。但是这些数据库中的图像通常来自不同的领域和应用场景,因此可能无法完全满足特定研究的需求。

1.2 爬取网络图像

另一种选择是通过网络搜索图像,并手动选择要下载的图像。然而,由于需要收集大量数据,因此此方法的效率较低。需要注意的是,网络上的图像可能受到版权保护。在使用这些图像之前,务必检查图像的版权信息。

或者,您可以编写一个程序来爬取网络并下载所需的图像,但是这需要对数据进行清洗,以确保数据质量。同样需要注意检查每个图像的版权信息。

1.3 自己拍摄数据集

对于一些特定的应用场景,如自动驾驶和安防监控等,需要收集特定场景下的数据,这时候就需要进行自主拍摄。可以在实际场景中拍摄图像或视频,并对其进行标注,以获得适用于特定场景的高质量数据集。

1.4 使用数据增强生成数据集

我们知道深度学习模型需要大量的数据。当我们只有一个小数据集时,可能不足以训练一个好的模型。在这种情况下,我们可以使用数据增强来生成更多训练数据。

常见的增强方式就是几何变换,类似翻转、裁剪、旋转和平移这些。

左边是狗的原始图像,右边是水平翻转的图像

猫的原始和随机裁剪图像

1.5 使用算法合成图像

最后一种获取目标检测数据集的方法是使用合成图像。合成图像是通过使用图像处理软件(例如Photoshop)在图像中添加对象、更改背景或合成多个图像以创建新的图像。这种方法可以提供一些特殊情况或无法通过其他方式获得的图像,但是合成图像通常无法完全代替真实场景的数据,可能会对模型的准确性产生一定的影响。

或者我们可以使用生成对抗网络 (GAN) 来生成数据集。

值得注意的是,收集训练数据集只是我们训练自定义检测模型的第一步。。。接下来我们要介绍如何标注数据集,当然这一步是假设你的图片已经准备完成。

本次案例依然使用我个人的月饼数据集

下载地址:https://download.csdn.net/download/weixin_43694096/87094367

2. 标注数据集

为什么要标注数据集?标注好的数据集有什么作用呢? 答:为了让计算机学会正确地识别物体,我们需要提供大量的标注数据集,这些数据集包含了图像或视频中物体的位置和类别信息。 标注数据集的作用在于,它可以帮助计算机学习到如何识别不同种类的物体,并且能够正确地定位它们的位置。通过标注数据集,我们可以让计算机逐渐学会如何识别和分类不同种类的物体,例如人、车、动物等等。这些数据集可以被用来训练深度学习模型,让模型学会如何识别新的图像或视频中的物体。

举个简单例子:比如说,我们想要让计算机自动识别图像中的猫和狗。为了让计算机学会如何识别这两个物体,我们需要提供一些图像样本,并在这些样本上标注猫和狗的位置。 如果我们没有标注数据集,计算机就无法学习到如何识别猫和狗。即使我们给计算机提供了大量的图像,它也无法准确地区分这两个物体。但是,如果我们有了标注数据集,计算机就可以通过学习这些数据来理解猫和狗之间的差异,并且可以在新的图像中准确地识别它们。 (当然这个例子指的是监督学习)

2.1 确认标注格式

YOLOv8 所用数据集格式与 YOLOv5 YOLOv7 相同,采用格式如下:

<object-class-id> <x> <y> <width> <height>

常用的标注工具有很多,比如LabelImg、LabelMe、VIA等,但是这些工具都需要安装使用,我这里给大家介绍一款在线标注数据集的工具Make Sense,打开即用,非常的便捷,在标注之前,我们来看一下一般情况下遵循的标注规则:

目标框必须框住整个目标物体,不能有遗漏和重叠。目标框应该与目标物体尽可能接近,但不能与目标物体重合。目标框的宽度和高度应该为正数,不能为零或负数。如果一张图片中有多个目标物体,每个目标物体应该用一个独立的目标框进行标注,不允许多个目标共用一个框。如果目标物体的形状不规则,可以使用多个框进行标注,但必须框住整个目标物体。目标框的坐标必须在数据集中统一。2.2 开始标注

确认好标注格式后我们就可以开始标注了,进入网页后点击 Get Started 开始使用。

首先点击 Drop images 然后 Ctrl+A 选中整个数据集里面的图片。

随后添加标签信息,有几类就添加几个,因为我这里只检测月饼一类,所以只添加一个标签 Moon Cake。

【3】使用YOLOv8训练自己的目标检测数据集-【收集数据集】-【标注数据集】-【划分数据集】-【配置训练环境】-【训练模型】-【评估模型】-【导出模型】(yolov3怎么用)

随后就进入了漫长的标注环节,这里大家一定要认真标注,不然对最终模型的影响还是很大的。

大约 333 个小时以后就标注完毕了。。。。

我们点击Action -> Export Annotation 导出 yolo 格式的标签文件。

导出之后的标签文件就是这个样子的,我们可以随机抽查几个看看有没有问题。

3. 划分数据集

也就是说,我们现在导出后的图片和标签是这个样子的:

Moon_Cake├─images └─all└─labels └─all

但是 YOLOv8 所需要的数据集路径的格式是下面这样子的(YOLOv8支持不止这一种格式),我们接下来要通过脚本来来划分一下数据集:

├── yolov8_dataset└── train└── images (folder including all training images)└── labels (folder including all training labels)└── test└── images (folder including all testing images)└── labels (folder including all testing labels)└── valid└── images (folder including all testing images)└── labels (folder including all testing labels)

具体其实只要修改路径就行了,代码我都做了注释。

# by CSDN 迪菲赫尔曼import osimport randomimport shutil# 设置随机数种子random.seed(123)# 定义文件夹路径root_dir = 'Moon_Cake'image_dir = os.path.join(root_dir, 'images', 'all')label_dir = os.path.join(root_dir, 'labels', 'all')output_dir = 'yolov8_dataset'# 定义训练集、验证集和测试集比例train_ratio = 0.7valid_ratio = 0.15test_ratio = 0.15# 获取所有图像文件和标签文件的文件名(不包括文件扩展名)image_filenames = [os.path.splitext(f)[0] for f in os.listdir(image_dir)]label_filenames = [os.path.splitext(f)[0] for f in os.listdir(label_dir)]# 随机打乱文件名列表random.shuffle(image_filenames)# 计算训练集、验证集和测试集的数量total_count = len(image_filenames)train_count = int(total_count * train_ratio)valid_count = int(total_count * valid_ratio)test_count = total_count - train_count - valid_count# 定义输出文件夹路径train_image_dir = os.path.join(output_dir, 'train', 'images')train_label_dir = os.path.join(output_dir, 'train', 'labels')valid_image_dir = os.path.join(output_dir, 'valid', 'images')valid_label_dir = os.path.join(output_dir, 'valid', 'labels')test_image_dir = os.path.join(output_dir, 'test', 'images')test_label_dir = os.path.join(output_dir, 'test', 'labels')# 创建输出文件夹os.makedirs(train_image_dir, exist_ok=True)os.makedirs(train_label_dir, exist_ok=True)os.makedirs(valid_image_dir, exist_ok=True)os.makedirs(valid_label_dir, exist_ok=True)os.makedirs(test_image_dir, exist_ok=True)os.makedirs(test_label_dir, exist_ok=True)# 将图像和标签文件划分到不同的数据集中for i, filename in enumerate(image_filenames): if i < train_count: output_image_dir = train_image_dir output_label_dir = train_label_dir elif i < train_count + valid_count: output_image_dir = valid_image_dir output_label_dir = valid_label_dir else: output_image_dir = test_image_dir output_label_dir = test_label_dir # 复制图像文件 src_image_path = os.path.join(image_dir, filename + '.jpg') dst_image_path = os.path.join(output_image_dir, filename + '.jpg') shutil.copy(src_image_path, dst_image_path) # 复制标签文件 src_label_path = os.path.join(label_dir, filename + '.txt') dst_label_path = os.path.join(output_label_dir, filename + '.txt') shutil.copy(src_label_path, dst_label_path)

运行完脚本后我们的数据集就会划分成这个格式了,现在数据准备工作就彻底完成了,接下来我们开始着手训练模型。

4. 配置训练环境4.1 获取代码git clone https://github.com/ultralytics/ultralytics

针对网络不好的同学,我这里上传了一份:点击下载

4.2 安装环境cd ultralyticspip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simplepip install ultralytics5. 训练模型5.1 新建一个数据集yaml文件

这个是我新建的,里面写绝对路径(主要是怕出错):

# moncaketrain: D:\Pycharm_Projects\ultralytics\ultralytics\datasets\mooncake\train # train images (relative to 'path') 128 imagesval: D:\Pycharm_Projects\ultralytics\ultralytics\datasets\mooncake\valid # val images (relative to 'path') 128 imagestest: D:\Pycharm_Projects\ultralytics\ultralytics\datasets\mooncake\test # test images (optional)# Classesnames: 0: MoonCake

这个是自带的,里面写相对路径,和我们的写法不同,但是都可以使用,据我所只还有很多种数据集读取方式:

# coco128path: ../datasets/coco128 # dataset root dirtrain: images/train2017 # train images (relative to 'path') 128 imagesval: images/train2017 # val images (relative to 'path') 128 imagestest: # test images (optional)# Classesnames: 0: person 1: bicycle 2: car ''' ''' 79: toothbrush

相应的数据集位置就在这里,我们可以和coco128对比一下,这两种划分格式都可以的,这里一定要注意路径问题!

5.2 预测模型

这是官方提供的一些命令行方式,下面我们分开来介绍一下:

yolo task=detect mode=train model=yolov8n.pt args... classify predict yolov8n-cls.yaml args... segment val yolov8n-seg.yaml args... export yolov8n.pt format=onnx args...

终端中直接键入以下指令就可以实现对图进行推理了,推理后如果不指定文件夹,就会默认保存到runs/detect/predict下。

yolo task=detect mode=predict model=yolov8n.pt source=data/images device=0 save=True

就这张图来说,v8确实比v5牛🍺,左上角的标志都检测出来了,但是阳台上的自行车还是没检测出来。

YOLOv8 关于模型的各种参数其实都写到了一起,在ultralytics/yolo/cfg/default.yaml,这是与先前版本最大的不同,通过使用这些指令我们就可以实现各种我们所需的操作。

参数名默认值说明source无图像或视频所在的目录showFalse如果可能,显示结果save_txtFalse将结果保存为.txt文件save_confFalse保存带置信度得分的结果save_cropFalse保存裁剪后带结果的图像show_labelsTrue在绘图中显示对象标签show_confTrue在绘图中显示对象置信度得分vid_stride1视频帧率跨度line_thickness3边界框的厚度(像素)visualizeFalse可视化模型特征augmentFalse对预测源应用图像增强agnostic_nmsFalse类无关NMSclasses空列表按类别筛选结果,例如:class = 0或class = [0,2,3]retina_masksFalse使用高分辨率分割掩模boxesTrue在分割预测中显示边界框5.3 训练模型

模型训练阶段的原理和预测步骤一致,都可以直接通过命令行搞定,关于这部分参数依然在ultralytics/yolo/cfg/default.yaml中,但我们要训练自己的数据集时记得在 data 参数后指定我们自己的数据集yaml文件路径哦。

以下提供三种指令,分别对应了不同的需求。这里有一点值得注意, 我直接写data=MoonCake.yaml是报错的!

# 从YAML构建一个新模型,从头开始训练yolo detect train data=coco128.yaml model=yolov8n.yaml epochs=100 imgsz=640yolo detect train data=ultralytics/datasets/MoonCake.yaml model=yolov8n.yaml epochs=100 imgsz=640# 从预训练的*.pt模型开始训练yolo detect train data=coco128.yaml model=yolov8n.pt epochs=100 imgsz=640yolo detect train data=ultralytics/datasets/MoonCake.yaml model=yolov8n.pt epochs=100 imgsz=640# 从YAML中构建一个新模型,将预训练的权重转移到它并开始训练yolo detect train data=coco128.yaml model=yolov8n.yaml pretrained=yolov8n.pt epochs=100 imgsz=640yolo detect train data=ultralytics/datasets/MoonCake.yaml model=yolov8n.yaml pretrained=yolov8n.pt epochs=100 imgsz=640

参数默认值描述model模型文件路径,如yolov8n.pt,yolov8n.yamldata数据文件路径,如coco128.yamlepochs100训练的轮数patience50等待没有观察到改进的轮数,以便提前停止训练batch16每个批次的图像数量(-1表示自动批处理)imgsz640输入图像的大小,可以是整数或w,hsaveTrue保存训练检查点和预测结果save_period-1每x个轮数保存检查点(如果<1,则禁用)cacheFalseTrue / ram,磁盘或False。使用缓存加载数据device运行的设备,如cuda device=0或device=0,1,2,3或device=cpuworkers8加载数据的工作线程数(每个RANK如果DDP)project项目名称name实验名称,结果保存到“project / name”目录中exist_okFalse是否覆盖现有实验pretrainedFalse是否使用预训练模型optimizerSGD要使用的优化器,choices=[‘SGD’, ‘Adam’, ‘AdamW’, ‘RMSProp’]verboseTrue是否打印详细输出seed0用于可重复性的随机种子deterministicTrue是否启用确定性模式single_clsFalse将多类数据训练为单类image_weightsFalse使用加权图像选择进行训练rectFalse如果mode ='train’则进行矩形训练,如果mode ='val’则进行矩形验证cos_lrFalse使用余弦学习率调度程序close_mosaic10对于最后10个轮数禁用马赛克增强resumeFalse从上一个检查点恢复训练ampTrue自动混合精度(AMP)训练,choices=[True, False],True运行AMP检查

在训练过程中(训练结束后也可以看)我们可以通过Tensorboard实时查看模型的训练进度, 只需要在终端中键入如下的指令,这个在我们每次训练时候都会有提示:

tensorboard --logdir runs\detect\train2

训练结束后我们可以查看得到的一些指标数据:

我这里展示一张PR曲线图。

5.4 验证模型

验证模型同样是简单命令行即可实现,如果没有修改中的 ultralytics/yolo/cfg/default.yaml 默认值,同样别忘了指定自己数据集的yaml,即data=ultralytics/datasets/MoonCake.yaml

yolo task=detect mode=val model=yolov8n.pt# mode=val 就是看验证集yolo task=detect mode=val model=runs/detect/train2/weights/best.pt data=ultralytics/datasets/MoonCake.yaml# mode=test 就是看测试集yolo task=detect mode=test model=runs/detect/train2/weights/best.pt data=ultralytics/datasets/MoonCake.yaml

同样的,我们验证完后依然可以得到一个文件夹: 我们可以看一下检测效果:

嗯~ 古德古德~

参数名默认值描述valTrue在训练过程中进行验证/测试splitval用于验证的数据集划分,可选项有’val’、‘test’或’train’save_jsonFalse是否将结果保存为JSON文件save_hybridFalse是否保存标签的混合版本(标签+额外的预测结果)conf0.25(predict),0.001(val)检测的物体置信度阈值(默认值),在训练和验证过程中使用不同的阈值iou0.7非极大值抑制(NMS)的交并比(IoU)阈值max_det300每个图像最多检测出的目标数量halfFalse是否使用半精度(FP16)dnnFalse是否使用OpenCV DNN进行ONNX推理plotsTrue在训练/验证过程中是否保存图表5.5 导出模型

只需使用如下命令,就可完成模型的导出。

yolo task=detect mode=export model=runs/detect/train/weights/best.pt

导出有关的具体参数如下:

参数名默认值描述formattorchscript导出的模型格式kerasFalse是否使用KerasoptimizeFalseTorchScript: 是否针对移动设备进行优化int8FalseCoreML/TF的INT8量化dynamicFalseONNX/TF/TensorRT: 是否动态轴simplifyFalseONNX: 是否简化模型opsetONNX: 操作版本(可选)workspace4TensorRT: 工作空间大小(GB)nmsFalseCoreML: 是否添加NMS

注:TorchScript是PyTorch的模型导出工具。INT8(8位整数量化)是一种量化方法,可将神经网络参数表示为8位整数,以降低存储和计算成本。ONNX(Open Neural Network Exchange)是一种跨平台、开放式的机器学习框架。TensorRT是一种用于加速深度学习推理的高性能引擎。CoreML是苹果公司推出的机器学习框架。Keras是一种流行的深度学习框架。

至此使用YOLOv8训练自己的目标检测数据集-【收集数据集】-【标注数据集】-【划分数据集】-【配置训练环境】-【训练模型】-【评估模型】-【导出模型】就完成了,欢迎大家一起交流学习~

本文链接地址:https://www.jiuchutong.com/zhishi/300309.html 转载请保留说明!

上一篇:【视觉SLAM】SO-SLAM: Semantic Object SLAM With Scale Proportional and Symmetrical Texture Constraints(视觉slam十四讲笔记)

下一篇:完整的ES6面试题(es6面试题promise)

  • lol荣誉系统(lol荣耀奖励)(LOL荣誉系统维护)

    lol荣誉系统(lol荣耀奖励)(LOL荣誉系统维护)

  • 苹果13打电话怎么显示卡1卡2(苹果13打电话怎么录音通话录音)

    苹果13打电话怎么显示卡1卡2(苹果13打电话怎么录音通话录音)

  • opporeno4的屏幕刷新率是多少hz(opporeno4的屏幕刷新率在哪里)

    opporeno4的屏幕刷新率是多少hz(opporeno4的屏幕刷新率在哪里)

  • 什么是多媒体个人计算机(啥是多媒体)

    什么是多媒体个人计算机(啥是多媒体)

  • qq怎样设置自动回复(QQ怎样设置自动加好友)

    qq怎样设置自动回复(QQ怎样设置自动加好友)

  • 快剪辑剪辑后不清晰(快剪辑下一步点不了)

    快剪辑剪辑后不清晰(快剪辑下一步点不了)

  • 电池长期不用怎么保存(电池长期不用怎么办)

    电池长期不用怎么保存(电池长期不用怎么办)

  • 苹果x充电边框有电流(苹果x充电边框有电)

    苹果x充电边框有电流(苹果x充电边框有电)

  • 手机流量可以共享给电脑吗(手机流量可以共享吗)

    手机流量可以共享给电脑吗(手机流量可以共享吗)

  • 电脑开机密码是几位数(电脑开机密码是微软账号密码吗)

    电脑开机密码是几位数(电脑开机密码是微软账号密码吗)

  • 系统运行安全管理的主要工作包括(系统运行安全管理包括系统多选)

    系统运行安全管理的主要工作包括(系统运行安全管理包括系统多选)

  • 爱奇艺显示互动播放是什么意思(爱奇艺显示互动加载失败)

    爱奇艺显示互动播放是什么意思(爱奇艺显示互动加载失败)

  • phone是什么接口(earphone是什么接口)

    phone是什么接口(earphone是什么接口)

  • 华为手机有哪些系列(华为手机有哪些系列都有什么特点)

    华为手机有哪些系列(华为手机有哪些系列都有什么特点)

  • 电脑ip地址有多少位(电脑ip地址多开器)

    电脑ip地址有多少位(电脑ip地址多开器)

  • 苹果蓝牙耳机设置教程(苹果蓝牙耳机设置方法)

    苹果蓝牙耳机设置教程(苹果蓝牙耳机设置方法)

  • 微信浮窗在哪里打开(微信浮窗在哪里关闭)

    微信浮窗在哪里打开(微信浮窗在哪里关闭)

  • 淘宝主页背景怎么换(淘宝主图背景色)

    淘宝主页背景怎么换(淘宝主图背景色)

  • 为什么抖音被评级(为什么抖音被评价了)

    为什么抖音被评级(为什么抖音被评价了)

  • 苹果库乐队在哪里(苹果库乐队哪款电脑可以用)

    苹果库乐队在哪里(苹果库乐队哪款电脑可以用)

  • 如何避免微信封号(如何避免微信封号2022)

    如何避免微信封号(如何避免微信封号2022)

  • ai岗位主要做什么(ai行业是什么工作 做什么的)

    ai岗位主要做什么(ai行业是什么工作 做什么的)

  • word插入图片快捷键(word插图片快捷键是什么)

    word插入图片快捷键(word插图片快捷键是什么)

  • windows10如何激活(windows10如何激活密钥)

    windows10如何激活(windows10如何激活密钥)

  • 2018年装机电源怎么选?中高端电源推荐(装机电源怎么装)

    2018年装机电源怎么选?中高端电源推荐(装机电源怎么装)

  • mdir命令  显示MS-DOS目录(mdadm命令详解)

    mdir命令 显示MS-DOS目录(mdadm命令详解)

  • 出借包装物收取的押金
  • 通过法院拍卖取得的设备怎么开具发票
  • 居间费用超过3%剩余的怎样能拿到手
  • 差额征税劳务费发票
  • 技术推广服务包含什么 奇瑞汽车
  • 预缴税款的完税证明单
  • 应交增值税进项税额转出借贷方向表示什么
  • 应付股利科目设置
  • 劳务发票税率营改增后是多少?
  • 报废车辆残值收入交多少增值税
  • 不是企业性质的民办学校要交什么税
  • 软件开发公司一般做什么
  • 利润借方余额表示盈利还是亏损
  • 工资个税合理避税
  • 简易征收是什么意思和一般纳税人
  • 税收思想
  • 资产负债表季度申报期末余额怎么填
  • 营改增后无形资产增加的是
  • 软件开发过程中采用多种图形化工具
  • 企业短期投资交增值税吗
  • deskrun.exe是什么东西
  • PHP:oci_fetch_array()的用法_Oracle函数
  • 外汇关闭时间
  • 未分配利润转增股本规定
  • 增值税专票跨月但未认证,怎么作废
  • php文件在线解密
  • 网速第一的国家
  • php显示文件目录及路径
  • 长期挂账的其他应付款转营业外收入情况说明
  • yolov5讲解
  • 预缴的附加税怎么填表抵减
  • php登录注册整套源码
  • 个人简历html网页代码含效果图
  • 最新的目标检测算法2020
  • 保障金是低保吗
  • 对企业采取以旧换新方式销售的应税产品
  • 公司收不到的账款而发不出去怎么办
  • 预提跨年工资怎么处理
  • 什么叫python的开发环境
  • 印刷行业成本核算程序
  • 销售旧货的增值税是销项税吗
  • 围挡属于市政还是建筑
  • 电子承兑汇票是银行承兑汇票吗
  • 小规模纳税人收入会计分录
  • 未分配利润与利润表的勾稽关系
  • 小规模公司购买水泥怎么入账
  • 航天信息的发票以什么形式导入开票信息
  • 挂靠管理费如何入账?
  • 专利财政补贴
  • 工会经费教育经费福利费计提比例
  • 公路工程投标保证金
  • 融资租赁中承租人的义务
  • 契税发票错了能作废吗
  • 建筑施工企业购入材料怎么做账
  • 公司定额征收需要什么
  • 赡养老人扣除标准个税
  • CentOS 7.2下MySQL的安装与相关配置
  • ubuntu20.04软件安装
  • freebsd软件安装
  • 微软招聘流程
  • win8.1如何关闭开机密码
  • win10怎么禁止用户安装程序
  • linux rpm如何安装
  • linux中make
  • win10 预览版 移除 tab 栏 特性
  • linux ssh key登录
  • nodejs writestream
  • perl读取文件内容逐行处理
  • unity ulua
  • javaweb开发技术有哪些
  • unity多人游戏
  • 一个挖掘机主播得多少钱
  • JavaScript jquery及AJAX小结
  • 安卓手机管家app
  • eclipse自动生成
  • 陕西地方税务局2017年2号公告
  • 浙江税务网上开票流程图
  • 我们如何理解税收意义
  • 国税局内设机构
  • 社保申报截止日期每月
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设