TGViewer
Genesis | Изобретения Genesis | Изобретения @gen_xt · 155 subscribers
Post #151 186
Исусственное и интеллект | iOs

Итак, мы тут решили перепечатать немного документации Apple для наглядности.

Шаг 1 - сбор данных.
Здесь нужно подготовить данные для обучения.
[
{
"filename": "image1.jpg",
"annotations": ["window_sill", "aloe", "pot"]
},
{
"filename": "image2.jpg",
"annotations": ["cactus", "pot", "person"]
}
]


Шаг 2 - ферментирование данных.
Здесь данные будут переведены в формат, с которым будем работать дальше
// Define an annotation.
struct AnnotatedFile: Decodable {
var filename: String
var annotations: Set<String>
}


// Specify the input directory.
let directoryURL = URL(filePath: "/path/to/files", directoryHint: .isDirectory)


// Decode the annotations.
let decoder = JSONDecoder()
let data = try Data(contentsOf: directory.appending(component: "annotations.json"))
let annotatedFiles = try decoder.decode([AnnotatedFile].self, from: data)


// Convert the annotations to an array of `AnnotatedFeature`.
let annotatedFeatures = annotatedFiles.map {
AnnotatedFeature(
feature: directory.appending(component: $0.filename),
annotation: $0.annotations
)
}


Шаг 3 - алгоритм обработки.
Здесь собирается pipeline обработки данных для обучения.
// List all the labels.
let labels = ["aloe", "cactus", "person", "pot", "window_sill"]


// Compose the estimator.
let estimator = ImageReader()
.appending(ImageFeaturePrint())
.appending(FullyConnectedNetworkMultiLabelClassifier<Float, String>(labels: labels))


Шаг 4 -обучение.

let (training, validation) = annotatedFeatures.annotatedFiles.randomSplit(by: 0.8)
let model = try await estimator.fitted(
to: training,
validateOn: validation
)

let predicted = try await model.prediction(from: testAnnotatedFiles)
let metrics = try MultiLabelClassificationMetrics(
classifications: predicted.map(\.prediction),
groundTruth: predicted.map(\.annotation),
strategy: .balancedPrecisionAndRecall,
labels: labels
)
print(metrics.meanAveragePrecision)


Шаг 5 - чёрный ящик.
И вот тут как раз то, о чём говорили - за нас уже подумали.

Экспортируем модель
// Export to Core ML
let modelURL = URL(filePath: "/path/to/model")
try model.export(to: modelURL)


И далее в игру вступает фирменный Big Thing от Apple.

import Vision
import CoreML


let handler = VNImageRequestHandler(url: URL(filePath: "image.jpg"))
let visionModel = try VNCoreMLModel(for: compiledModel)
let request = VNCoreMLRequest(model: visionModel)
try handler.perform([request])
if let observations = request.results as? [VNClassificationObservation] {
// Filter observations using a target precision and recall.
let filteredObservations = observations.filter {
$0.hasMinimumPrecision(0.3, forRecall: 0.7)
}
// Use observations.
}


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

* На самом деле Google тоже недалеко ушёл, если только брать в рассчёт то, что TensorFlow появился именно внутри корпорации добра. Но это в следующих постах=)
More from @gen_xt
  1. Sep 19, 2026В Санкт-Петербурге прошел вернисаж выставки «Урбаномания. Контуры будущего» 12 сентября га…
  2. Sep 16, 2026⚡️ 22 сентября, вторник, 17:00 — Встреча сообщества ОС Аврора в Санкт-Петербурге 📱 Собира…
  3. Aug 8, 2026НЕ WARHAMMER!
  4. Aug 8, 2026Музей военной миниатюры в Кронштадте.
  5. Jun 30, 2026video post
  6. Jun 10, 2026photo post
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →