В сфере геолокации возможности искусственного интеллекта StreetClip являются многообещающим маяком. Опираясь на наше предыдущее исследование Геолокация и искусственный интеллект с помощью StreetClip, пришло время тщательно оценить его производительность на разнообразном массиве изображений.

Прежде чем углубиться в проверку модели, давайте еще раз вспомним, что такое StreetClip и чего он может достичь. Всего с помощью нескольких строк кода можно легко создать приложение, способное классифицировать изображения улиц и выставлять оценки для десяти наиболее вероятных стран. Чтобы испытать StreetClip в действии, посетите демо.

Например, при представлении изображения, полученного в результате задания геолокации, StreetClip последовательно определял правильную страну с высокой степенью достоверности.

Поэтому обеспечение оптимальной производительности при работе с разнообразными изображениями имеет первостепенное значение.

Проверка на 50 тысячах изображений Street View

Набор данных

Kaggle предлагает набор данных, содержащий 50 000 изображений из игры Geoguessr (ссылка). Этот набор данных идеально согласуется с обучением StreetClip изображениям улиц.

Распределение изображений по странам:

+--------------------+------+-------------+------+----------------------+-------+
| Albania            |   41 | Guam        |    8 | Palestine            |    46 |
| Andorra            |   13 | Guatemala   |   79 | Peru                 |   270 |
| Argentina          |  689 | Hungary     |  168 | Philippines          |   219 |
| Australia          | 1704 | Iceland     |   54 | Poland               |   863 |
| Austria            |  347 | India       |  160 | Portugal             |   242 |
| Bangladesh         |  106 | Indonesia   |  288 | Puerto Rico          |    46 |
| Belgium            |  219 | Ireland     |  290 | Romania              |   346 |
| Bermuda            |    3 | Israel      |  326 | Russia               |  1761 |
| Bhutan             |   20 | Italy       |  789 | Senegal              |    75 |
| Bolivia            |  116 | Japan       | 3840 | Serbia               |    62 |
| Botswana           |  144 | Jordan      |   85 | Singapore            |   707 |
| Brazil             | 2320 | Kenya       |  130 | Slovakia             |   108 |
| Bulgaria           |  217 | Kyrgyzstan  |   72 | Slovenia             |    66 |
| Cambodia           |  118 | Laos        |   61 | South Africa         |  1183 |
| Canada             | 1382 | Latvia      |  117 | South Korea          |   243 |
| Chile              |  326 | Lesotho     |   65 | Spain                |  1075 |
| China              |   13 | Lithuania   |  140 | Sri Lanka            |    85 |
| Colombia           |  251 | Luxembourg  |   25 | Sweden               |   726 |
| Croatia            |  129 | Madagascar  |   13 | Switzerland          |   173 |
| Czech Republic     |  257 | Malaysia    |  423 | Taiwan               |   547 |
| Denmark            |  198 | Malta       |   55 | Thailand             |   944 |
| Dominican Republic |   22 | Mexico      |  901 | Tunisia              |    87 |
| Ecuador            |   93 | Monaco      |    2 | Turkey               |   268 |
| Estonia            |   99 | Mongolia    |   83 | Uganda               |    55 |
| Finland            | 1049 | Montenegro  |   32 | Ukraine              |   114 |
| France             | 3573 | Netherlands |  579 | United Arab Emirates |    70 |
| Germany            |  698 | New Zealand |  557 | United Kingdom       |  2484 |
| Ghana              |  107 | Nigeria     |  123 | United States        | 12014 |
| Greece             |  248 | Norway      |  675 | Uruguay              |    57 |
| Greenland          |   11 | Pakistan    |   19 |                      |       |
+--------------------+------+-------------+------+----------------------+-------+


Изображения организованы в папки, каждая из которых посвящена определенной стране. Давайте теперь рассмотрим, как проверить модель на этом наборе данных и получить соответствующие показатели из этого процесса.

Метрики

Что касается показателей, я решил посчитать:

  • Точность: отношение правильно предсказанных изображений к общему количеству изображений.
  • Точность топ-3: отношение количества случаев, когда правильная страна была предсказана в тройке лучших стран, к общему количеству изображений.
  • Точность после фильтрации: учитываются прогнозы, в которых рейтинг ведущей страны превышает 50 %, 60 %, 70 % и 80 %. Этот шаг имеет решающее значение, поскольку он гарантирует, что прогнозы с высокой степенью достоверности будут более точными.

Выполнение

Прежде чем мы приступим к реализации кода для проверки модели, разумно создать виртуальную среду для правильного разделения пакетов.

virtualenv venv
source venv/bin/activate
pip install transformers torch Pillow 
#Packages needed to generate the sankey charts
pip install pysankey matplotlib pandas seaborn

Первый шаг включает импорт необходимых модулей, загрузку модели StreetClip и определение функции прогнозирования, которая возвращает 10 лучших классифицированных стран.

#Import relevant modules
from PIL import Image
import torch
from transformers import CLIPProcessor, CLIPModel
from tqdm import tqdm
import os

#Define the list of labels (92 countries)
list_countries = ['Albania', 'Andorra', 'Argentina', 'Australia', 'Austria', 'Bangladesh', 'Belgium', 'Bermuda', 'Bhutan', 'Bolivia', 'Botswana', 'Brazil', 'Bulgaria', 'Cambodia', 'Canada', 'Chile', 'China', 'Colombia', 'Croatia', 'Czech Republic', 'Denmark', 'Dominican Republic', 'Ecuador', 'Estonia', 'Finland', 'France', 'Germany', 'Ghana', 'Greece', 'Greenland', 'Guam', 'Guatemala', 'Hungary', 'Iceland', 'India', 'Indonesia', 'Ireland', 'Israel', 'Italy', 'Japan', 'Jordan', 'Kenya', 'Kyrgyzstan', 'Laos', 'Latvia', 'Lesotho', 'Lithuania', 'Luxembourg', 'Macedonia', 'Madagascar', 'Malaysia', 'Malta', 'Mexico', 'Monaco', 'Mongolia', 'Montenegro', 'Netherlands', 'New Zealand', 'Nigeria', 'Norway', 'Pakistan', 'Palestine', 'Peru', 'Philippines', 'Poland', 'Portugal', 'Puerto Rico', 'Romania', 'Russia', 'Rwanda', 'Senegal', 'Serbia', 'Singapore', 'Slovakia', 'Slovenia', 'South Africa', 'South Korea', 'Spain', 'Sri Lanka', 'Swaziland', 'Sweden', 'Switzerland', 'Taiwan', 'Thailand', 'Tunisia', 'Turkey', 'Uganda', 'Ukraine', 'United Arab Emirates', 'United Kingdom', 'United States', 'Uruguay']

#run model on GPU if available
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

#Load the model and the processor
model = CLIPModel.from_pretrained("geolocal/StreetCLIP")
model.to(device)
processor = CLIPProcessor.from_pretrained("geolocal/StreetCLIP")

#Define the prediction function that return the top-3 countries with their score
def prediction(inp):
    inputs = processor(text=list_countries, images=inp, return_tensors="pt", padding=True).to(device)
    with torch.no_grad():
        outputs = model(**inputs)
    logits_per_image = outputs.logits_per_image
    prediction = logits_per_image.softmax(dim=1)
    #return top-3 countries and their score
    top = torch.topk(prediction[0],3)
    indices = top[1].tolist()
    scores=top[0].tolist()
    return [indices,scores]

Файловая структура набора данных следующая: ./dataset/[имя страны]/[имя файла]. Мы пройдемся по изображениям, страна за страной, и вычислим назначенные показатели.

#Define metrics variable
metrics = ['accuracy', 'top3-accuracy', '+50%', '+60%', '+70%', '+80%']
stats = {metric: {'pos':0, 'total':0} for metric in metrics}
#Define a variable  to compute a sankey chart afterwards
confusion_mat = {'true': [], 'predicted': []}

#Read all the folder names. If country name is in list_countries, 
#retrieve all image filenames and process them
for ind, probe in enumerate(list_countries):

    image_paths = []
    for root, dirs, files in os.walk('./dataset/'+probe):
        for file in files:
            if file.endswith('jpg'):
                image_paths.append(  root  + '/'+ file)
    print(probe)
    for img in tqdm(image_paths):
        [indices,scores]=prediction(Image.open(img))
        top_countries = [list_countries[i] for i in indices]
        if scores[0]>=0.5:
            stats['+50%']['total']+=1
            if top_countries[0]==probe:
                stats['+50%']['pos']+=1
        if scores[0]>=0.6:
            stats['+60%']['total']+=1
            if top_countries[0]==probe:
                stats['+60%']['pos']+=1
        if scores[0]>=0.7:
            stats['+70%']['total']+=1
            if top_countries[0]==probe:
                stats['+70%']['pos']+=1
        if scores[0]>=0.8:
            stats['+80%']['total']+=1
            if top_countries[0]==probe:
                stats['+80%']['pos']+=1
        confusion_mat['true'].append(probe)
        confusion_mat['predicted'].append(top_countries[0] )
        if top_countries[0]==probe:
            stats['accuracy']['pos']+=1
        if probe in top_countries:
            stats['top3-accuracy']['pos']+=1
        stats['accuracy']['total']+=1
        stats['top3-accuracy']['total']+=1

В конечном итоге, вот код для создания диаграммы Сэнки с использованием данных, хранящихся в переменной беспорядка_mat. Как вы увидите ниже, нам пришлось разделить данные по странам, чтобы обеспечить правильную визуализацию диаграммы.

#Those modules will be used to plot a sankey chart
from pySankey.sankey import sankey
import seaborn as sns
import matplotlib.pyplot as plt

def generate_colors(num_colors):
    palette = sns.color_palette("Set3", num_colors)  # Using the "Set3" palette for diversity
    hex_colors = [sns.set_hls_values(color, l=.5) for color in palette]
    return ["#%02x%02x%02x" % (int(r * 255), int(g * 255), int(b * 255)) for r, g, b in hex_colors]

colors_dict = {country: color for country, color in zip(list_countries, generate_colors(len(list_countries)))}

sankey(confusion_mat['true'], confusion_mat['predicted'], aspect=20, colorDict=colors_dict, fontsize=12)
fig = plt.gcf()
fig.set_size_inches(20, 20)
fig.set_facecolor("w")
fig.savefig("sankey_chart.png", bbox_inches="tight", dpi=150)

Выполняя эти шаги, мы получим ценную информацию о производительности и точности StreetClip при геолокации изображений.

Результат проверки

Результаты проверки проливают свет на надежную работу StreetClip при геолокации изображений.

  • График показателей:

  • Количество изображений, используемых для каждого показателя

  • Диаграмма Санки для нескольких стран

Карты Франции, Испании и Италии.

Те же диаграммы с максимальным баллом более 80 %:

  • Точность и топ-3 точности по странам

Кроме того, мы провели индивидуальные расчеты точности и топ-3 расчетов точности для каждой страны, чтобы выявить потенциальные области недостаточной эффективности:

Анализ

  1. Точность и точность топ-3:

Общая точность составляет около 74%, что неплохо, но не идеально. Однако, когда мы смотрим на точность топ-3, она намного лучше. Более чем в 9 из 10 случаев правильный прогноз приходится на тройку лучших стран.

2. Фильтрация оценок для большей точности:

Когда мы рассматриваем только прогнозы с рейтингом выше 70%, точность возрастает до более чем 92%. Это означает, что мы получаем очень надежные результаты. Однако важно отметить, что около 40% изображений могут не иметь прогноза местоположения.

3. Диаграммы Санки и неправильные классификации:

Диаграммы Санки дают нам ценную информацию. Например, Францию ​​иногда путают с соседними странами, такими как Бельгия, Люксембург, Монако или Андорра. Аналогичные ситуации происходят с Испанией и Португалией или с Италией с Австрией и Словенией.

4. Точность по странам:

Анализ точности и топ-3 точности для каждой страны показывает, какие из них часто неправильно классифицируются. Некоторые страны с меньшим количеством изображений, такие как Монако, Андорра или Гренландия, достигают идеальной точности. С другой стороны, такие страны, как Литва, Латвия и Словакия, сталкиваются с проблемами. Например, Литву часто идентифицируют как Эстонию или Польшу, когда показатель достоверности превышает 80%.

Заключение

Когда дело доходит до геолокации, StreetClip зарекомендовал себя как мощный инструмент, демонстрирующий потенциал искусственного интеллекта в точной классификации изображений. Благодаря тщательной оценке мы стали свидетелями его надежности в определении правильных стран, особенно когда приоритет отдается прогнозам с высокой степенью достоверности.

Процесс проверки, проведенный на наборе данных из 50 000 изображений Geoguessr, предоставил ценную информацию о производительности StreetClip. Хотя общая точность около 74% заслуживает похвалы, точность топ-3, превышающая 91%, красноречиво говорит об эффективности модели. Фильтрация прогнозов с оценками выше определенных пороговых значений еще больше повышает точность, хотя и с компромиссом в охвате прогнозов.

Стоит отметить, что точная настройка модели на основе этих данных потенциально может дать еще лучшие результаты.

Если эта статья была информативной, пожалуйста, поддержите эту историю, похлопав в ладоши или оставив комментарий ниже.

#Геолокация #AI #AIModelBenchmark

PS: последнее испытание на дорогу. Сможете ли вы узнать, в какой стране был сделан этот снимок?