Art Genre Classifier
пять жанров живописи по одной картине
Модель от tahamukhtar20 на базе ResNet152 с весами ImageNet, дообученная классифицировать картины по пяти жанрам: abstract, cityscape, portrait, landscape и animal painting. В репозитории лежит ONNX-файл с динамической int8-квантизацией размером 58 MB — именно его использует демо.
1⃣ Ключевые особенности
- 2⃣ Пять классов: абстракция, городской пейзаж, портрет, пейзаж и анималистика.
- 3⃣ Компактный int8 ONNX на 58 MB для инференса через onnxruntime.
- 4⃣ Обучение на WikiArt: до 2000 картин на жанр, всего 9799 изображений.
- 5⃣ Сначала обучается новая голова, затем дообучаются последние 30 слоёв ResNet.
- 6⃣ Вход — изображение 300×300, выход — softmax по пяти жанрам.
▶ Пример
import numpy as np, onnxruntime as ort
from PIL import Image
CLASSES = ["abstract", "cityscape", "portrait", "landscape", "animal-painting"]
sess = ort.InferenceSession("art_genre_classifier.int8.onnx")
img = np.asarray(Image.open("painting.jpg").convert("RGB").resize((300, 300)), dtype=np.float32)
x = (img[..., ::-1] - np.array([103.939, 116.779, 123.68], dtype=np.float32))[None]
probs = sess.run(None, {sess.get_inputs()[0].name: np.ascontiguousarray(x)})[0][0]
print(dict(zip(CLASSES, probs.round(3))))
Подробнее
На 1470 тестовых картинах Keras-модель даёт 87,6%, int8 ONNX — 87,5%.Лучше всего портреты (95,7%), хуже всего городской пейзаж (78,7%): его часто путают с пейзажем.
Вход: float32 [batch, 300, 300, 3], RGB→BGR и вычитание средних ImageNet.
Обучение: WikiArt, стратифицированное деление 70/15/15, seed 42; последние 30 слоёв ResNet дообучаются при lr 1e-5, BatchNorm заморожен.








Комментарии