Машинное обучение — это модное слово, которое вы часто слышите в наши дни, особенно если вы погружаетесь в мир технологий. С другой стороны, обработка изображений, которая существует уже некоторое время, не всегда пользуется таким же вниманием. Но вот в чем дело: для меня и моей команды мы видим в них две стороны одной медали. Вместо того, чтобы противопоставлять их друг другу, мы объединяем их возможности, чтобы создать что-то инновационное.

Теперь поговорим о закусках. Филиппины имеют огромный рынок закусок стоимостью 451,11 миллиарда филиппинских песо, на котором правят крупные игроки. Это огромный мир вкусов: от любимых чипсов до сладостей, перед которыми невозможно устоять. Но есть один закулисный аспект, который имеет решающее значение: убедиться, что каждая закуска имеет первоклассное качество и безопасна для употребления. Объединив обработку изображений и машинное обучение, мы стремимся революционизировать этот процесс обеспечения качества, гарантируя, что ваши любимые закуски всегда будут идеальными, кусочек за укусом.

Раскрываем секреты качества закусочных смесей

Продукт ведущего производителя закусок, удачно названный «Popular Snack Mix», — это не просто обычное лакомство. Это авантюрная смесь трех различных фаворитов: чипсов бренда A, бренда B и бренда C, каждый из которых славится своей уникальной формой и текстурой. Но возникает животрепещущий вопрос: есть ли в каждой упаковке этой смеси установленная пропорция каждого снека? Именно здесь в дело вступает наша команда. Используя обработку изображений для различения форм и текстур и дополняя ее прогнозирующими способностями машинного обучения, мы стремимся выяснить, сохраняет ли каждая упаковка этого популярного микса однородное сочетание, гарантируя как качество, так и единый вкус для любителей закусок.

От закупок к пикселям

Наше глубокое погружение в «Популярную закусочную смесь» мы начали с систематической стратегии закупок. Случайный выбор был сделан из упаковок со вкусом А и со вкусом Б, что дало нам для анализа широкий спектр из десяти различных порций (по пять порций каждого вкуса). После получения каждая порция подвергалась тщательной фотосессии с контролируемыми настройками, чтобы обеспечить точность и четкость. Это было жизненно важно, поскольку эти изображения имели решающее значение для этапа обработки изображений. После первоначальной фотографии мы старательно отсортировали закуски по категориям и снова сделали их изображения. Этот дополнительный набор был призван улучшить нашу классификационную модель, предоставив ей возможность умело идентифицировать и подсчитывать каждый тип закусок в смеси.

Предположения и границы

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

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

Методология: пиксели в пропорции

По мере того, как мы пробираемся сквозь хрустящие глубины «популярного закусочного микса», становится очевидным, что необходим систематический и строгий подход. Наше стремление к обеспечению качества сводилось не только к подсчету цифр; это был стратегический балет изображений, алгоритмов и статистики. Давайте углубимся в нашу методологию:

1. Сбор данных:

Ранее мы коснулись того, как мы собирали данные — тщательную стратегию закупок, в которой были взяты образцы как «Вкуса А», так и «Вкуса Б». Затем мы преобразовали эти осязаемые закуски в цифровые форматы, используя тщательный процесс фотографирования. Этот шаг имел первостепенное значение: был создан надежный и разнообразный набор данных, воплощающий разновидность «Популярной смеси закусок».

2. Обработка изображений:

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

  • Преобразование в оттенки серого.Нашим первым шагом было удаление цветов и преобразование изображений в оттенки серого. Это упростило наши данные без потери важных деталей чипа.
  • Двоичное пороговое значение с использованием метода Оцу:Наши изображения в оттенках серого затем были преобразованы в двоичные, что облегчило различение чипов на их фоне. Метод Оцу сыграл решающую роль, автоматически выбрав оптимальный порог для этого преобразования.
  • Морфологические операции. Здесь мы стремились улучшить наши бинарные изображения. Эрозия использовалась для устранения шума, а расширение помогло подчеркнуть ключевые особенности чипа.
  • Маркировка областей и фильтрация по размеру. После уточнения пришло время пометить каждую отдельную область чипа на изображении. А с помощью фильтрации по размеру мы гарантировали, что наше внимание останется только на микросхемах, отодвигая на второй план все ненужные элементы.
def parse_chips(image_path, 
                adjust_otsu=0.96, 
                region_thresh=3000, 
                plot=True):
    """
    Parses and processes a given chip image to extract individual chips.
    
    Parameters:
    - image_path (str): Path to the image to be processed.
    - adjust_otsu (float): Otsu's threshold adjustment factor.
    - region_thresh (int): Minimum area of the chip region to consider.
    - plot (bool): Whether to plot the processed chips or not.

    Returns:
    - final_chips (list): List containing arrays of processed individual chips.
    """
    
    # Load the image
    image = imread(image_path)
    
    # Convert the image to grayscale
    gray_image = rgb2gray(image)
    
    # Apply thresholding using Otsu's method adjusted by factor
    binary_image = gray_image > threshold_otsu(gray_image) * adjust_otsu
    
    # Invert the binary image
    binary_image = np.invert(binary_image)
    
    # Define a square structural element
    selem = square(3)
    
    # Erode the binary image to remove noise
    eroded_image = erosion(binary_image, selem)
    
    # Dilate the eroded image to enhance chip features
    processed_image = dilation(eroded_image, selem)
    
    # Label each connected region in the image
    labeled_image = label(processed_image)
    
    # Extract regions representing chips based on area thresholds
    chips_regions = [region for region in regionprops(labeled_image) if region_thresh < region.area <= region_thresh*8]

    # Setting up the plotting grid based on number of chips detected
    dim = 6
    exes = dim if len(chips_regions) > dim else len(chips_regions)
    ways = len(chips_regions)//dim + (1 if len(chips_regions)%dim != 0 else 0)
    
    if plot:
        fig, ax = plt.subplots(ways, exes, figsize=(ways*5, exes*5))
    
    final_chips = []
    
    # Iterate over each detected chip region for further processing
    for i, region in enumerate(chips_regions):
        minr, minc, maxr, maxc = region.bbox
        chip_image = labeled_image[minr:maxr, minc:maxc]
        
        # Get unique values and their counts in the chip image
        unique_values, value_counts = np.unique(chip_image, return_counts=True)

        # Sort the unique values based on their counts in descending order
        sorted_indices = np.argsort(-value_counts)
        sorted_unique_values = unique_values[sorted_indices]

        # Create a binary image of the most frequent chip
        final_chip = chip_image == sorted_unique_values[0]
        
        # If any corner of the chip is white (True) and if the center is black (False), invert the chip
        if any([final_chip[0, 0], final_chip[0, -1], final_chip[-1, 0], final_chip[-1, -1]]):
            final_chip = np.invert(final_chip)
        
        # Plot the processed chip
        if plot:
            ax_loc = ax[i//dim, i%dim] if ways > 1 else ax[i]
            ax_loc.imshow(final_chip)
            ax_loc.axis('off')
            
        final_chips.append(final_chip)
        
    # Turn off any unused subplots
    if plot and len(final_chips) < exes * ways:
        for i in range(len(final_chips), exes * ways):
            ax_loc = ax[i//dim, i%dim] if ways > 1 else ax[i]
            ax_loc.axis('off')
    
    return final_chips

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

3. Моделирование. Этап 1:Модель классификации

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

4. Моделирование. Этап 2. Анализ пропорций.

Вооружившись нашей точно настроенной классификационной моделью, мы приступили к самой сути миссии: анализу пропорций. На этом этапе модель была применена к нескольким порциям «Популярных закусочных миксов», определяя долю присутствующих чипсов каждого типа. Но простая идентификация не была нашей конечной целью. Мы нырнули глубже, используя статистические методы для критической оценки наших выводов. Цель заключалась в том, чтобы выяснить, сохраняется ли постоянная консистенция смеси в упаковках «Popular Snack Mix» или смесь варьируется от упаковки к упаковке.

Классификация и BiteStats

Результаты: анализ этапа 1 — классификация чипов

На первом этапе нашего анализа мы хотели выяснить, какая модель машинного обучения лучше всего различает наши три чипа. После тестирования нескольких моделей классификатор повышения градиента стал звездой шоу. Это дало нам точность теста 78,1%, как показано в таблице 1. Когда мы сравнили его с критерием пропорционального шанса, который, по сути, представляет собой показатель в 45,3%, который показывает, добиваемся ли мы большего, чем просто случайное угадывание, наша модель ясно выделяться.

Чтобы глубже понять, как наша модель принимала решения, мы использовали значения SHAP. Эти значения очень полезны для понимания того, почему модель считает определенную функцию важной. В нашем случае функция «moments_hu-2» имела большое значение. Речь идет о симметрии объектов на изображении. Учитывая, что три наших чипа имеют разную форму, эта особенность стала ключевой. Еще одной выдающейся функцией была «major_axis_length», которая сообщает нам о размере чипа на изображении.

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

Результаты: этап 2 анализа — исследование пропорций

На втором этапе нашего анализа мы действительно углубились в мельчайшие детали статистики. Мы рассмотрели три типа тестов: критерий хи-квадрат на случай непредвиденных обстоятельств, одновыборочный Т-тест и однофакторный дисперсионный анализ. Эти тесты помогли нам ответить на некоторые важные вопросы о нашем наборе микросхем.

Прежде всего мы хотели узнать, были ли пропорции чипов одинаковыми в разных партиях. Для этого мы использовали тест на непредвиденные обстоятельства хи-квадрат, который в основном проверяет, связаны ли между собой две вещи (например, тип чипа и партия, из которой он получен). Мы начали с предположения, что пропорции одинаковы во всех партиях. Тест дал нам значение p 0,99, что означает, что нет убедительных доказательств того, что пропорции чипов меняются от партии к партии. Это хороший знак! Это показывает, что наш метод разделения одной упаковки смешанных закусок на порции довольно надежен.

Затем мы спросили: «Соответствует ли доля каждого типа чипов ожидаемой нами?». Для этого мы провели Т-тест для одной выборки. Он проверяет, отличается ли среднее значение нашей выборки (доли найденных нами фишек) от некоторого ожидаемого значения. Мы предположили, что каждый тип чипов должен составлять примерно 1/3 смеси.

Наш анализ показывает, что производственный процесс тесно соответствует установленным компанией стандартам распространения чипов. Хотя изначально мы предполагали равномерное распределение закусок (по 1/3 каждого типа), стоит отметить, что реальные стандарты компаний могут отличаться. Учитывая, что бренд C более крупный по размеру и массе, они могут быть намеренно реже в смеси, тогда как чипсы бренда A, будучи меньшими по размеру, могут намеренно доминировать, чтобы создать иллюзию изобилия. Точные пропорции остаются коммерческой тайной. Таким образом, к нашим выводам следует относиться с осторожностью. Тем не менее, это подчеркивает неоценимую роль обеспечения качества в оптимизации затрат и маркетинговых стратегий.

Наконец, с помощью нашего теста One-Way ANOVA мы увидели, что на смесь чипсов не влияет ни вкус, ни партия. Таким образом, если в упаковке больше чипсов бренда A и меньше чипсов бренда C, это не потому, что это вкус A или из определенной партии.

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

Выводы и рекомендации

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

Хотя есть области, которые мы можем улучшить:

  1. Больший размер выборки: будущие исследования могут расширить объем выборки и сделать более убедительные выводы.
  2. Репрезентативная выборка: обеспечение охвата всего спектра производства имеет важное значение для получения целостных результатов.
  3. Уточнение предположений. Наши предварительные предположения, особенно в отношении распределения чипов и ракурсов фото, заслуживают пересмотра.
  4. Альтернативные статистические методы. Диверсификация наших аналитических методов, возможно, с помощью таких методов, как многофакторный дисперсионный анализ, может дать более глубокое понимание.
  5. Планирование расширения: если будущие исследования подтвердят наши выводы, появится потенциал для реальных крупномасштабных приложений.

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