1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/xiaohaoo-medicine-identification

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

МБ|0.704|0.895|4,253,864|88

MobileNetV2|14 МБ|0.713|0.901|3,538,984|88

DenseNet121|33 МБ| 0.750|0.923|8,062,504|121

DenseNet169|57 МБ| 0.762|0.932|14,307,880|169

DenseNet201|80 МБ|0.773|0.936|20,242,984|201

NASNetMobile|23 МБ|0.744|0.919|5,326,716|-|

NASNetLarge|343 МБ|0.825|0.960|88,949,818|-|

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

Определение функции Xception:

def Xception(include_top=True,
      weights='imagenet',
      input_tensor=None,
      input_shape=None,
      pooling=None,
      classes=1000,
      **kwargs)
  • include_top: указывает, следует ли сохранять верхний слой полносвязной сети.
  • weights: определяет, будут ли использоваться предварительно обученные веса. Если None, веса инициализируются случайным образом. 'imagenet' означает использование предварительно обученных весов.
  • input_tensor: можно ввести Keras tensor в качестве входного тензора изображения для модели.
  • input_shape: необязательно, используется только при include_top = False. Должен быть кортеж длины 3, указывающий форму входного изображения. Ширина и высота изображения должны быть больше 71, например (150, 150, 3).
  • pooling: при include_top = False этот параметр определяет метод пулинга. None означает отсутствие пулинга, и последний слой свертки выводит 4D-тензор. 'avg' означает глобальный средний пулинг, а 'max' - глобальный максимальный пулинг.
  • classes: необязательно, количество классов изображений, используемых при классификации. Применяется только тогда, когда include_top = True и предварительно обученные веса не используются.

Построение кода

  1. Настройка параметров Xception:

Перенос обучения с использованием весов xception_weights:

# Установка ширины и высоты входного изображения, а также количества каналов
img_size = (299, 299, 3)

base_model = keras.applications.xception.Xception(include_top=False,
                                                      weights='..\\resources\\keras-model\\xception_weights_tf_dim_ordering_tf_kernels_notop.h5',
                                                      input_shape=img_size,
                                                      pooling='avg')

# Полносвязный слой с активацией softmax для вычисления вероятности и 628 классами
model = keras.layers.Dense(628, activation='softmax', name='predictions')(base_model.output)
model = keras.Model(base_model.input, model)

# Блокировка слоев свертки
for layer in base_model.layers:
    layer.trainable = False
  1. Обучение полносвязного слоя (v1.0):
from base_model import model

# Настройка размера изображения и параметров каталога для обучающего набора
img_size = (299, 299)
dataset_dir = '..\\dataset\\dataset'
img_save_to_dir = 'resources\\image-traing\\'
log_dir = 'resources\\train-log'

model_dir = 'resources\\keras-model\\'

# Использование методов увеличения данных
train_datagen = keras.preprocessing.image.ImageDataGenerator(
    rescale=1. / 255,
    shear_range=0.2,
    width_shift_range=0.4,
    height_shift_range=0.4,
    rotation_range=90,
    zoom_range=0.7,
    horizontal_flip=True,
    vertical_flip=True,
    preprocessing_function=keras.applications.xception.preprocess_input)

test_datagen = keras.preprocessing.image.ImageDataGenerator(
    preprocessing_function=keras.applications.xception.preprocess_input)

train_generator = train_datagen.flow_from_directory(
    dataset_dir,
    save_to_dir=img_save_to_dir,
    target_size=img_size,
    class_mode='categorical')

validation_generator = test_datagen.flow_from_directory(
    dataset_dir,
    save_to_dir=img_save_to_dir,
    target_size=img_size,
    class_mode='categorical')

# Метод ранней остановки и динамическая настройка скорости обучения
early_stop = EarlyStopping(monitor='val_loss', patience=13)
reduce_lr = ReduceLROnPlateau(monitor='val_loss', patience=7, mode='auto', factor=0.2)
tensorboard = keras.callbacks.tensorboard_v2.TensorBoard(log_dir=log_dir)

for layer in model.layers:
    layer.trainable = False

# Компиляция модели
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])

history = model.fit_generator(train_generator,
                             steps_per_epoch=train_generator.samples // train_generator.batch_size,
                             epochs=100,
                             validation_data=validation_generator,
                             validation_steps=validation_generator.samples // validation_generator.batch_size)

Обратите внимание, что перевод может содержать неточности или ошибки, так как некоторые термины и понятия могут иметь несколько значений или интерпретаций. **Callbacks**

callbacks=[early_stop, reduce_lr, tensorboard])
  # Модель экспорта
  model.save(model_dir + 'chinese_medicine_model_v1.0.h5')
  1. Для верхних 6 слоёв свёрточной нейронной сети мы используем набор данных для тонкой настройки параметров веса.
    
    

Загрузка модели

model=keras.models.load_model('resources\keras-model\chinese_medicine_model_v2.0.h5')

for layer in model.layers: layer.trainable = False for layer in model.layers[126:132]: layer.trainable = True

history = model.fit_generator(train_generator, steps_per_epoch=train_generator.samples // train_generator.batch_size, epochs=100, validation_data=validation_generator, validation_steps=validation_generator.samples // validation_generator.batch_size, callbacks=[early_stop, reduce_lr, tensorboard]) model.save(model_dir + 'chinese_medicine_model_v2.0.h5')


4. На сервере используется ONNX Runtime для вызова обученной модели.

**Обзор модели**

[Подробная структура модели](medicine-doc/assets/images/model.png)

**Визуализация точности обучения и функции потерь**

![Точность](medicine-doc/assets/images/正确率.png)
![Функция потерь](medicine-doc/assets/images/损失函数.png)

5. **Данные medicine-dataset**
- [Набор данных](medicine-dataset/dataset2): пиксели: 299*299
- [Таблица кодирования названий китайских лекарств](medicine-doc/assets/medicine_label.txt)

6. **Общий класс utility medicine**

- Описание [MongoDbUtil](medicine-util/src/main/java/cn/xiaohaoo/medicine/util/mongo/)

## Зависимости среды
|Зависимость|Версия|
|:---:|:---:|
|JDK|11+|
|Python|3.6|
|Gradle|6.5|
|TensorFlow|2.0|
|MongoDB|4.2.2|
|MySQL|8.0+|
|Spring Boot|2.2.2|
|Elasticsearch|7.4.2|
|IK токенизатор|7.4.2|
|ONNX Runtime|1.8.1|

## Использование открытого исходного кода
- **Разрешено для личного изучения;**
- **Открытая версия не подходит для коммерческого использования;**
- **Запрещается продавать код и ресурсы этого проекта в любой форме, ответственность за любые последствия несёт нарушитель;**
- **[LICENSE](LICENSE)**

## Общение, обратная связь и участие
- Если вы хотите следить за последними новостями проекта, пожалуйста, Watch или Star проект, это также лучшая поддержка для проекта.
- Приглашаем к участию в технических дискуссиях, вторичной разработке и консультациях по вопросам и предложениям!
- QQ: 993021993
- WeChat:
![WECHAT](medicine-doc/assets/WECHAT.png)

#### Разработка открытых проектов — непростая задача, спасибо всем друзьям за star! ^_^

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Система распознавания изображений китайских лекарственных средств (приложение + сервер). Развернуть Свернуть
MulanPSL-1.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/xiaohaoo-medicine-identification.git
git@api.gitlife.ru:oschina-mirror/xiaohaoo-medicine-identification.git
oschina-mirror
xiaohaoo-medicine-identification
xiaohaoo-medicine-identification
master