Skip to content

Restrict DLC dependencies for v1 pipeline (<3.0) #1604

Description

@rpswenson

Describe the bug
Something fails to import when inserting a new project to the DLCProject table. I recently made a new spyglass dlc environment from environment_dlc.yml since my old environment had the wrong version of python so maybe that's related?

Error Stack
ImportError                               Traceback (most recent call last)
Cell In[4], line 7
      4 frames_per_video = 20
      5 bodyparts = ["redLED_C", "greenLED", "tailBase", "tailTip", "nose", "earL", "earR", "hindJointL", "hindJointR", "spine1", "spine2", "hindlimbL", "hindlimbR", "forelimbL",
      6             "forelimbR"]
----> 7 project_key = sgp.DLCProject.insert_new_project(
      8     project_name=project_name,
      9     bodyparts=bodyparts,
     10     lab_team=team_name,
     11     frames_per_video=frames_per_video,
     12     video_list=video_list,
     13     skip_duplicates=True,
     14 )

File [~/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/spyglass/position/v1/position_dlc_project.py:259](http://localhost:6504/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/spyglass/position/v1/position_dlc_project.py#line=258), in DLCProject.insert_new_project(cls, project_name, bodyparts, lab_team, frames_per_video, video_list, groupname, project_directory, output_path, **kwargs)
    221 @classmethod
    222 def insert_new_project(
    223     cls,
   (...)
    232     **kwargs,
    233 ):
    234     """Insert a new project into DLCProject table.
    235 
    236     Parameters
   (...)
    257         (Default is '[/nimbus/deeplabcut/videos/](http://localhost:6504/nimbus/deeplabcut/videos/)')
    258     """
--> 259     from deeplabcut import create_new_project
    261     project_name = sanitize_unix_name(project_name)
    263     if (existing := cls()._existing_project(project_name)) is not None:

File [~/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/deeplabcut/__init__.py:52](http://localhost:6504/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/deeplabcut/__init__.py#line=51)
     34 from .compat import (
     35     analyze_images,
     36     analyze_time_lapse_frames,
   (...)
     49     visualize_scoremaps,
     50 )
     51 from .core.engine import Engine
---> 52 from .create_project import (
     53     add_new_videos,
     54     create_new_project,
     55     create_new_project_3d,
     56     create_pretrained_human_project,
     57     create_pretrained_project,
     58     load_demo_data,
     59 )
     60 from .generate_training_dataset import (
     61     adddatasetstovideolistandviceversa,
     62     check_labels,
   (...)
     73     mergeandsplit,
     74 )
     75 from .modelzoo.video_inference import video_inference_superanimal

File [~/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/deeplabcut/create_project/__init__.py:13](http://localhost:6504/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/deeplabcut/create_project/__init__.py#line=12)
     11 from deeplabcut.create_project.add import add_new_videos
     12 from deeplabcut.create_project.demo_data import load_demo_data
---> 13 from deeplabcut.create_project.modelzoo import (
     14     create_pretrained_human_project,
     15     create_pretrained_project,
     16 )
     17 from deeplabcut.create_project.new import create_new_project
     18 from deeplabcut.create_project.new_3d import create_new_project_3d

File [~/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/deeplabcut/create_project/modelzoo.py:37](http://localhost:6504/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/deeplabcut/create_project/modelzoo.py#line=36)
     33 from deeplabcut.generate_training_dataset.trainingsetmanipulation import (
     34     MakeInference_yaml,
     35 )
     36 from deeplabcut.modelzoo.utils import get_super_animal_project_cfg
---> 37 from deeplabcut.pose_estimation_pytorch.config.make_pose_config import (
     38     add_metadata,
     39     make_pytorch_test_config,
     40 )
     41 from deeplabcut.pose_estimation_pytorch.modelzoo.utils import load_super_animal_config
     42 from deeplabcut.utils import auxiliaryfunctions

File [~/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/deeplabcut/pose_estimation_pytorch/__init__.py:11](http://localhost:6504/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/deeplabcut/pose_estimation_pytorch/__init__.py#line=10)
      1 #
      2 # DeepLabCut Toolbox (deeplabcut.org)
      3 # © A. & M.W. Mathis Labs
   (...)
      9 # Licensed under GNU Lesser General Public License v3.0
     10 #
---> 11 import deeplabcut.pose_estimation_pytorch.config as config
     12 from deeplabcut.pose_estimation_pytorch.apis import (
     13     VideoIterator,
     14     analyze_image_folder,
   (...)
     32     visualize_predictions,
     33 )
     34 from deeplabcut.pose_estimation_pytorch.config import (
     35     available_detectors,
     36     available_models,
     37     is_model_cond_top_down,
     38     is_model_top_down,
     39 )

File [~/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/deeplabcut/pose_estimation_pytorch/config/__init__.py:17](http://localhost:6504/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/deeplabcut/pose_estimation_pytorch/config/__init__.py#line=16)
      1 #
      2 # DeepLabCut Toolbox (deeplabcut.org)
      3 # © A. & M.W. Mathis Labs
   (...)
     10 #
     11 # For backwards compatibility
     12 from deeplabcut.core.config import (
     13     pretty_print,
     14     read_config_as_dict,
     15     write_config,
     16 )
---> 17 from deeplabcut.pose_estimation_pytorch.config.make_pose_config import (
     18     make_basic_project_config,
     19     make_pytorch_pose_config,
     20     make_pytorch_test_config,
     21 )
     22 from deeplabcut.pose_estimation_pytorch.config.utils import (
     23     available_detectors,
     24     available_models,
   (...)
     28     update_config_by_dotpath,
     29 )

File [~/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/deeplabcut/pose_estimation_pytorch/config/make_pose_config.py:27](http://localhost:6504/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/deeplabcut/pose_estimation_pytorch/config/make_pose_config.py#line=26)
     19 from deeplabcut.core.weight_init import WeightInitialization
     20 from deeplabcut.pose_estimation_pytorch.config.utils import (
     21     get_config_folder_path,
     22     load_backbones,
   (...)
     25     update_config,
     26 )
---> 27 from deeplabcut.pose_estimation_pytorch.runners.inference import InferenceConfig
     28 from deeplabcut.pose_estimation_pytorch.task import Task
     29 from deeplabcut.utils import auxfun_multianimal, auxiliaryfunctions

File [~/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/deeplabcut/pose_estimation_pytorch/runners/__init__.py:20](http://localhost:6504/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/deeplabcut/pose_estimation_pytorch/runners/__init__.py#line=19)
     12 from deeplabcut.pose_estimation_pytorch.runners.base import (
     13     Runner,
     14     attempt_snapshot_load,
   (...)
     17     set_load_weights_only,
     18 )
     19 from deeplabcut.pose_estimation_pytorch.runners.ctd import CTDTrackingConfig
---> 20 from deeplabcut.pose_estimation_pytorch.runners.dynamic_cropping import (
     21     DynamicCropper,
     22     TopDownDynamicCropper,
     23 )
     24 from deeplabcut.pose_estimation_pytorch.runners.inference import (
     25     DetectorInferenceRunner,
     26     InferenceRunner,
     27     PoseInferenceRunner,
     28     build_inference_runner,
     29 )
     30 from deeplabcut.pose_estimation_pytorch.runners.logger import LOGGER

File [~/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/deeplabcut/pose_estimation_pytorch/runners/dynamic_cropping.py:18](http://localhost:6504/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/deeplabcut/pose_estimation_pytorch/runners/dynamic_cropping.py#line=17)
     15 from typing import Optional
     17 import torch
---> 18 import torchvision.transforms.functional as F
     21 @dataclass
     22 class DynamicCropper:
     23     """If the state is true, then dynamic cropping will be performed. That means that if
     24     an object is detected (i.e. any body part > detection threshold), then object
     25     boundaries are computed according to the smallest[/largest](http://localhost:6504/largest) x position and
   (...)
     56         >>>
     57     """

File [~/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/torchvision/__init__.py:7](http://localhost:6504/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/torchvision/__init__.py#line=6)
      5 from torchvision import datasets
      6 from torchvision import io
----> 7 from torchvision import models
      8 from torchvision import ops
      9 from torchvision import transforms

File [~/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/torchvision/models/__init__.py:12](http://localhost:6504/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/torchvision/models/__init__.py#line=11)
     10 from .mnasnet import *
     11 from .shufflenetv2 import *
---> 12 from .efficientnet import *
     13 from .regnet import *
     14 from .vision_transformer import *

File [~/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/torchvision/models/efficientnet.py:8](http://localhost:6504/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/torchvision/models/efficientnet.py#line=7)
      6 import torch
      7 from torch import nn, Tensor
----> 8 from torchvision.ops import StochasticDepth
     10 from .._internally_replaced_utils import load_state_dict_from_url
     11 from ..ops.misc import ConvNormActivation, SqueezeExcitation

File [~/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/torchvision/ops/__init__.py:25](http://localhost:6504/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/torchvision/ops/__init__.py#line=24)
     22 from .roi_pool import roi_pool, RoIPool
     23 from .stochastic_depth import stochastic_depth, StochasticDepth
---> 25 _register_custom_op()
     28 __all__ = [
     29     "masks_to_boxes",
     30     "deform_conv2d",
   (...)
     55     "generalized_box_iou_loss",
     56 ]

File [~/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/torchvision/ops/_register_onnx_ops.py:12](http://localhost:6504/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/torchvision/ops/_register_onnx_ops.py#line=11), in _register_custom_op()
     10 from torch.onnx.symbolic_helper import parse_args
     11 from torch.onnx.symbolic_opset11 import select, squeeze, unsqueeze
---> 12 from torch.onnx.symbolic_opset9 import _cast_Long
     14 @parse_args("v", "v", "f")
     15 def symbolic_multi_label_nms(g, boxes, scores, iou_threshold):
     16     boxes = unsqueeze(g, boxes, 0)

ImportError: cannot import name '_cast_Long' from 'torch.onnx.symbolic_opset9' ([/home/rswenson/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/torch/onnx/symbolic_opset9.py](http://localhost:6504/miniforge3/envs/spyglass-dlc/lib/python3.10/site-packages/torch/onnx/symbolic_opset9.py))

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions