Repository: twosixlabs/armory
Issue: [BUG]: np.object is deprecated

### Description of the bug

If numpy is numpy-1.24.3, or presumably higher, Armory errors out by calling np.object

```
File "/home/sterling.suggs/git/twosixlabs/armory/armory/data/datasets.py", line 701, in canonical_variable_image_preprocess
    if batch.dtype == np.object:
       │     │        └ <module 'numpy' from '/home/anaconda/anaconda/conda_envs/sterling.suggs/dw/lib/python3.11/site-packages/numpy/__init__.py'>
       │     └ <attribute 'dtype' of 'numpy.ndarray' objects>
       └ array([[[[ 23,  26,  35],
                  [ 24,  28,  37],
                  [ 31,  40,  47],
                  ...,
                  [ 99,  81,  59],
                ...

  File "/home/anaconda/anaconda/conda_envs/sterling.suggs/dw/lib/python3.11/site-packages/numpy/__init__.py", line 305, in __getattr__
    raise AttributeError(__former_attrs__[attr])
                         │                └ 'object'
                         └ {'object': "module 'numpy' has no attribute 'object'.\\n`np.object` was a deprecated alias for the builtin `object`. To avoid ...

AttributeError: module 'numpy' has no attribute 'object'.
`np.object` was a deprecated alias for the builtin `object`. To avoid this error in existing code, use `object` by itself. Doing this will not modify any behavior and is safe. 
The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:
    https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
```

Looks like we use this in two other places: [sweep.py](https://github.com/twosixlabs/armory/blob/3efd21652cfdc8cd192681e9daf58a4b08e82db4/armory/art_experimental/attacks/sweep.py#L145), and [datasets.py L708](https://github.com/twosixlabs/armory/blob/3efd21652cfdc8cd192681e9daf58a4b08e82db4/armory/data/datasets.py#L708C64-L708C64) (besides [datasets.py L701](https://github.com/twosixlabs/armory/blob/3efd21652cfdc8cd192681e9daf58a4b08e82db4/armory/data/datasets.py#L701) as shown above) 

### Steps To Reproduce

Run a config with --interactive and update numpy in the container

### Additional Information

_No response_

Changed files:
armory/art_experimental/attacks/sweep.py, armory/data/datasets.py

diff --git a/armory/art_experimental/attacks/sweep.py b/armory/art_experimental/attacks/sweep.py
index 0db31d89..85a6e27a 100644
--- a/armory/art_experimental/attacks/sweep.py
+++ b/armory/art_experimental/attacks/sweep.py
@@ -142,7 +142,7 @@ class SweepAttack(EvasionAttack):
             return metric_result > self.metric_threshold
 
     def _get_metric_result(self, y, y_pred):
-        if isinstance(y, np.ndarray) and y.dtype == np.object:
+        if isinstance(y, np.ndarray) and y.dtype == object:
             # convert np object array to list of dicts
             metric_result = self.metric_fn([y[0]], y_pred)
         else:
diff --git a/armory/data/datasets.py b/armory/data/datasets.py
index c5000fec..20d3718b 100644
--- a/armory/data/datasets.py
+++ b/armory/data/datasets.py
@@ -698,14 +698,14 @@ def canonical_variable_image_preprocess(context, batch):
     """
     Preprocessing when images are of variable size
     """
-    if batch.dtype == np.object:
+    if batch.dtype == object:
         for x in batch:
             check_shapes(x.shape, context.x_shape)
             assert x.dtype == context.input_type
             assert x.min() >= context.input_min
             assert x.max() <= context.input_max
 
-        quantized_batch = np.zeros_like(batch, dtype=np.object)
+        quantized_batch = np.zeros_like(batch, dtype=object)
         for i in range(len(batch)):
             quantized_batch[i] = (
                 batch[i].astype(context.output_type) / context.quantization