Эта статья состоит из пяти частей:

  1. Что такое MobileNet?
  2. Архитектура MobileNet.
  3. Разделимая по глубине свертка.
  4. Разница между стандартной сверткой и разделимой по глубине сверткой.
  5. MobileNet с Python (С кодом).

Что такое MobileNet?

Судя по названию, модель MobileNet предназначена для использования в мобильных приложениях, и это первая модель мобильного компьютерного зрения TensorFlow.

MobileNet использует разделимые по глубине свертки. Это значительно уменьшает количество параметров по сравнению с сетью с обычными свертками с той же глубиной в сетях. В результате получаются легкие глубокие нейронные сети.

Разделимая по глубине свертка выполняется за две операции.

  1. Глубинная свертка.
  2. Точечная свертка.

MobileNet - это класс CNN, исходный код которого был открыт Google, и поэтому это дает нам отличную отправную точку для обучения наших безумно маленьких и безумно быстрых классификаторов.

Скорость и энергопотребление сети пропорциональны количеству MAC (умножение-накопление), которое является мерой количества объединенных операций умножения и сложения.

Архитектура MobileNet

Свертка с разделением по глубине

Эта свертка возникла из идеи, что глубина фильтра и пространственное измерение могут быть разделены - таким образом, название можно разделить. Давайте возьмем в качестве примера фильтр Собела, используемый при обработке изображений для обнаружения краев.

Вы можете разделить размеры этих фильтров по высоте и ширине. Фильтр Gx можно рассматривать как матричное произведение [1 2 1] транспонирования с [-1 0 1].

Мы замечаем, что фильтр замаскировался. Он показывает, что у него девять параметров, но 6. Это стало возможным из-за разделения его размеров по высоте и ширине.

Та же идея, примененная для отделения измерения глубины от горизонтального (ширина * высота), дает нам разделимую по глубине свертку, если мы выполняем свертку по глубине. После этого мы используем фильтр 1 * 1, чтобы перекрыть измерение глубины.

Следует отметить, насколько параметры уменьшаются этой сверткой для вывода того же числа. каналов. Чтобы создать один канал, нам нужно 3 * 3 * 3 параметра для выполнения глубинной свертки и 1 * 3 параметра для выполнения дальнейшей глубинной свертки.

Но если нам нужно три выходных канала, нам понадобится только фильтр глубины 31 * 3, что даст нам в общей сложности 36 (= 27 +9) параметров, в то время как для того же нет. каналов вывода в регулярной свертке, нам нужно 33 * 3 * 3 фильтра, что дает нам в общей сложности 81 параметр.

Разделимая по глубине свертка - это глубокая свертка, за которой следует точечная свертка, как показано ниже:

  1. Глубинная свертка - это поканальная пространственная свертка DK × DK. Предположим, на рисунке выше, и у нас есть пять каналов; тогда у нас будет 5 пространственных сверток DK × DK.
  2. Точечная свертка - это свертка 1 × 1 для изменения размера.
  3. Глубинная свертка.

Это карта единственной свертки на каждом входном канале отдельно. Следовательно, количество выходных каналов у него такое же, как и количество входных. Его вычислительная стоимость составляет

Df² * M * Dk².

2. точечная свертка.

Свертка с размером ядра 1x1, которая просто объединяет функции, созданные глубинной сверткой. Его вычислительная стоимость составляет

M * N * Df².

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

Основное различие между архитектурой MobileNet и традиционной CNN вместо одного сверточного слоя 3x3, за которым следует пакетная норма и ReLU. Mobile Nets разделяет свертку на свертку 3x3 по глубине и точечную свертку 1x1, как показано на рисунке.

MobileNet с Python



mobile = keras.applications.mobilenet.MobileNet ()

Изображение (filename = ’click.jpg’, width = 250, height = 300)

preprocessed_image = prepare_image (‘click.jpg’) predictions = mobile.predict (preprocessed_image) results = imagenet_utils.decode_predictions (predictions) results

выход:

Заключение

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

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

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



Спасибо за чтение. Пожалуйста, дайте мне знать, если у вас есть какие-либо отзывы.

Другие мои сообщения об алгоритмах машинного обучения









Удачного обучения !!!

Удачного кодирования :)

И не забывайте хлопать, хлопать, хлопать ...