TT100K数据集整理代码
时间: 2025-05-13 13:50:06 浏览: 15
### TT100K 数据集整理代码示例
为了将 TT100K 数据集用于 YOLOv1 的训练,需要完成以下几个主要任务:整理数据集的图片和标签文件,并生成 `data.yaml` 文件以指定数据集路径和类别信息。
#### 1. 图片复制脚本
可以使用 Python 脚本来递归查找并复制特定格式的图片到目标目录。以下是基于引用中的 `copy_images_from_folders.py` 思路实现的一个示例代码:
```python
import os
import shutil
from pathlib import Path
def copy_images(source_folder, target_folder, image_extensions=('.jpg', '.png')):
source_path = Path(source_folder)
target_path = Path(target_folder)
if not target_path.exists():
target_path.mkdir(parents=True, exist_ok=True)
for file_path in source_path.rglob('*'):
if file_path.is_file() and file_path.suffix.lower() in image_extensions:
shutil.copy(file_path, target_path / file_path.name)
if __name__ == "__main__":
source_directory = "./raw_data/images"
destination_directory = "./processed_data/images"
copy_images(source_directory, destination_directory)
```
此脚本会从源文件夹中递归查找所有符合条件的图片文件,并将其复制到目标文件夹中[^2]。
---
#### 2. 标签文件转换
TT100K 数据集通常提供的是 XML 或其他格式的标注文件,而 YOLO 需要的是 TXT 格式的标注文件。以下是一个简单的转换脚本示例:
```python
import xml.etree.ElementTree as ET
import os
def convert_to_yolo_format(xml_file, output_dir, class_names):
tree = ET.parse(xml_file)
root = tree.getroot()
img_width = int(root.find('size').find('width').text)
img_height = int(root.find('size').find('height').text)
with open(os.path.join(output_dir, f"{os.path.splitext(os.path.basename(xml_file))[0]}.txt"), "w") as out_file:
for obj in root.findall('object'):
name = obj.find('name').text
class_id = class_names.index(name)
bndbox = obj.find('bndbox')
xmin = float(bndbox.find('xmin').text)
xmax = float(bndbox.find('xmax').text)
ymin = float(bndbox.find('ymin').text)
ymax = float(bndbox.find('ymax').text)
x_center = ((xmin + xmax) / 2) / img_width
y_center = ((ymin + ymax) / 2) / img_height
width = (xmax - xmin) / img_width
height = (ymax - ymin) / img_height
out_file.write(f"{class_id} {x_center:.6f} {y_center:.6f} {width:.6f} {height:.6f}\n")
if __name__ == "__main__":
xml_directory = "./raw_data/annotations"
txt_output_directory = "./processed_data/labels"
if not os.path.exists(txt_output_directory):
os.makedirs(txt_output_directory)
classes = ["Speed Limit", "No Entry", "Stop", "Turn Right"] # 替换为实际类名列表
for xml_file in os.listdir(xml_directory):
if xml_file.endswith(".xml"):
convert_to_yolo_format(os.path.join(xml_directory, xml_file), txt_output_directory, classes)
```
该脚本读取 XML 格式的标注文件,并将其转换为 YOLO 所需的标准化坐标格式[^1]。
---
#### 3. 创建 `data.yaml` 文件
对于 TT100K 数据集,假设其有 43 个类别,则可以在项目根目录下创建一个名为 `data.yaml` 的配置文件,内容如下所示:
```yaml
train: ./datasets/tt100k/train
val: ./datasets/tt100k/val
nc: 43 # 类别数量
names: ['Speed Limit 20', 'Speed Limit 30', 'Speed Limit 50', ..., 'Stop'] # 填写具体类别名称
```
注意:`names` 列表应根据 TT100K 数据集中定义的实际类别进行填充[^3]。
---
####
阅读全文
相关推荐


















