feat: Implement upscale functionality with ONNX models
- Added upscale operator to handle image upscaling by 4x using AI models. - Introduced new jobs for upscale processing in the server, including debug and standard upscale jobs. - Created a new ONNX model handler for upscale operations, supporting tiled inference and resource management. - Updated tests to cover new upscale functionality, including input validation and output verification. - Added documentation for the upscale feature, detailing usage and model options.
This commit is contained in:
@@ -20,24 +20,10 @@ class ModelTest(unittest.TestCase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
cls.models = load_module(
|
||||
"anyimage_models",
|
||||
"src/anyimage/model_catalog.py",
|
||||
)
|
||||
cls.server_models = load_module(
|
||||
"anyimage_server_models",
|
||||
"src/anyimage/server/model_catalog.py",
|
||||
)
|
||||
|
||||
def test_client_and_server_catalogs_share_storage_contract(self):
|
||||
client = self.models.DOWNLOADABLE_MODELS
|
||||
server = self.server_models.DOWNLOADABLE_MODELS
|
||||
|
||||
self.assertEqual(set(client), set(server))
|
||||
for key in client:
|
||||
with self.subTest(key=key):
|
||||
self.assertEqual(client[key].directory_name, server[key].directory_name)
|
||||
self.assertEqual(client[key].ready_patterns, server[key].ready_patterns)
|
||||
|
||||
def test_base_model_is_default_friendly_apache_model(self):
|
||||
model = self.models.get_model("BASE")
|
||||
|
||||
@@ -89,33 +75,26 @@ class ModelTest(unittest.TestCase):
|
||||
"BEN2-ONNX",
|
||||
)
|
||||
|
||||
def test_realesrgan_general_x4v3_uses_verified_onnx_artifact(self):
|
||||
model = self.models.get_downloadable_model(
|
||||
"REALESRGAN_GENERAL_X4V3"
|
||||
)
|
||||
|
||||
def test_upscale_models_use_verified_onnx_artifacts(self):
|
||||
expected = {
|
||||
"REALESRGAN_GENERAL_WDN_X4V3": ("realesr-general-wdn-x4v3.onnx", 4867419, "b021a837"),
|
||||
"SAFMN_REAL_X4": ("safmn-real-x4.onnx", 22657477, "8f13867b"),
|
||||
"REALESRGAN_X4PLUS": ("realesrgan-x4plus.onnx", 67051618, "4ed6a45a"),
|
||||
}
|
||||
self.assertEqual(set(self.models.UPSCALE_MODELS), set(expected))
|
||||
for key, (filename, size, checksum_prefix) in expected.items():
|
||||
with self.subTest(model=key):
|
||||
model = self.models.get_downloadable_model(key)
|
||||
self.assertEqual(model.download_patterns, (filename,))
|
||||
self.assertEqual(model.ready_patterns, (filename,))
|
||||
self.assertEqual(model.r2_files[0][:2], (filename, size))
|
||||
self.assertTrue(model.r2_files[0][2].startswith(checksum_prefix))
|
||||
self.assertEqual(self.models.model_record(model)["family"], "upscale")
|
||||
wdn = self.models.UPSCALE_MODELS["REALESRGAN_GENERAL_WDN_X4V3"]
|
||||
self.assertEqual(wdn.repository, "xinntao/Real-ESRGAN")
|
||||
self.assertEqual(wdn.huggingface_repository, "")
|
||||
self.assertEqual(
|
||||
model.repository,
|
||||
"jonathanst29/tinier-upscale-models",
|
||||
)
|
||||
self.assertEqual(model.license_name, "BSD 3-Clause")
|
||||
self.assertEqual(
|
||||
model.download_patterns,
|
||||
("realesr-general-x4v3.onnx",),
|
||||
)
|
||||
self.assertEqual(model.ready_patterns, model.download_patterns)
|
||||
self.assertEqual(model.r2_directory, "realesr-general-x4v3")
|
||||
self.assertEqual(
|
||||
model.r2_files,
|
||||
((
|
||||
"realesr-general-x4v3.onnx",
|
||||
4866396,
|
||||
"924ebad6532777303582d4ce7811849b88869231a3ae7093e0f21200249df8d5",
|
||||
),),
|
||||
)
|
||||
self.assertEqual(
|
||||
self.models.model_record(model)["family"],
|
||||
"upscale",
|
||||
self.models.UPSCALE_MODELS["SAFMN_REAL_X4"].huggingface_repository, ""
|
||||
)
|
||||
|
||||
def test_enabled_da3_models_use_onnx_and_r2_checksums(self):
|
||||
|
||||
Reference in New Issue
Block a user