技术标签: 笔记
在进行深度学习的数据训练之前,总是要先进行 数据集的划分,将数据集划分为训练集、测试集和验证集,即分为train、test和val三个文件夹。
在网上看了一些数据集划分的代码,90%是用不了,很多都是只划分了图像文件,根本不划分相应的标注文件,于是自己写了一个简单的脚本,同时将图片和标注都对应划分好。
在进行数据集划分之前,首先先建立好相应的文件夹,分为train、test和val三个文件。每个文件夹中,又包含image图像文件夹和annotation标注文件夹。
我的做法是,将数据集所有的数据都放入train里的对应文件中,图片放入train目录下的image文件夹,标注放入train目录下的annotation文件夹,然后通过代码,将train中的文件移入test和val文件夹。
只需设置好相应的文件夹路径,即可完成数据集的划分。
不同数据量的数据集要划分的比例不同,我选用的数据集样本比较少,我就按照6:2:2的比例去划分。其他人可以自己随便设定,如果不需要val,那么只需要将数据集划分为两部分,删除对应的val部分的代码就行。比例在程序中都可以自己调。
import os
import random
import shutil
def moveFile(train_img_Dir, train_mask_Dir):
img_pathDir = os.listdir(train_img_Dir) # 提取图片的原始路径
filenumber = len(img_pathDir)
# 自定义test的数据比例
test_rate = 0.2 # 如0.2,就是20%的意思
test_picknumber = int(filenumber*test_rate) # 按照test_rate比例从文件夹中取一定数量图片
# 自定义val的数据比例
val_rate = 0.2
val_picknumber = int(filenumber*val_rate) # 按照val_rate比例从文件夹中取一定数量图片
# 选取移动到test中的样本
sample1 = random.sample(img_pathDir, test_picknumber) # 随机选取picknumber数量的样本图片
print(sample1)
for i in range(0, len(sample1)):
sample1[i] = sample1[i][:-4] # 去掉图片的拓展名,移动标注时需要这个列表
for name in sample1:
src_img_name1 = train_img_Dir + name
dst_img_name1 = test_img_Dir + name
shutil.move(src_img_name1 + '.png', dst_img_name1 + '.png') # 加上图片的拓展名,移动图片
src_mask_name1 = train_mask_Dir + name
dst_mask_name1 = test_mask_Dir + name
shutil.move(src_mask_name1 + '.txt', dst_mask_name1 + '.txt') # 加上标注文件的拓展名,移动标注文件
# 选取移动到val中的样本
img_pathDir = os.listdir(train_img_Dir) # 这时图片目录里的文件数目会变
sample2 = random.sample(img_pathDir, val_picknumber) # 但是抽出来的数目,还是用之前算的
print(sample2)
for i in range(0, len(sample2)):
sample2[i] = sample2[i][:-4]
for name in sample2:
src_img_name2 = train_img_Dir + name
dst_img_name2 = val_img_Dir + name
shutil.move(src_img_name2 + '.png', dst_img_name2 + '.png')
src_mask_name2 = train_mask_Dir + name
dst_mask_name2 = val_mask_Dir + name
shutil.move(src_mask_name2 + '.txt', dst_mask_name2 + '.txt')
return
if __name__ == '__main__':
# train 从train中移动
train_img_Dir = '/home/rtx2080ti/Tianzhi/Tianzhi_Ship/output/train/img/'
train_mask_Dir = '/home/rtx2080ti/Tianzhi/Tianzhi_Ship/output/train/mask/'
# test路径:图片和标注目录
test_img_Dir = '/home/rtx2080ti/Tianzhi/Tianzhi_Ship/output/test/img/'
test_mask_Dir = '/home/rtx2080ti/Tianzhi/Tianzhi_Ship/output/test/mask/'
# val路径:图片和标注文目录
val_img_Dir = '/home/rtx2080ti/Tianzhi/Tianzhi_Ship/output/val/img/'
val_mask_Dir = '/home/rtx2080ti/Tianzhi/Tianzhi_Ship/output/val/mask/'
# 运行划分数据集函数
moveFile(train_img_Dir, train_mask_Dir)
这是本人比较喜欢的配置,基本上除了括号自动匹配和代码自动整理之外,与普通的IDE没有什么区别(当然区别还是有的!!!-_-)首先找到配置文件位置,如果你不知道你的配置文件在哪里的话,就打开vim,输入:version即可看到你的vimrc位置然后使用命令: cp /usr/share/vim/vimrc ~/. "复制vim的配置文件到主目录,即用户目录,其实/usr/share/vim
最近在学python爬虫,学习到了selenium的使用,看网上有很多使用selenium模拟登录12306网站的文章,于是自己也尝试了一下。期间遇到了一些问题,也参考了很多大佬的文章最终得到了解决,在这里记录下来,作为自己学习之用。首先我们到12306的登录页面,分析一下登录流程。打开登录页面后,默认是扫码登录,我们点击切换到账号登录,然后输入用户名密码,点击立即登录。这时会出来一个验证窗口,可选滑窗验证和短信验证,默认是滑窗验证。我们拖动滑块,验证通过后如果用户名密码正确,url就会跳转到正常登录页_js模拟12306登录
1.安装VMware.Workstation.2.安装Redhat Linux 9.0,在虚拟机下。3.完成前两步后,打开VMware->工具栏—>虚拟机->选择安装Vmware工具,进入在虚拟机中安装好的Linux环境(使用超级用户),这时光驱中已经出现了我们将要看装的软件VMwareTools-5.5.0-18463.i368.rpm和VMwareTools-5.5
《C语言程序设计》实验11-2 输出以下图形Submit StatisticProblem Description用输出语句打印以下图形:#####################Input无Output######################include <stdio.h>#inc...
100元面值一下的找零按实际情况
# -*- coding: utf-8 -*-import cv2import timeimport numpy as np###################### 视频载入 #############################cap = cv2.VideoCapture("E:\\Data_Set\\AODnet\\测试视频\\1.mp4")four..._python实时读取mp4文件并输出http
最近因为手头项目与vuecli3存在兼容性问题,于是迫不得已,把每个vue page页面用html + vue的传统模板进行重构(就像官网示例那样,通过<script> cdn引入vue ,使用new Vue({})的方式 ) 。但是在重构mescroll列表加载插件时遇到了问题。因为不是在vuecli中,mescroll-vue组件就不能在html里直接通过import来使用了。经过研究和测试,有如下两种解决办法一、使用vue-http-loader强制..._mescroll无法滑动
import numpy as npimport pandas as pdfrom pandas import Series,DataFrame一、统计函数 方法 说明 count 非NA值的数量 describe 针对Series或各DataFrame列计算汇总统计 min、max 计算最小值和最大值 argmin、arg..._idxmax apply lambda
一、预备知识-程序的内存分配 由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack): 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、全局区(static): 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,_c堆和栈的区别
科技日益发展的今天,移动电子设备似乎成了我们生活的主角,智能手机、平板电脑几乎从不离身。但智能手机和平板电脑也有缺憾,就是自身的存储容量实在太少,能随时调取资料的大容量存储设备就显得十分必要。今天,笔者就为大家介绍,如何在电脑上,使用Serv-U+Cpolar内网穿透,构建一个ftp协议服务器,方便我们随时读取调阅文件资料。_远程ftp服务器搭建
因为是做j2ee后台开发的,所以在Linux上搭建j2ee环境是每一个java程序员所需要掌握的。所以这篇随笔主要记录一下j2ee环境搭建过程,包括jdk、tomcat、eclipse的安装,(对于mysql数据库的安装,将会在后面的随笔中记录)。一、jdk1.7的安装及环境搭建在CentOS6.4安装完以后,系统默认安装了jdk1.6,以及jre-1.7.0-openjdk..._centos配置j2ee
numpy主要是关于矩阵的运算,pandas是关于数据如何处理的相关库当我们拿到一份数据之后,需要对数据进行相应的处理。pandas底层都调用了numpy。1. 读取文件import pandasfood_info = pandas.read_csv('food_info.csv')print(type(food_info)) # 查看该数据的类print(food_info.dtypes) # 查看数据中的数据类型输出结果如下:<class 'pandas.core.frame.D_dataframe 1000除以某一列取整