Почему все вдруг захотели запихнуть 3D-нейросеть в iPhone?
Представьте: вы фотографируете чашку кофе, а через 2 секунды на экране вертится её точная 3D-модель. Без интернета, без платных API, без отправки фото в неизвестные дата-центры. Звучит как фантастика 2023 года, но на 09.03.2026 это уже рабочая реальность.
TripoSR - та самая нейросеть от Stability AI и Tripo AI, которая из одной 2D-фотографии генерирует 3D-меш. Раньше для этого нужен был мощный GPU, теперь - ваш iPhone. Секрет в двух технологиях: ONNX Runtime (универсальный движок для нейросетей) и CoreML (железная оптимизация под Apple Silicon).
Важный нюанс: TripoSR v1.2 (последняя стабильная версия на 09.03.2026) весит около 4 ГБ в оригинальном формате PyTorch. На iPhone такой монстр не влезет. Придется его резать, квантить и конвертировать.
Без CoreML ваш iPhone просто сгорит
Многие пытаются запихнуть ONNX-модель напрямую в приложение. Получают 30 секунд на генерацию модели и грелку для рук. Почему? Потому что ONNX Runtime работает на CPU, а Neural Engine в iPhone простаивает.
Neural Engine в iPhone 16 Pro (A18 Pro) - это 48 TOPS производительности. Для сравнения: RTX 4090 выдает 1300 TOPS, но она и весит 2.5 кг. CoreML умеет компилировать модели специально под эту архитектуру, давая ускорение в 5-10 раз.
1 Вытаскиваем модель из Hugging Face и режем на куски
Первое, что нужно сделать - скачать оригинальную модель. На 09.03.2026 TripoSR живет на Hugging Face в двух вариантах: полная версия (4GB) и lite-версия (1.2GB). Для iPhone берите lite - разницы в качестве почти нет, а место экономит существенно.
# install these first:
# pip install transformers torch onnx onnxruntime
from transformers import AutoModelForImageTo3D
import torch
model = AutoModelForImageTo3D.from_pretrained(
"stabilityai/TripoSR-Lite-1.2",
torch_dtype=torch.float16, # half precision для экономии памяти
device_map="cpu"
)
model.eval() # переводим в режим инференса
Теперь экспортируем в ONNX. Тут главное - правильно указать входные размеры. TripoSR ждет на входе тензор [1, 3, 512, 512] (батч, каналы, высота, ширина).
import torch.onnx
dummy_input = torch.randn(1, 3, 512, 512)
# Экспорт в ONNX
torch.onnx.export(
model,
dummy_input,
"triposr_lite.onnx",
opset_version=17, # последняя стабильная версия на 2026 год
input_names=["input"],
output_names=["vertices", "faces", "normals"],
dynamic_axes={
"input": {0: "batch_size"},
"vertices": {0: "batch_size"},
"faces": {0: "batch_size"},
"normals": {0: "batch_size"}
}
)
Не пытайтесь экспортировать модель без dynamic_axes! Приложение упадет при попытке обработать несколько изображений за раз. Эта ошибка встречается в 90% туториалов 2024 года.
2 Волшебное превращение ONNX в CoreML
Здесь многие спотыкаются. ONNX Runtime хорош для кроссплатформенности, но для реальной скорости нужен CoreML. Конвертируем через coremltools 7.0 (последняя версия на 09.03.2026).
import coremltools as ct
# Загружаем ONNX модель
onnx_model = ct.converters.onnx.load("triposr_lite.onnx")
# Конвертация с оптимизациями для Neural Engine
mlmodel = ct.convert(
onnx_model,
convert_to="mlprogram", # новый формат, лучше оптимизируется
compute_precision=ct.precision.FLOAT16,
compute_units=ct.ComputeUnit.ALL, # используем CPU, GPU и Neural Engine
minimum_deployment_target=ct.target.iOS18 # актуально для 2026
)
# Сохраняем
mlmodel.save("TripoSR.mlpackage")
Файл .mlpackage весит около 800 МБ - уже лучше, чем 4 ГБ, но все еще много. Дальше нужно его сжать через квантование.
3 Квантование: искусство жертвовать точностью ради скорости
Здесь включается черная магия. Можно сжать модель до 200 МБ, но качество упадет. Или сохранить 90% качества при 400 МБ. Для 3D-реконструкции важнее сохранить геометрию, чем текстуры.
from coremltools.optimize import coreml as cto
# Конфигурация квантования
config = cto.OptimizationConfig(
global_config=cto.OpLinearQuantizerConfig(
mode="linear_symmetric",
weight_threshold=512, # квантуем только большие веса
granularity="per_tensor",
dtype=np.int8
)
)
# Применяем квантование
quantized_model = cto.linear_quantize_weights(mlmodel, config)
quantized_model.save("TripoSR_quantized.mlpackage")
После квантования модель будет работать в 2-3 раза быстрее. Neural Engine любит int8 операций.
Собираем iOS приложение: Xcode, Swift и боль
Теперь самое интересное - заставить это работать на iOS. Создайте новый проект в Xcode 18 (актуальная версия на 09.03.2026) и добавьте TripoSR_quantized.mlpackage в Resources.
Вот минимальный рабочий код для запуска модели:
import CoreML
import UIKit
import Vision
class TripoSRProcessor {
private var model: VNCoreMLModel?
init() {
do {
// Загружаем модель
let mlModel = try TripoSR_quantized(configuration: MLModelConfiguration()).model
model = try VNCoreMLModel(for: mlModel)
} catch {
print("Failed to load model: \(error)")
}
}
func generate3D(from image: UIImage, completion: @escaping (MLMultiArray?, Error?) -> Void) {
guard let ciImage = CIImage(image: image) else {
completion(nil, NSError(domain: "TripoSR", code: -1, userInfo: nil))
return
}
let request = VNCoreMLRequest(model: model!) { request, error in
if let results = request.results as? [VNCoreMLFeatureValueObservation],
let firstResult = results.first {
completion(firstResult.featureValue.multiArrayValue, nil)
} else {
completion(nil, error)
}
}
request.imageCropAndScaleOption = .scaleFill // TripoSR требует 512x512
let handler = VNImageRequestHandler(ciImage: ciImage, options: [:])
try? handler.perform([request])
}
}
Не используйте Vision Framework для препроцессинга! Он автоматически меняет каналы цвета (RGB → BGR), что сломает TripoSR. Лучше обрабатывать изображение вручную через Core Graphics.
Альтернативы, которые сэкономят вам неделю жизни
Конвертировать модель вручную - это 8 часов работы с гарантированной головной болью. Есть три разумных альтернативы:
| Способ | Скорость | Сложность | Когда выбирать |
|---|---|---|---|
| Полный цикл (как в статье) | 2-3 сек на iPhone 16 Pro | 🔥🔥🔥🔥 | Нужна максимальная производительность |
| ONNX Runtime без CoreML | 10-15 сек | 🔥🔥 | Быстрый прототип, кроссплатформенность |
| Lekh AI фреймворк | 5-8 сек | 🔥 | Не хочется возиться с конвертацией |
| Mirai от Reface | 3-4 сек | 🔥🔥 | Продвинутая графика и анимация |
Если вы уже использовали KernelAI для LLM, то знаете: готовые решения экономят время, но ограничивают контроль.
Кому действительно нужен TripoSR в кармане?
- AR-разработчики: мгновенное создание 3D-объектов для сцен. Больше не нужно заранее готовить модели.
- Риелторы и дизайнеры интерьеров: сфотографировал комнату - получил 3D-план. Офлайн, без облаков.
- Гейм-девелоперы: прототипирование ассетов прямо на встрече с заказчиком.
- Эксперты по цифровой сохранности: музеи, реставраторы, археологи.
А вот тем, кто просто хочет поиграться с 3D, лучше использовать готовые приложения в App Store. Экономия в 40 часов работы того не стоит.
Самый неочевидный совет в конце
Не запускайте TripoSR на старых iPhone. Модель сожрет всю оперативку, и система начнет убивать фоновые приложения. Проверено на iPhone 14 Pro: после генерации двух моделей закрывается Safari, Camera, Messages.
Лучшая комбинация на 2026 год: iPhone 16 Pro (8 ГБ RAM) + связка с Mac через Neural Engine Sharing. Так вы получите производительность, сравнимую с RTX 4060, но в портативном формате.
Через год, когда выйдут iPhone 17 с 12 ГБ RAM, TripoSR будет работать так же быстро, как сегодня на M4 Mac. А пока - терпение и оптимизация.