Help find dependencies, python 3.9 problem with conversion Converting ONNX -> TensorFlow
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 25/100
- Tipo de issue
- Error
- Claridad
- Necesita aclaración
- Estado de actividad
- Estancado
- Stack tecnológico
- python, pytorch, tensorflow
- Área
- machine-learning, tooling
Línea de trabajo
Comienza con el script de Python proporcionado y reproduce el paso convert_onnx_to_tf, anotando las versiones de Python y de las dependencias utilizadas. El trabajo estará terminado cuando se haya identificado un conjunto de dependencias compatible y se haya documentado como un archivo requirements funcional o una especificación de entorno equivalente.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Please help me resolve dependency issues.
I'm using Python 3.9 and encountering problems during the conversion step Converting ONNX -> TensorFlow. No matter what I try, I keep running into conflicts or other errors. I cannot find a proper set of dependencies or at least a working requirements.txt.
Some sources say Python 3.9 is required, others say 3.8, and some recommend 3.10. Honestly, I’m exhausted trying to figure this out.
import os
import subprocess
import torch
import onnx
import onnxslim
import sys
import types
from pathlib import Path
import urllib.request
import zipfile
import shutil
def download_yolov5_repo(target_dir):
zip_url = "https://github.com/ultralytics/yolov5/archive/refs/heads/master.zip"
zip_path = os.path.join(target_dir, "yolov5.zip")
print("📥 Downloading YOLOv5 repository...")
urllib.request.urlretrieve(zip_url, zip_path)
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
zip_ref.extractall(target_dir)
os.remove(zip_path)
extracted_path = os.path.join(target_dir, "yolov5-master")
yolov5_path = os.path.join(target_dir, "yolov5")
if os.path.exists(yolov5_path):
shutil.rmtree(yolov5_path)
shutil.move(extracted_path, yolov5_path)
print("✅ YOLOv5 repository downloaded and prepared.")
def convert_pt_to_onnx(pt_path, onnx_path):
yolov5_dir = os.path.join(Path(pt_path).parent, "yolov5")
yolov5_model_path = os.path.join(yolov5_dir, "models", "experimental.py")
if not os.path.exists(yolov5_model_path):
print("⚠️ YOLOv5 repo not found, downloading it...")
download_yolov5_repo(Path(pt_path).parent)
if yolov5_dir not in sys.path:
sys.path.insert(0, yolov5_dir)
try:
from models.experimental import attempt_load
except ImportError as e:
print("❌ ERROR: Could not import YOLOv5 modules. Ensure YOLOv5 repo is in the correct path.")
raise e
model = attempt_load(pt_path, device=torch.device('cpu'))
model.eval()
dummy_input = torch.randn(1, 3, 640, 640)
torch.onnx.export(
model,
dummy_input,
onnx_path,
export_params=True,
opset_version=12,
do_constant_folding=True,
input_names=['images'],
output_names=['output'],
dynamic_axes={'images': {0: 'batch_size'}, 'output': {0: 'batch_size'}}
)
onnxslim.slim(onnx_path, onnx_path)
def convert_onnx_to_tf(onnx_path, tf_path):
subprocess.run(['onnx-tf', 'convert', '-i', onnx_path, '-o', tf_path], check=True)
def convert_tf_to_tfjs(tf_path, tfjs_path):
try:
print("⚙️ Importing TensorFlow.js converter inside Python...")
sys.modules['tensorflow_decision_forests'] = types.SimpleNamespace()
sys.modules['tensorflow_decision_forests.keras'] = types.SimpleNamespace()
sys.modules['tensorflow_decision_forests.keras.core'] = types.SimpleNamespace()
sys.modules['tensorflow_decision_forests.keras.core_inference'] = types.SimpleNamespace()
sys.modules['tensorflow_decision_forests.tensorflow'] = types.SimpleNamespace()
sys.modules['tensorflow_decision_forests.tensorflow.ops'] = types.SimpleNamespace()
sys.modules['tensorflow_decision_forests.tensorflow.ops.inference'] = types.SimpleNamespace()
sys.modules['tensorflow_decision_forests.tensorflow.ops.inference.api'] = types.SimpleNamespace()
sys.modules['tensorflow_decision_forests.tensorflow.ops.inference.op'] = types.SimpleNamespace()
sys.modules['tensorflow_decision_forests.tensorflow.ops.inference.op_dynamic'] = types.SimpleNamespace()
import tensorflowjs as tfjs
tfjs.converters.convert_tf_saved_model(
saved_model_dir=tf_path,
output_dir=tfjs_path,
skip_op_check=True,
strip_debug_ops=True
)
print(f"✅ TensorFlow.js conversion complete! Files saved to: {tfjs_path}")
except Exception as e:
print("\n❌ ERROR: TensorFlow.js conversion failed unexpectedly.")
raise e
def main():
folder_path = input("Enter the folder path to search for PyTorch (.pt) models: ")
pt_files = [f for f in os.listdir(folder_path) if f.endswith(".pt")]
if not pt_files:
print("No PyTorch (.pt) models found.")
return
print("\nFound PyTorch models:")
for i, f in enumerate(pt_files, start=1):
print(f"{i}. {f}")
idx = int(input("Enter the number of the model you want to convert: ")) - 1
pt_path = os.path.join(folder_path, pt_files[idx])
model_name = os.path.splitext(pt_files[idx])[0]
onnx_path = os.path.join(folder_path, f"{model_name}.onnx")
tf_path = os.path.join(folder_path, "model_tf")
tfjs_path = os.path.join(folder_path, f"{model_name}WebModel")
print("\nConverting PyTorch -> ONNX using YOLOv5...")
convert_pt_to_onnx(pt_path, onnx_path)
print("\nConverting ONNX -> TensorFlow...")
convert_onnx_to_tf(onnx_path, tf_path)
print("\nConverting TensorFlow -> TensorFlow.js...")
convert_tf_to_tfjs(tf_path, tfjs_path)
if __name__ == '__main__':
main()
- Lenguaje dominante
- Jupyter Notebook
- Estrellas
- 4.4k
- Forks
- 1.1k
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de tensorflow/probability
-
KL divergence between two `TransformedDistribution`s with a shared non-injective bijector (`AbsoluteValue`) returns the base KLPosiblemente ocupada @Andreas-Hum la tomó hace 8 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
tensorflow/probability#2036 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
tensorflow/probability#2034 ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
tensorflow/probability#2021 ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 30/100
tensorflow/probability#2015 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 48/100
tensorflow/probability#2013 ·
Todos los issues de tensorflow/probability
Issues similares
-
[Bug]: DoubleMLRDDData accepts a score_col that is no data column (as in its docstring example); the running variable then becomes a covariate and RDFlex failsPosiblemente ocupada @vrjdev la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
DoubleML/doubleml-for-py#455 ·
Los mantenedores suelen responder en 1 día
-
Install page: spectarf's CUDA engine fails with PyTorch for CUDA 13.0 (nvvmError: ERROR_INVALID_IR)Posiblemente ocupada @lukepolson la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 79/100
PyTomography/PyTomography#435 ·
Los mantenedores suelen responder en 1 día
-
beginner friendly
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 82/100
aws-samples/sample-per-model-bedrock#821 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
instadeepai/InstaNovo-FM#50 ·