Ich habe ein Torchvisionsmodell, das ohne Klassifizierungskopf als Ähnlichkeitssuche verwendet wird. Ich habe es als Torchvision -Modell gespeichert. Wenn ich es innerhalb von Python mit der Ähnlichkeitssuche verwende, wird das richtige Ergebnis erzielt, aber innerhalb von Kotlin habe ich es nicht überprüft, die gleichen Bilder zu verwenden, und es erhält nicht die gleichen Ausgänge. Ich vermute
Ich habe ein Torchvisionsmodell, das ohne Klassifizierungskopf als Ähnlichkeitssuche verwendet wird. Ich habe es als Torchvision -Modell gespeichert. Wenn ich es innerhalb von Python mit der Ähnlichkeitssuche verwende, wird das richtige Ergebnis erzielt, aber innerhalb von Kotlin habe ich es nicht überprüft, die gleichen Bilder zu verwenden, und es erhält nicht die gleichen Ausgänge. Ich vermute[code]# Model and transform setup device = torch.device("cuda" if torch.cuda.is_available() else "cpu") image_transform = transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]), ])
def load_trained_model(): model = torch.jit.load(MODEL_FILE, map_location=device) model.eval() return model
def extract_features(pil_img, model): with torch.no_grad(): tensor = image_transform(pil_img).unsqueeze(0).to(device) features = model(tensor) if len(features.shape) > 2: features = features.view(features.size(0), -1) return features.cpu().numpy().astype(np.float32) enter code here
@app.post("/extract_features") async def extract_image_features(image: UploadFile = File(...)): try: image_bytes = await image.read() with Image.open(BytesIO(image_bytes)) as img: processed_img = img.convert("RGB")
raw_features = extract_features(processed_img, model) < /code> Kotlin: < /p> fun preprocessImage(bitmap: Bitmap): Tensor { val rgbBitmap = if (bitmap.config != Bitmap.Config.ARGB_8888) { bitmap.copy(Bitmap.Config.ARGB_8888, true) } else { bitmap }
val resizedBitmap = resizeWithAspectRatio(rgbBitmap, 256)
val croppedBitmap = centerCrop(resizedBitmap, 224, 224)
val mean = floatArrayOf(0.485f, 0.456f, 0.406f) val std = floatArrayOf(0.229f, 0.224f, 0.225f) return TensorImageUtils.bitmapToFloat32Tensor(croppedBitmap, mean, std) }
private fun resizeWithAspectRatio(bitmap: Bitmap, targetSize: Int): Bitmap { val width = bitmap.width val height = bitmap.height
val scale = if (width < height) { targetSize.toFloat() / width.toFloat() } else { targetSize.toFloat() / height.toFloat() }
val newWidth = (width * scale).roundToInt() val newHeight = (height * scale).roundToInt()
// Use createScaledBitmap with bilinear filtering (matches PyTorch default) return bitmap.scale(256, 256) }
private fun centerCrop(bitmap: Bitmap, targetWidth: Int, targetHeight: Int): Bitmap { val width = bitmap.width val height = bitmap.height
val startX = (width - targetWidth) / 2 val startY = (height - targetHeight) / 2
val validStartX = Math.max(0, startX) val validStartY = Math.max(0, startY)
val validTargetWidth = Math.min(targetWidth, width - validStartX) val validTargetHeight = Math.min(targetHeight, height - validStartY)
Erhalte verschiedene Ergebnisse, die mit Abfrage SQL vs HQL abrufen. Aber wenn ich das gleiche SQL durchführe, der von Hibernate erzeugt wird, erhalten die AM für Ex 5 -Datensätze, aber meine Liste...
Es scheint, als hätte ich die gleichen Dinge in Python und C++ geschrieben, aber es führt zu völlig unterschiedlichen Ergebnissen.
C++-Code
std::vector imgpnts { { 1095.5f, 1013.f },
{ 2382.f ,...
Ich habe versucht, von Python nach C ++ zu migrieren, aber es scheint, dass die Ergebnisse so unterschiedlich sind. Ich habe dieselbe Bibliothek verwendet, die Talib
in C ++
ist. int size =...
Ich habe versucht, von Python nach C ++ zu migrieren, aber es scheint, dass die Ergebnisse so unterschiedlich sind. Ich habe dieselbe Bibliothek verwendet, die Talib
in C ++
ist. int size =...