Как создать MLImageClassifier в Xcode 10

Я пытаюсь построить машинное обучение - Image Recognition с помощью Create ML в Xcode 10.1 Детская площадка, но у меня есть некоторые проблемы, чтобы поместить мои данные в модель.

У меня есть папка с изображениями от 1 до 1336 и .csv файл с 2 столбцами (название изображения и классификация изображения).

Я не знаю точно, как поместить это в модель.

У меня есть это до сих пор:

import Cocoa
import CreateML

let data = try MLDataTable(contentsOf: URL(fileURLWithPath: "/Users/x/Desktop/CoreML/project/file.csv"))

let(trainingData, testingData) = data.randomSplit(by: 0.8, seed: 1)

let Classifier = try MLImageClassifier *need help here*

let evaluationMetrics = sentimentClassifier.evaluation(on: testingData)

let evaluationAccuracy = (1 - evaluationMetrics.classificationError) * 100

let metaData = MLModelMetadata(author: "x", shortDescription: "Model", version: "1.0")

try classifier.write(to: URL(fileURLWithPath: "/Users/x/Desktop/CoreML/project/XClassifier.mlmodel"))

2 ответа

Я считаю, что наклеить ярлыки на MLImageClassifier с помощью .csv или любой другой отдельный файл. У вас есть только два варианта: использовать имена файлов в качестве меток или каталоги в качестве меток (вероятно, предпочтительнее в случае многих изображений):

let model = try MLImageClassifier(trainingData: .labeledDirectories(at: trainingDir))
let evaluation = model.evaluation(on: .labeledDirectories(at: testingDir))

Вам нужно будет поместить изображения в подкаталоги, названные как ярлыки в вашем .csv файл.

Я просто сам с этим боролся. Вот решение для реорганизации данных для CreateML. Вся заслуга принадлежит Тони Т1, который придумал этот сценарий.

  1. Поместите изображения и файл CSV в одну папку.

  2. В Automator создайте новый рабочий процесс следующим образом:

  1. Запустите рабочий процесс. Выберите файл CSV и посмотрите, как изображения рассортируются по соответствующим папкам!

Сценарий выглядит следующим образом:

      cd "${1%/*}"
while read line         
do         
     FolderName=${line%;*}
     ImageName=${line#*;}
     mkdir "$FolderName"
     mv "$ImageName" "$FolderName"
done < "$1"
  • DF20 - это начальная папка, вы можете изменить ее на что хотите
  • мой CSV был разделен знаком ";". Если ваш CSV разделен символом «,», измените этот символ в скрипте (например, FolderName=${line%,*} )
  • В моем CSV классы были столбцом A и столбцом изображений B. Переключите это в зависимости от вашего случая.
Другие вопросы по тегам