voc数据集随机划分数据集的代码
时间: 2024-12-31 08:44:30 浏览: 7
### 关于 VOC 数据集 Python 随机划分训练集和测试集
对于 VOC 数据集的随机划分,可以通过编写简单的Python脚本来实现。此过程涉及读取数据集中所有的图像路径列表,并按一定比例将其划分为训练集、验证集以及可能存在的测试集。
下面是一个具体的例子,该代码片段展示了如何基于给定的比例(例如 0.7用于训练,0.2用于验证,0.1用于测试)来分割VOC数据集:
```python
import os
from sklearn.model_selection import train_test_split
import shutil
def split_dataset(image_folder, annotation_folder, output_folder, train_ratio=0.7, val_ratio=0.2, test_ratio=0.1):
# 获取所有图片名称(假设扩展名为'.jpg')
image_files = [f for f in os.listdir(image_folder) if f.endswith('.jpg')]
# 划分数据集
train_images, temp_images = train_test_split(image_files, test_size=(1-train_ratio), random_state=42)
validation_images, test_images = train_test_split(temp_images, test_size=test_ratio/(test_ratio + val_ratio), random_state=42)
# 创建输出文件夹结构并复制文件到相应位置
subsets = [('train', train_images), ('val', validation_images), ('test', test_images)]
for subset_name, subset_images in subsets:
subset_image_path = os.path.join(output_folder, 'images', subset_name)
subset_annotation_path = os.path.join(output_folder, 'annotations', subset_name)
os.makedirs(subset_image_path, exist_ok=True)
os.makedirs(subset_annotation_path, exist_ok=True)
for img_file in subset_images:
base_name = os.path.splitext(img_file)[0]
src_img = os.path.join(image_folder, img_file)
dst_img = os.path.join(subset_image_path, img_file)
shutil.copy(src_img, dst_img)
src_ann = os.path.join(annotation_folder, base_name + '.xml')
dst_ann = os.path.join(subset_annotation_path, base_name + '.xml')
shutil.copy(src_ann, dst_ann)
# 使用函数示例
split_dataset(
image_folder='/path/to/VOC/images',
annotation_folder='/path/to/VOC/annotations',
output_folder='/output/path/',
train_ratio=0.7,
val_ratio=0.2,
test_ratio=0.1
)
```
上述代码实现了对原始VOC数据集按照指定比例进行随机划分的功能[^2]。需要注意的是,在实际应用中应当根据实际情况调整`image_folder`, `annotation_folder` 和 `output_folder` 参数的具体路径值。
阅读全文