Это 25-й день моего участия в ноябрьском испытании обновлений. Узнайте подробности события:Вызов последнего обновления 2021 г.
окрестности
- windows 10 64bit
- voc dataset
Введение
Иногда для большого набора данных (например,VOC2012
), нам нужно только сделать определенную цель (например,person
) обучение модели, в это время необходимо отсортировать изображения конкретной цели и соответствующие аннотации для формирования нового набора данных. В этой статье мы достигнем этой цели.
Шаги
здесь сVOC2012
Возьмите набор данных в качестве примера, перейдите кroboflow
Официальный общедоступный набор данных, выберитеPascal VOC 2012 Dataset
VOC2012
При загрузке выберитеYOLO Darknet
Формат
VOC2012
После завершения загрузки разархивируйте его, структура каталогов такая
VOC2012
полныйVOC2012
Содержит 20 целей, это в файле_darknet.labels
описано в
VOC2012
Здесь предполагается, что извлечениеperson
этоclass
, мы создаем новый скрипт в корневом каталоге набора данных и вводим следующий код
import os
import shutil
# 统计下最后图片的数量
counter = 0
# 创建2个目标文件夹,images放图片,labels放标注
if not os.path.exists('images'):
os.makedirs('images')
if not os.path.exists('labels'):
os.makedirs('labels')
for file in os.listdir('train'):
flag = False
if file.endswith('.txt'):
f = open("train/{}".format(file), 'r')
line = f.readline()
# 原数据集中有部分txt,大小为0,内容为空,去除掉
if line == "":
continue
while line:
# 去除txt中的第一列的值,也就是class id
tmp = line.split(' ')[0]
# txt中的数据是字符串类型,人这个目标的id是14
if tmp != "14":
print('NOT person.')
flag = True
break
line = f.readline()
f.close()
if not flag:
counter += 1
prefix = file[0: -3]
# 拷贝符合条件的图片和对应的标注
shutil.copy2('train/{}jpg'.format(prefix), 'images')
shutil.copy2('train/{}'.format(file), 'labels')
print('total number image: {}'.format(counter))
После выполнения вышеуказанного скрипта подходящие изображения будут сохранены вimages
папку, а аннотации хранятся вlabels
папка
Затем нам нужно изменить аннотациюclass id
, вVOC2012
в, человекid
равно 14 (начиная с 0), учитывая, что в новом наборе данных есть только категория людей, поэтомуid
равен 0, то работа становитсяtxt
Измените 14 на 0 в первом столбце данных в файле.
По сути, это операция поиска и замены, и существует множество способов ее реализации. Здесь мы представляемwindows
Инструмент с открытым исходным кодом подgrepWin
, имеет графический интерфейс, управление очень простое, адрес загрузки
GitHub.com/Stefan Library Eng…
После установки щелкните правой кнопкой мыши папкуlabels
,выберитеsearch with grepWin
Открытым
VOC2012
Поиск может использовать обычный, также может использовать текст.
Используя полное текстовое сопоставление в этом примере, вам нужно поставить14
заменить0
, обратите внимание на пробел после него, чтобы вы могли отфильтровать больше совпадений, не беспокойтесь о замене в первую очередь, вы можете сначала искать и видеть результаты
VOC2012
немногоtxt
файла, совпадений может быть несколько, нажмите вышеMatches
можно изменить порядок
VOC2012
открыть один изtxt
Проверьте это и обнаружите, что другие столбцы также могут совпадать14
, так что для данной ситуации нужно модифицировать вручную, благо таких файлов не слишком много.
Если есть одно совпадение, текст можно заменить напрямую.
На данный момент набор данных одной цели обработан и может использоваться для обучения.