Как создать 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, который придумал этот сценарий.
Поместите изображения и файл CSV в одну папку.
В Automator создайте новый рабочий процесс следующим образом:
- Запустите рабочий процесс. Выберите файл 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. Переключите это в зависимости от вашего случая.