Эта статья состоит из пяти частей:
- Что такое MobileNet?
- Архитектура MobileNet.
- Разделимая по глубине свертка.
- Разница между стандартной сверткой и разделимой по глубине сверткой.
- MobileNet с Python (С кодом).
Что такое MobileNet?
Судя по названию, модель MobileNet предназначена для использования в мобильных приложениях, и это первая модель мобильного компьютерного зрения TensorFlow.
MobileNet использует разделимые по глубине свертки. Это значительно уменьшает количество параметров по сравнению с сетью с обычными свертками с той же глубиной в сетях. В результате получаются легкие глубокие нейронные сети.
Разделимая по глубине свертка выполняется за две операции.
- Глубинная свертка.
- Точечная свертка.
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 параметр.
Разделимая по глубине свертка - это глубокая свертка, за которой следует точечная свертка, как показано ниже:
- Глубинная свертка - это поканальная пространственная свертка DK × DK. Предположим, на рисунке выше, и у нас есть пять каналов; тогда у нас будет 5 пространственных сверток DK × DK.
- Точечная свертка - это свертка 1 × 1 для изменения размера.
- Глубинная свертка.
Это карта единственной свертки на каждом входном канале отдельно. Следовательно, количество выходных каналов у него такое же, как и количество входных. Его вычислительная стоимость составляет
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, разработанных для эффективного повышения точности с учетом ограниченных ресурсов для встроенного или встроенного приложения на устройстве.
Мобильные сети - это небольшие модели с малой задержкой и низким энергопотреблением, параметризованные для соответствия ограничениям ресурсов в различных сценариях использования. Их можно использовать для классификации, обнаружения, встраивания и сегментации.
Если вы хотите продолжить и подогреть свое любопытство, здесь можно найти несколько предварительно обученных моделей:
Спасибо за чтение. Пожалуйста, дайте мне знать, если у вас есть какие-либо отзывы.
Другие мои сообщения об алгоритмах машинного обучения
Удачного обучения !!!
Удачного кодирования :)
И не забывайте хлопать, хлопать, хлопать ...