Maison > Périphériques technologiques > IA > le corps du texte

Robot de diagnostic gastro-intestinal Inchworm piloté par une bobine SMA

WBOY
Libérer: 2023-04-11 17:31:03
avant
1187 Les gens l'ont consulté

Robot de diagnostic gastro-intestinal Inchworm piloté par une bobine SMA

​Pour en savoir plus sur l'open source, veuillez visiter :​

​Communauté logicielle de base Open Source 51CTO​

​https://ost.51cto.com​

Résumé du projet

Dans mon pays, l'incidence des maladies gastro-intestinales est élevée, et il y a un dicton selon lequel « neuf personnes sur dix ont des problèmes d'estomac ». Par rapport à d'autres types de cancer, le traitement précis du cancer gastrique et du cancer colorectal en Chine est à la traîne, ce qui est indissociable de la précision des méthodes de détection. En outre, les méthodes de diagnostic courantes comportent également des risques associés : la tomodensitométrie présente de forts risques de rayonnement pour le corps du patient ; l'échographie B est peu précise dans le diagnostic des maladies gastriques ; la gastroscopie peut causer certains dommages aux patients, et il existe des risques tels que des lésions des muqueuses et des saignements. , perforation gastro-intestinale et lésions des cordes vocales. Le taux actuel de dépistage précoce du cancer en Chine est faible et il existe une énorme marge pour augmenter le taux de pénétration du diagnostic endoscopique. Affectés par le niveau de la science et de la technologie, la promotion et la vulgarisation de la technologie chirurgicale mini-invasive dans le monde ces dernières années ont favorisé le développement de dispositifs médicaux mini-invasifs. Les endoscopes sont les plus représentatifs des dispositifs médicaux mini-invasifs, et les endoscopes insérables peuvent également. être utilisé. Mettre en œuvre les fonctions de biopsie et de traitement. Cependant, les endoscopes insérables présentent également certains inconvénients dans les opérations médicales. L'opération provoque non seulement des douleurs chez le patient, mais entraîne également de nombreuses complications. Il existe également certains angles morts de détection dans le champ de vision de la lentille. Par conséquent, les robots microbioniques constituent une option efficace et pratique pour le diagnostic et l’examen mini-invasifs des maladies intestinales et sont devenus le dernier point chaud de la recherche dans le domaine de la technologie endoscopique.

Notre solution consiste à utiliser la méthode du mouvement en spirale du sperme pour injecter le micro-robot dans l'anus du patient et à contrôler à distance le micro-entraînement du robot pour le déplacer dans l'intestin afin d'obtenir un diagnostic à point fixe. Pendant le mouvement, la bobine SMA est utilisée comme unité d'entraînement pour contrôler le microrobot pour qu'il avance et recule, obtenant ainsi une démarche continue en imitant le mécanisme de mouvement du muscle inchworm. En termes de contrôle, une servocommande avec des signaux de rétroaction appropriés est utilisée pour ajuster le courant entrant en fonction des données complètes surveillées de courant et de température. La température de la bobine SMA est ajustée en temps opportun et la résistance change lorsque le temps intermittent actuel. qui se produit est enregistré. Le système de transmission d'énergie sans fil comprend un émetteur dans la zone abdominale du corps humain qui peut exciter un champ magnétique alternatif et un récepteur intégré à l'intérieur du microrobot, qui induit le champ magnétique alternatif et fournit une tension de fonctionnement CC au robot. Les lumières de détection miniatures sont conçues aux deux extrémités pour éclairer l’état des intestins. En même temps, elles sont équipées de caméras miniatures contrôlées sans fil pour capturer des images en temps réel des intestins. La technologie de segmentation d’images est utilisée pour segmenter les images des polypes intestinaux. , et les données sont transmises à la plateforme de déploiement pour une prédiction à l'aide de modèles d'apprentissage profond. Le serveur du programme effectue une segmentation d'image après un prétraitement des données, interagit avec les données et le modèle d'apprentissage profond, et obtient des résultats de prédiction pour un diagnostic par des médecins professionnels.

Mots clés : apprentissage profond, détection intestinale, bobine SMA, identification des lésions

1. Contexte du projet

1. Aperçu du contexte

Les maladies gastro-intestinales font référence aux maladies gastro-intestinales inflammatoires générales (gastrite aiguë et chronique, appendicite aiguë et chronique, etc. ), l'ulcère gastroduodénal, le cancer gastrique, le cancer de l'œsophage, le cancer colorectal et le syndrome du côlon irritable, etc.

L'incidence des maladies gastro-intestinales augmente d'année en année. Selon les statistiques de l'OMS, l'incidence des maladies gastriques atteint 80 %. Le « Chinese Medical Journal » (version anglaise du Chinese Medical Journal) a souligné que les cinq principaux types de cancer diagnostiqués en Chine en 2022 seront le cancer du poumon, le cancer colorectal, le cancer gastrique, le cancer du foie et le cancer du sein, le cancer colorectal arrivant en deuxième position. , il y a eu 590 000 nouveaux cas. Le rapport souligne également que le cancer colorectal se classe au cinquième rang des causes de décès par cancer en Chine.

La Chine a une large population atteinte de maladies gastro-intestinales, et le marché du cancer gastrique et du cancer colorectal est vaste, et le marché chinois des maladies gastro-intestinales continuera de croître à l'avenir. Par rapport à d'autres types de cancer, le traitement précis du cancer gastrique et du cancer colorectal en Chine est à la traîne, ce qui est indissociable de la précision des méthodes de détection.

Le stade du cancer de l'intestin dépend de la taille des lésions du patient, de l'étendue de l'invasion et de la présence de métastases ganglionnaires et de métastases à distance. De manière générale, les lésions à moins de 2 cm sont à un stade précoce, les lésions entre 2 cm et 5 cm. sont à mi-stade et les lésions de plus de 5 cm constituent un stade avancé. Le cancer du côlon présente un risque de récidive et de métastases après la chirurgie. De manière générale, 4 à 6 cycles de chimiothérapie sont nécessaires après la chirurgie. Le plan de chimiothérapie doit être formulé en fonction de la pathologie postopératoire et de l'immunohistochimie du patient.

La stadification clinique du cancer gastrique est généralement réalisée en utilisant les normes internationales de stadification TNM. Selon cette norme, le cancer gastrique est généralement divisé en quatre stades : stade I, stade II, stade III et stade IV. Chaque stade peut être divisé en deux sous-stades, A et B, en fonction de la taille et de l'infiltration du cancer. lésion. Si la tumeur envahit la lamina propria ou la sous-muqueuse, il n'y aura pas de métastases ganglionnaires ni de métastases d'organes à distance. Il appartient à la phase A. Si elle s'accompagne de 1 à 6 métastases ganglionnaires régionales, elle appartient au stade IB. Si la tumeur envahit la lamina propria de la muqueuse ou la sous-séreuse, elle appartient également à la catégorie du stade IB et de la séreuse, mais n'envahit pas. organes adjacents, il s’agit d’une tumeur de stade III. Lorsqu’elle s’accompagne de métastases à distance, il s’agit d’un cancer gastrique de stade IV.

La plupart des patients ne prêtent pas suffisamment attention à l'inconfort gastro-intestinal et aux symptômes associés. Ils pensent que la prise de certains médicaments atténuera les symptômes. Ils reportent souvent les examens gastro-intestinaux et doivent attendre que la maladie réapparaisse ou que des complications surviennent. ils doivent subir des examens gastro-intestinaux. La plupart des patients Le cancer de l'intestin et le cancer gastrique sont déjà à un stade intermédiaire ou avancé lorsqu'ils sont découverts. Pour l'examen gastro-intestinal, la tomodensitométrie, l'échographie B, la coloscopie et la gastroscopie sont généralement utilisées. Cependant, ces méthodes d'examen courantes comportent certains risques : la tomodensitométrie présente de forts risques de rayonnement pour le corps du patient ; la gastroentéroscopie causera certains dommages, et il existe des risques tels que des lésions et des saignements des muqueuses, une perforation gastro-intestinale, des lésions des cordes vocales, etc. Par conséquent, un dispositif de détection de haute précision et sans risque constitue la meilleure solution pour détecter les maladies gastro-intestinales.

2. Demande du marché

Selon les statistiques de l'Organisation mondiale de la santé en 2020, il y a 500 millions de patients atteints de maladies gastriques dans le monde, dont 120 millions en Chine. 80 %, et il croît à un taux annuel de 17,43 % , on estime que le nombre de patients atteints de maladies gastriques en Chine atteindra 160 millions en 2022. Le taux d'incidence du cancer gastrique dans mon pays se classe actuellement au deuxième rang parmi toutes les tumeurs malignes, et le taux de mortalité au troisième rang. En 2022, le nombre de nouveaux cas de cancer gastrique atteindra 480 000 et le nombre de nouveaux décès dus au cancer gastrique atteindra 370 000. Ces dernières années, les maladies gastriques ont montré une tendance à rajeunir et à rajeunir. le nombre de patients atteints de maladies gastriques âgés de 19 à 35 ans a doublé par rapport à 30 ans.

L'incidence du cancer de l'intestin vient juste derrière le cancer de l'estomac et de l'œsophage. Le taux d'incidence du cancer colorectal a considérablement augmenté au cours des 30 dernières années, devenant la quatrième cause de décès par tumeurs malignes, et la proportion de cancers rectaux moyens et faibles atteint plus de 50 %. À l'heure actuelle, le nombre total de patients atteints d'entérostomie dans mon pays en raison de tumeurs ou de traumatismes du côlon et du rectum, de colite ulcéreuse, de maladie de Crohn et d'autres raisons a dépassé le million, et le nombre de cas continue d'augmenter au rythme de 100 000 par an. .

Dans un contexte national de vieillissement accéléré de la population, de patients plus jeunes et de prévalence croissante des maladies chroniques d'année en année, mon pays compte un grand nombre de personnes ayant besoin de soins médicaux de réadaptation, un marché énorme et un potentiel de marché de réadaptation futur illimité. De 2014 à 2020, la taille du marché chinois des médicaments gastro-intestinaux en vente libre a montré une tendance à la hausse d'année en année. Parmi eux, la taille du marché chinois des médicaments gastro-intestinaux a atteint 22,522 milliards de yuans en 2019, soit une augmentation de 6,3 % sur un an. En 2020, la taille du marché chinois des médicaments gastro-intestinaux sera d'environ 23,99 milliards de yuans, soit une augmentation de 6,5 % sur un an. On estime que la taille du marché chinois des médicaments gastro-intestinaux atteindra 27,21 milliards de yuans en 2022. En termes de soutien politique, en mars 2016, la Commission nationale de la santé et de la planification familiale a publié conjointement la « Avis sur l'intégration de certains nouveaux projets de réadaptation médicale dans le champ de paiement de la sécurité médicale de base » en collaboration avec 5 départements sur la base du 9. projets de réadaptation médicale qui étaient initialement inclus dans le champ d'application du paiement, 20 nouveaux éléments de réadaptation tels que « l'évaluation globale de la réadaptation » seront inclus dans le champ d'application du paiement de l'assurance médicale. Il s'agit de la seule politique relative aux robots de rééducation. À l'avenir, l'assurance médicale pourrait prendre en charge l'utilisation de robots de rééducation avec des évaluations de rééducation complètes.

3. Besoins médicaux

Plus de 10 millions de patients meurent chaque année de maladies gastro-intestinales dans le monde. Jusqu'à un cinquième de la population chinoise souffre de maladies gastro-intestinales, ce qui la classe au premier rang mondial. Selon l'enquête, en raison de facteurs tels que la pression élevée de la vie des citadins, le stress au travail, les heures supplémentaires fréquentes, les longues périodes de position assise, la socialisation excessive, le régime alimentaire non scientifique, le travail et le repos irréguliers, etc., les trois principales maladies du monde ville sont les maladies du système gastro-intestinal et digestif, la stéatose hépatique, l'hépatite B et d'autres maladies du foie, la colonne cervicale, la colonne lombaire et l'hyperplasie osseuse. Les maladies du système gastro-intestinal et digestif sont devenues la maladie la plus répandue à Pékin, Shanghai, Guangzhou et Shenzhen.

Le taux actuel de dépistage précoce du cancer en Chine est faible et il existe une énorme marge d'amélioration du taux de pénétration du diagnostic endoscopique. Ce projet résout principalement la douleur de l'examen endoscopique pour les patients et les problèmes de lésions des muqueuses, de saignements, de perforations gastro-intestinales et. médicaments anesthésiques qui provoquent facilement des lésions du côlon lors de l'endoscopie par insertion. Risques tels que la réduction de la tension.

Pendant l'opération d'endoscopie d'insertion, des opérations de poussée, de traction et de torsion sont nécessaires pour permettre à l'endoscope de traverser la courbure intestinale ou pour obtenir une observation complète des lésions suspectes. Cela provoque non seulement de la douleur au patient, mais en apporte également de nombreuses. complications telles que : abrasion intestinale voire perforation, accident cardio-pulmonaire, etc. L'examen endoscopique traditionnel peut provoquer des douleurs et des complications chez les patients. En réponse à cette demande, nous avons conçu un micro-robot pour améliorer le processus d'examen, permettant un examen non invasif et indolore.

Robot de diagnostic gastro-intestinal Inchworm piloté par une bobine SMA

2. Présentation de l'équipe

1. Aperçu de l'équipe

L'équipe de réadaptation FHC est affiliée au Mecol Studio de l'École de génie mécanique et électrique de l'Université de l'industrie légère de Zhengzhou et de Zhengzhou Sally Technology Co., Ltd. L'équipe de réadaptation du FHC s'efforce de mettre en pratique les nouvelles avancées scientifiques et technologiques pour faciliter la vie, résoudre les problèmes sociaux et profiter à la société. Nous continuons à lancer des produits fiables et pratiques et à les améliorer continuellement au cours du processus de demande, afin qu'un plus grand nombre de patients atteints de maladies gastro-intestinales puissent obtenir un diagnostic plus précis de la cause. Nous utilisons notre technologie, notre expérience et nos services de haute qualité pour fournir aux clients des produits satisfaisants, répondre en permanence aux besoins des clients, continuer à améliorer la qualité des produits et créer une bonne valeur commerciale et sociale.

L'équipe de réadaptation FHC a été fondée sur la base du studio Mekel de l'école de génie mécanique et électrique de l'université de l'industrie légère de Zhengzhou. L'ensemble de l'équipe est directement gérée par un groupe central composé d'un chef de projet et de deux chefs de projet adjoints. Elle compte également des chefs de départements tels que le personnel, le marketing, les finances, la technologie, le contrôle qualité et l'équipement. travailler avec l’équipe principale pour gérer l’ensemble de l’équipe. Au fur et à mesure que la taille de l'équipe augmente et que le nombre de clients augmente, une structure organisationnelle de type entreprise se formera progressivement. Les membres de l’équipe d’entrepreneuriat exercent leurs fonctions respectives et participeront à tous les aspects du projet. Parallèlement, nous disposons également de professeurs et de consultants en affaires ayant une expérience dans des domaines connexes (notamment le marketing, la publicité, etc.) pour guider les opérations de l'équipe.

2. Introduction aux principaux membres de l'équipe

(1) Équipe consultative de mentors et de médecins

Instructeur :

Chen Lumin, PhD en ingénierie de l'Université Tsinghua. Il est titulaire d'une licence en génie mécanique de l'Université des sciences et technologies de Chengdu et d'une maîtrise en mécanique mathématique de l'Institut d'aéronautique et d'astronautique de Nanjing. Il est diplômé de l'Université Tsinghua en 2004 et travaille actuellement à l'Université de l'industrie légère de Zhengzhou en tant que professeur et. directeur de l'Institut de génie mécanique et électrique. Ces dernières années, il a principalement entrepris des projets : Recherche médicale en santé pour les populations âgées et handicapées - Projet de plan national clé de R&D - Sous-thèmes de recherche sur les normes importantes pour les services de santé et la détection de santé à distance pour les populations âgées et handicapées, pouvoir de couplage des le mécanisme de bague de guidage rotatif adaptatif des machines-outils coulissantes Recherche scientifique et de stabilité, projet de coopération pour le développement scientifique et technologique de la province du Henan, sous-système de machine de lithographie par projection à haute résolution, plate-forme d'analyse de dynamique statique et de simulation de paramètres, sous-projet national "863", deuxième personne en charge, etc.

Li Yihao, Ph.D., professeur agrégé, pilier académique du génie mécanique, une discipline clé de la province du Henan, et l'un des 10 000 mentors exceptionnels en innovation et en entrepreneuriat à l'échelle nationale. Diplômé de l'Université de Chongqing en 2001, avec spécialisation en conception mécanique et automatisation, avec un baccalauréat en ingénierie ; diplômé de l'Université de Chongqing en 2004, avec spécialisation en conception mécanique et automatisation, avec une maîtrise en ingénierie, diplômé de l'Université des sciences et technologies de Huazhong ; en 2013, majeure en génie mécanique et électronique, avec un baccalauréat en ingénierie et un doctorat.

Médecin consultant :

Guo Lei, travaille au service de réadaptation de l'hôpital des travailleurs du Henan en tant que médecin traitant. Fournir des conseils et un jugement d'effet pour les essais cliniques du projet, et fournir des conseils sur les indicateurs de démonstration de problèmes et de rapport de réadaptation pour le système d'évaluation de la réadaptation.

Je travaille actuellement au service de réadaptation de l'hôpital provincial des travailleurs du Henan en tant que médecin traitant et est engagé dans un travail de réadaptation de première ligne depuis longtemps. Possède de nombreuses années d’expérience en réadaptation clinique.

Unité de guidage :

Zhengzhou Sali Technology Co., Ltd.

Coopérer avec de véritables entreprises de la société peut permettre à nos étudiants de démarrer leur propre entreprise hors de la tour d'ivoire et sur la scène sociale. Nous pouvons véritablement intégrer nos idées et nos produits technologiques avec les entreprises et la société, formant ainsi une situation d'entraide entre les deux. l’industrie, le monde universitaire et la recherche, et finalement évoluer vers des avantages pratiques pour les êtres humains.

(2) Membres principaux de l'équipe

Notre équipe compte actuellement dix membres, chacun issus de disciplines différentes. Nous nous sommes réunis en raison des mêmes intérêts et pouvons réaliser une coopération interprofessionnelle, avec un large éventail de connaissances et d'excellentes. résultats d’apprentissage professionnel. Nous avons les raisons suivantes pour mener à bien ce projet :

Membres de l'équipe :

Hao Tian, ​​​​spécialisé en ingénierie de fabrication intelligente, bon en gestion d'équipe, en organisation et en coordination du travail, responsable de la gestion d'équipe et cherchant le bon développement du projet .

Fan Jiayi, spécialisé en conception mécanique, fabrication et automatisation, est responsable de l'orientation de l'avancement de chaque module majeur du projet et de l'affectation et de l'ajustement globaux du personnel du projet, et inspecte et supervise l'avancement global.

Xu Fuquan, spécialisé en conception mécanique, fabrication et automatisation, est responsable de la simulation et de l'optimisation du mécanisme logiciel du projet et de la simulation des scènes de mouvement du mécanisme.

Zhang Jingwei, spécialisé en ingénierie de fabrication intelligente, est responsable du développement de projets de circuits intégrés. Il est engagé depuis longtemps dans la simulation de circuits, le développement de matériel de circuits, etc. pour améliorer les fonctions des produits.

Chen Yi, spécialisé en génie logiciel, est responsable du développement de plates-formes logicielles dans le système de diagnostic des lésions. Il est engagé depuis longtemps dans la reconnaissance d'images, l'apprentissage en profondeur et d'autres travaux. Il possède une riche expérience en matière de développement de logiciels et s'améliore. fonctions du produit.

Wang Chen, spécialisé en ingénierie automobile, est responsable de la conception structurelle et de l'optimisation des micro-robots, et maîtrise divers logiciels de conception tridimensionnelle et logiciels de simulation par éléments finis.

Zhao Haitao, spécialisé en génie logiciel, est responsable des systèmes de contrôle de communication sans fil et maîtrise la technologie d'interaction homme-machine et la technologie d'application des capteurs.

Niu Xuewei, spécialisé en gestion logistique, est responsable de la préparation des logiciels de micro-robots et des expériences SMA, et est bon dans la mise en pratique des connaissances théoriques.

Wang Shengfeng, spécialisé en automatisation, est responsable du contrôle PID de la vague PWM des micro-robots et est bon en conception et simulation de circuits.

Wang Yuesong, majeur en génie logiciel, conception frontale pour l'identification de lésions complexes et l'évaluation de la rééducation, bon en développement d'interface Hongmeng.

3. Scénarios d'application

Ce projet étudie un système de diagnostic par micro-robot non invasif à bobine SMA pour les patients en gastro-entérologie, qui peut être utilisé pour la détection et l'examen des patients en gastro-entérologie ou des patients potentiels. Les clients cibles comprennent les groupes suivants :

  1. Toute personne, quel que soit son sexe, de plus de 45 ans, devrait subir une endoscopie gastro-intestinale. En cas de résultats positifs (ulcères, polypes, etc.), ils doivent être revus régulièrement après le traitement.
  2. Les personnes ayant des antécédents familiaux de cancer de l'œsophage, de cancer gastrique et de cancer intestinal peuvent avancer l'âge de l'examen initial jusqu'à 40 voire 35 ans.
  3. Avoir de mauvaises habitudes de vie, notamment fumer, boire, manger de manière irrégulière, trop manger, manger trop de poisson et de viande, aimer les aliments marinés et les barbecues, une pression de travail élevée et veiller souvent tard, etc.
  4. Les personnes qui ressentent des inconforts du tube digestif, tels que des maux d'estomac, des douleurs abdominales hautes, des douleurs abdominales basses, des reflux acides, des éructations, une plénitude, etc.
  5. L'inconfort intestinal peut se manifester par des douleurs abdominales basses, des changements dans les habitudes et les caractéristiques de l'intestin, comme une défécation une fois par jour au lieu de plusieurs défécations par jour, ou de la constipation, des selles molles, des selles sanglantes, des selles sanglantes ressemblant à du mucus, etc.

Pendant l'épidémie, les gens ne peuvent rester isolés qu'à la maison, et les ressources médicales sont rares et une main-d'œuvre suffisante ne peut pas être fournie. Les patients ne peuvent pas obtenir d'informations en temps opportun sur leurs problèmes gastro-intestinaux, en particulier ceux des zones rurales, qui ont du mal à recevoir un traitement de réadaptation efficace. Cependant, ce projet utilise un système de détection et d'identification gastro-intestinale pour effectuer un dépistage et un diagnostic à tout moment et en tout lieu. surveiller l'état de rétablissement du patient et fournir des conseils médicaux et des options de rétablissement. Ce produit utilise un micro-robot auto-conçu pour les tests gastro-intestinaux. Comparé à l'endoscopie gastro-intestinale traditionnelle, il présente les caractéristiques d'une utilisation indolore, sans complications, d'une opération simple et d'une grande précision. Grâce aux produits étudiés dans ce projet, les patients peuvent effectuer des examens diagnostiques à domicile, accélérant ainsi la détection précoce et le traitement des maladies gastro-intestinales.

4. Fonctions du produit

1. Pilote SMA

En cours de contrôle de la flexion flexible du pilote SMA. Un flux de contrôle approprié doit être sélectionné pour atteindre l’objectif de contrôler la déformation quantitative de l’actionneur SMA. Une tension de contrôle appropriée peut permettre un contrôle précis de la flexion du fil SMA et contribuer à prolonger la durée de vie de la structure du pilote SMA. Une tension plus élevée est bénéfique pour la réponse rapide du pilote, mais entraînera une augmentation trop rapide de la température du fil en alliage à mémoire, affectant la précision du contrôle et pouvant causer des dommages structurels au pilote. Notre équipe a mené 116 expériences de tension de commande. Le fil SMA d'un diamètre de 0,7 mm et d'un diamètre de 10 cm a été chauffé par une alimentation électrique d'étudiant. L'expérience a montré que lorsque la tension de commande est de 3,2 à 3,4 V, la vitesse de réponse est la plus rapide. lorsque la perte de vie du fil SMA est la plus faible, l'effet de déformation est le plus évident.

Robot de diagnostic gastro-intestinal Inchworm piloté par une bobine SMA

Pour obtenir des données sur le point critique de température de changement de phase, nous avons utilisé un thermomètre infrarouge pour la mesure. Lorsque la tension a atteint 3,2 V, la température mesurée de la bobine SMA a atteint 76,6°C. cette température atteint la condition de changement de phase. Le taux de retrait est mesuré à l'aide de la méthode de reconnaissance d'image. Une plaque acrylique transparente est utilisée pour placer la bobine SMA horizontalement sur un plan de fond blanc. Une caméra haute définition est utilisée pour filmer horizontalement à une hauteur de 30 cm. L'échelle de gris et la longueur du pixel sont mesurées. L'erreur peut être contrôlée au niveau du micron.

Robot de diagnostic gastro-intestinal Inchworm piloté par une bobine SMA

Robot de diagnostic gastro-intestinal Inchworm piloté par une bobine SMA

La bobine SMA est utilisée comme unité d'entraînement pour contrôler le mouvement avant et arrière du robot, obtenant une démarche continue en imitant la disposition et le mécanisme de mouvement des fibres musculaires du ver pouce.

Robot de diagnostic gastro-intestinal Inchworm piloté par une bobine SMA

2. Système d'identification des lésions basé sur l'apprentissage profond

Ce système utilise la technologie de segmentation d'images pour segmenter les images de polypes intestinaux, transmet les données et les déploie sur un serveur qui utilise des programmes de prédiction de modèles d'apprentissage profond et analyse les données. sur le serveur, un prétraitement est effectué, suivi d'une segmentation d'image, et les données interagissent avec le modèle d'apprentissage profond pour obtenir des résultats de prédiction destinés au diagnostic par des médecins professionnels.

Robot de diagnostic gastro-intestinal Inchworm piloté par une bobine SMA

Les données d'image capturées par la caméra sur la tête du robot peuvent être transmises au téléphone mobile de l'ordinateur hôte en temps réel via son propre point d'accès WIFI. De plus, nous disposons d'une application mobile qui déploie le modèle, et nous pouvons obtenir des résultats optimaux en comparant les niveaux de confiance. Le côté droit est la valeur de précision et de perte générée au cours de notre processus de formation réel. atteint jusqu'à 87,2 %, et la perte est tombée à très faible.

Robot de diagnostic gastro-intestinal Inchworm piloté par une bobine SMA

Robot de diagnostic gastro-intestinal Inchworm piloté par une bobine SMA

3. Interface d'interaction homme-machine basée sur HarmonyOS

Le système HarmonyOS est un système d'exploitation distribué à scénario complet pour l'Internet de tout. Nous avons intégré le processus d'identification du système d'identification des lésions dans l'ordinateur humain conçu. interaction basée sur HarmonyOS Sur la page, des images de l'intestin en temps réel sont capturées, la technologie de segmentation d'images est utilisée pour segmenter les images des polypes intestinaux et les données sont transmises à un serveur qui déploie un programme de prédiction utilisant un modèle d'apprentissage en profondeur. le prétraitement des données, la segmentation des images sont effectués et les données sont combinées avec le modèle d'apprentissage profond Interact et obtiennent des résultats de prédiction pour le diagnostic par des médecins professionnels.

Robot de diagnostic gastro-intestinal Inchworm piloté par une bobine SMA

Robot de diagnostic gastro-intestinal Inchworm piloté par une bobine SMA

4. Implémentation du système Internet des objets

(Ce chapitre décrit principalement l'architecture technologique de l'Internet des objets utilisée pour mettre en œuvre des fonctions, notamment la technologie de couche de perception, la technologie de couche de transmission, la technologie de couche de contrôle, la technologie de développement de logiciels, applications cloud, applications d'exploration de données et de visualisation, etc.)

(1) Couche de perception

Dans la couche de perception, nous pouvons réaliser le contrôle de démarrage et d'arrêt du moteur en connectant le circuit d'entraînement du moteur au port d'E/S du MCU ; en connectant le circuit de commande de la caméra au MCU connecté au port e/s, le contrôle de démarrage et d'arrêt de la caméra peut être réalisé. Le courant de fonctionnement du moteur reflète l'état de mouvement du moteur. Le module de détection de courant est conçu pour détecter le courant du moteur en temps réel. Les données de détection sont lues à partir du port AD du MCU pour déterminer l'état de fonctionnement du moteur. et obtenir un contrôle efficace du mécanisme d'entraînement du moteur. Afin de surveiller l'état de fonctionnement du robot en temps réel, il est nécessaire de transmettre les données de détection à l'écran de l'interface homme-machine de l'ordinateur hôte.

(2) Couche de transmission

Le médecin envoie des instructions de contrôle via l'interface homme-machine de l'ordinateur hôte. Une fois les instructions de contrôle générées par l'ordinateur hôte, elles sont envoyées à l'émetteur-récepteur de commandes/données via le bus série RS232. . Le MCU de l'émetteur-récepteur de commandes/données est connecté au circuit du port série via l'interface de communication du port série RX/TX pour recevoir le code d'instruction envoyé par l'ordinateur hôte ; le MCU de l'émetteur-récepteur de commandes/données est également connecté au circuit de communication ; via l'interface de communication SPI pour envoyer le code d'instruction au circuit de communication pour la transmission sans fil.

Le circuit de communication intégré dans la carte de contrôle de communication reçoit sans fil le code d'instruction et envoie le code d'instruction au MCU de la carte de contrôle de communication via l'interface de communication SPI. Si le contenu de l'instruction comprend une commande de démarrage de la caméra, le MCU de la caméra commence à configurer l'état de fonctionnement et les paramètres d'image du capteur d'image dans le module d'acquisition d'image via le bus de contrôle SCCB une fois la configuration correcte, le module d'acquisition d'image commence à fonctionner ; émet indépendamment et directement des signaux d'image analogiques vers le circuit de transmission effectue une transmission sans fil. Une fois que le récepteur d'images in vitro a reçu le signal d'image, il envoie l'image à la carte d'acquisition d'images de l'ordinateur hôte via la ligne vidéo. La carte d'acquisition d'images convertit et compresse le format d'image, puis la stocke dans l'ordinateur hôte et l'affiche. sur l'interface homme-machine.

(3) Couche de contrôle

La carte de contrôle de communication se compose de cinq modules : circuit de stabilisation de tension, circuit de commande principal MCU, circuit de communication, circuit d'entraînement (entraînement de moteur + entraînement de caméra) et circuit de détection de courant.

Le circuit de contrôle principal du MCU utilise un PIC16F690 (Microchip), qui dispose d'une interface de communication série USART et d'une interface périphérique série SPI. Le circuit de communication est mis en œuvre sur la base de la puce Si4455 (Silicon Labs) et d'un certain nombre de composants périphériques inductifs et capacitifs et d'un oscillateur à cristal passif de 30 MHz. Le circuit de communication situé sur la carte de contrôle de communication doit recevoir le code de commande envoyé par l'émetteur-récepteur de commandes/données, et doit également envoyer les données de fonctionnement du robot détectées à l'émetteur-récepteur de commandes/données. Le circuit d'entraînement utilise deux morceaux de pont en H AT5550 pour entraîner le moteur du mécanisme de mouvement et la caméra, démarrer et arrêter la caméra et atteindre l'objectif d'économie d'énergie. Le circuit de détection de courant est implémenté sur la base de la puce MAX4173 (Maxim) et est utilisé pour détecter le courant du moteur en temps réel afin de déterminer l'état de fonctionnement du moteur et d'effectuer un contrôle efficace.

(4) Logiciel et environnement de développement

L'interface d'interaction homme-machine de l'ordinateur hôte est écrite en PyQt5. Les programmes de couche de détection, de couche de transmission et de couche de contrôle sont écrits à l'aide du framework Arduino.

Nous utilisons Arduino MEGA pour mettre en œuvre la loi de contrôle (contrôleur PID, etc.) afin d'ajuster le cycle de service de l'onde PWM, ajustant ainsi le courant de commande du circuit pour contrôler le processus "chauffage-refroidissement-chauffage" du SMA et obtenir la « relaxation » de la bobine SMA -Mouvement alternatif dynamique de « contraction-relaxation ». Ensuite, l'actionneur micro SMA est contrôlé pour se déplacer, entraînant le robot à réaliser un mouvement rythmé.

(5) Application Cloud

Nous avons développé une interface basée sur PyQt5 sur l'ordinateur hôte, qui permet d'afficher en même temps les images intestinales collectées par la caméra et les valeurs de fonctionnement du courant moteur. , vous pouvez également cliquer sur les boutons de commande et saisir les paramètres de fonctionnement pour contrôler efficacement les mouvements du robot.

De plus, nous nous préparons à développer une interface d'interaction homme-machine basée sur HarmonyOS, qui permettra aux médecins de contrôler le robot intestinal et de visualiser des images intestinales sur leurs téléphones portables

Le code de l'ensemble de formation est le suivant :

<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">import</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">torch</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">optim</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">as</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">optim</span>`<br>`<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">import</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">torch</span>`<br>`<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">import</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">torch</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">nn</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">as</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">nn</span>`<br>`<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">import</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">torch</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">nn</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">parallel</span>`<br>`<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">import</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">torch</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">utils</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">data</span>`<br>`<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">import</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">torch</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">utils</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">data</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">distributed</span>`<br>`<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">import</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">torchvision</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">transforms</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">as</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">transforms</span>`<br>`<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">from</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">dataset</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">dataset</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">import</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">SeedlingData</span>`<br>`<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">from</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">torch</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">autograd</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">import</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">Variable</span>`<br>`<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">import</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">pretrainedmodels</span>`<br>`<span style="color: rgb(106, 115, 125); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);"># 设置全局参数`</span><br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">modellr</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">1e-4</span>`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">BATCH_SIZE</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">16</span>`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">EPOCHS</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">20</span>`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">DEVICE</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">torch</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">device</span>(<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'cuda'</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">if</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">torch</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">cuda</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">is_available</span>() <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">else</span> <span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'cpu'</span>)`<br>`<span style="color: rgb(106, 115, 125); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);"># 数据预处理`</span><br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">transform</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">transforms</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">Compose</span>([`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">transforms</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">Resize</span>((<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">224</span>, <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">224</span>)),`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">transforms</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">ToTensor</span>(),`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">transforms</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">Normalize</span>([<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">0.5</span>, <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">0.5</span>, <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">0.5</span>], [<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">0.5</span>, <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">0.5</span>, <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">0.5</span>])`<br>`])`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">transform_test</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">transforms</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">Compose</span>([`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">transforms</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">Resize</span>((<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">224</span>, <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">224</span>)),`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">transforms</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">ToTensor</span>(),`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">transforms</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">Normalize</span>([<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">0.5</span>, <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">0.5</span>, <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">0.5</span>], [<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">0.5</span>, <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">0.5</span>, <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">0.5</span>])`<br>`])`<br>`<span style="color: rgb(106, 115, 125); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);"># 读取数据`</span><br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">dataset_train</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">SeedlingData</span>(<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'data/train'</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">transforms</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">transform</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">train</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">True</span>)`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">dataset_test</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">SeedlingData</span>(<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">"data/train"</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">transforms</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">transform_test</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">train</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">False</span>)`<br>`<span style="color: rgb(106, 115, 125); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);"># 导入数据`</span><br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">train_loader</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">torch</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">utils</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">data</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">DataLoader</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">dataset_train</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">batch_size</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">BATCH_SIZE</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">shuffle</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">True</span>)`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">test_loader</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">torch</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">utils</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">data</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">DataLoader</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">dataset_test</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">batch_size</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">BATCH_SIZE</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">shuffle</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">False</span>)`<br>`<span style="color: rgb(106, 115, 125); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);"># 实例化模型并且移动到GPU`</span><br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">criterion</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">nn</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">CrossEntropyLoss</span>()`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">model_ft</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">pretrainedmodels</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">__dict__</span>[<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'se_resnet50'</span>](<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">num_classes</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span><span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">1000</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">pretrained</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span><span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'imagenet'</span>)`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">model_ft</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">fc</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">classifier</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">nn</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">Sequential</span>(`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">nn</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">Linear</span>(<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">2048</span>, <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">512</span>),`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">nn</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">LeakyReLU</span>(<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">True</span>),`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">nn</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">Dropout</span>(<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">0.5</span>),`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">nn</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">Linear</span>(<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">512</span>, <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">12</span>),`<br>`)`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">model_ft</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">to</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">DEVICE</span>)`<br>`<span style="color: rgb(106, 115, 125); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);"># 选择简单暴力的Adam优化器,学习率调低`</span><br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">optimizer</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">optim</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">AdamW</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">model_ft</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">parameters</span>(), <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">lr</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">modellr</span>)`<br>`<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">def</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">adjust_learning_rate</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">optimizer</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">epoch</span>):`<br>`<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">"""Sets the learning rate to the initial LR decayed by 10 every 30 epochs"""</span>`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">modellrnew</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">modellr</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">*</span> (<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">0.1</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">*</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">*</span> (<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">epoch</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">/</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">/</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">50</span>))`<br>`<span style="color: rgb(111, 66, 193); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">print</span>(<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">"lr:"</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">modellrnew</span>)`<br>`<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">for</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">param_group</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">in</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">optimizer</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">param_groups</span>:`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">param_group</span>[<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'lr'</span>] <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">modellrnew</span>`<br>`<span style="color: rgb(106, 115, 125); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);"># 定义训练过程`</span><br>`<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">def</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">train</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">model</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">device</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">train_loader</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">optimizer</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">epoch</span>):`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">model</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">train</span>()`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">sum_loss</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">0</span>`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">total_num</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(111, 66, 193); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">len</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">train_loader</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">dataset</span>)`<br>`<span style="color: rgb(111, 66, 193); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">print</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">total_num</span>, <span style="color: rgb(111, 66, 193); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">len</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">train_loader</span>))`<br>`<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">for</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">batch_idx</span>, (<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">data</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">target</span>) <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">in</span> <span style="color: rgb(111, 66, 193); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">enumerate</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">train_loader</span>):`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">data</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">target</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">Variable</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">data</span>).<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">to</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">device</span>), <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">Variable</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">target</span>).<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">to</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">device</span>)`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">output</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">model</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">data</span>)`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">loss</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">criterion</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">output</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">target</span>)`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">optimizer</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">zero_grad</span>()`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">loss</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">backward</span>()`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">optimizer</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">step</span>()`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">print_loss</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">loss</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">data</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">item</span>()`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">sum_loss</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">+=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">print_loss</span>`<br>`<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">if</span> (<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">batch_idx</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">+</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">1</span>) <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">%</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">10</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">==</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">0</span>:`<br>`<span style="color: rgb(111, 66, 193); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">print</span>(<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">format</span>(`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">epoch</span>, (<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">batch_idx</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">+</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">1</span>) <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">*</span> <span style="color: rgb(111, 66, 193); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">len</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">data</span>), <span style="color: rgb(111, 66, 193); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">len</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">train_loader</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">dataset</span>),`<br>`<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">100</span>. <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">*</span> (<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">batch_idx</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">+</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">1</span>) <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">/</span> <span style="color: rgb(111, 66, 193); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">len</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">train_loader</span>), <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">loss</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">item</span>()))`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">ave_loss</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">sum_loss</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">/</span> <span style="color: rgb(111, 66, 193); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">len</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">train_loader</span>)`<br>`<span style="color: rgb(111, 66, 193); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">print</span>(<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'epoch:{},loss:{}'</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">format</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">epoch</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">ave_loss</span>))`<br>`<span style="color: rgb(106, 115, 125); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);"># 验证过程`</span><br>`<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">def</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">val</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">model</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">device</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">test_loader</span>):`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">model</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">eval</span>()`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">test_loss</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">0</span>`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">correct</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">0</span>`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">total_num</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(111, 66, 193); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">len</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">test_loader</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">dataset</span>)`<br>`<span style="color: rgb(111, 66, 193); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">print</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">total_num</span>, <span style="color: rgb(111, 66, 193); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">len</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">test_loader</span>))`<br>`<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">with</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">torch</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">no_grad</span>():`<br>`<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">for</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">data</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">target</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">in</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">test_loader</span>:`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">data</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">target</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">Variable</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">data</span>).<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">to</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">device</span>), <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">Variable</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">target</span>).<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">to</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">device</span>)`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">output</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">model</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">data</span>)`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">loss</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">criterion</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">output</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">target</span>)`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">_</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">pred</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">torch</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">max</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">output</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">data</span>, <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">1</span>)`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">correct</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">+=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">torch</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">sum</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">pred</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">==</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">target</span>)`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">print_loss</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">loss</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">data</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">item</span>()`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">test_loss</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">+=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">print_loss</span>`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">correct</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">correct</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">data</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">item</span>()`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">acc</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">correct</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">/</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">total_num</span>`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">avgloss</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">test_loss</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">/</span> <span style="color: rgb(111, 66, 193); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">len</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">test_loader</span>)`<br>`<span style="color: rgb(111, 66, 193); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">print</span>(<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'\nVal set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n'</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">format</span>(`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">avgloss</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">correct</span>, <span style="color: rgb(111, 66, 193); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">len</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">test_loader</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">dataset</span>), <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">100</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">*</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">acc</span>))`<br>`<span style="color: rgb(106, 115, 125); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);"># 训练`</span><br>`<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">for</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">epoch</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">in</span> <span style="color: rgb(111, 66, 193); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">range</span>(<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">1</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">EPOCHS</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">+</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">1</span>):`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">adjust_learning_rate</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">optimizer</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">epoch</span>)`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">train</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">model_ft</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">DEVICE</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">train_loader</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">optimizer</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">epoch</span>)`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">val</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">model_ft</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">DEVICE</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">test_loader</span>)`<br>`<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">torch</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">save</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">model_ft</span>, <span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'model.pth'</span>)
Copier après la connexion

5. Project Innovation Point

1. Work Innovation

Ce projet intègre trois modules : un système d'inspection hiérarchique gastro-intestinale, un système de diagnostic basé sur l'identification et le positionnement des lésions, et un micro-robot ressemblant à un ver pour effectuer un dépistage et un diagnostic précoces. cancer ou tumeurs chez les patients atteints de maladies gastro-intestinales et propose des programmes de rééducation pour les maladies gastro-intestinales.

Pilote de bobine SMA miniaturisé

Ce projet utilise un matériau SMA (alliage à mémoire de forme) comme noyau d'entraînement du pilote miniaturisé. Le pilote est principalement composé de trois parties : une configuration stéréotypée d'une bobine SMA, d'un panneau de polychlorure de vinyle (panneau PVC) et d'une couche d'emballage en silicone (PDMS).

En cours de contrôle de la flexion flexible du pilote SMA. Notre équipe a mené 116 expériences de tension de commande et a prouvé que : lorsque la tension de commande est de 3,2 à 3,4 V, la vitesse de réponse est la plus rapide et l'effet de déformation est le plus évident lorsque la perte de vie du fil SMA est la plus faible.

Conception de simulation de démarche du ver bionique

Pour la conception globale du robot, le mouvement rampant à double ancre du ver pouces est simulé, qui est fixé par le train de roues d'ancrage aux deux extrémités du robot et entraîné et contracté par le SMA. bobine. En simulant le mouvement rampant d'un ver pouce, l'analyse de la démarche du mouvement du tronc lors de la rampe vers l'avant a été établie sur le logiciel de simulation dynamique Recurdyn.

Système de diagnostic et d'examen gastro-intestinal basé sur la technologie d'identification et de positionnement des lésions

Cette équipe utilise la technologie de segmentation d'images pour segmenter les images de polypes intestinaux, transmet les données à un serveur qui déploie un programme de prédiction de modèle d'apprentissage en profondeur et prétraite les données. sur le serveur Traitement, suivi d'une segmentation d'image, les données interagissent avec le modèle d'apprentissage profond et les résultats de prédiction sont obtenus pour le diagnostic par des médecins professionnels. La précision de la classification au niveau des pixels atteint 87,25 %. Parallèlement, une page d'interaction homme-machine a été créée, qui permet aux médecins de surveiller les symptômes des patients en temps réel et de visualiser les zones gastro-intestinales anormales.

2. Points d'innovation

(1) Pilote de bobine SMA miniaturisé

Ce projet s'est engagé dès le début dans la recherche et le développement d'équipements d'inspection miniaturisés, non invasifs et contrôlables afin de minimiser la taille du robot. , nous avons adopté le matériau SMA (alliage à mémoire de forme) qui sert de noyau moteur à l'actionneur miniaturisé.

SMA (Shape Memory Alloy), en tant que matériau intelligent qui intègre la détection et la conduite, a différentes formes et tailles sous différentes températures et contraintes. Il a un petit diamètre, une densité d'énergie élevée, une grande force de sortie, pas besoin de transmission et direct. Il présente les avantages d'un entraînement et d'une structure simples et compacts.

Macroscopiquement, le SMA présente deux caractéristiques, à savoir l'effet mémoire de forme et la superélasticité. L'effet de mémoire de forme signifie qu'une fois le SMA réglé à haute température, il est refroidi à basse température et chargé et déchargé. Il y a une contrainte résiduelle après le déchargement. À ce moment, le chauffage peut faire disparaître et revenir à la contrainte résiduelle du SMA. la forme à haute température. L'effet superélastique signifie qu'en chargeant le SMA à l'état austénitique, le SMA subit une déformation inélastique après déformation élastique, puis est déchargé, et le SMA peut reprendre spontanément sa forme avant le chargement. Le principe de conduite de ce produit est que la loi de contrôle (contrôleur PID, etc.) ajuste le cycle de service de l'onde PWM, ajustant ainsi le courant de commande du circuit pour contrôler le processus « chauffage-refroidissement-chauffage » du SMA, et réalisez la « relaxation-relaxation » de la bobine SMA. Le mouvement alternatif dynamique de « systole-diastole ».

Le pilote de bobine SMA miniaturisé que nous avons conçu est principalement composé de trois parties : une configuration stéréotypée de bobine SMA, un panneau de chlorure de polyvinyle (panneau PVC) et une couche d'emballage en silicone (PDMS). Le panneau PVC a un certain degré d'élasticité, ce qui permet au conducteur de revenir à son état d'origine pendant le processus de refroidissement du SMA. Le PDMS enveloppe les bobines SMA et les cartes PVC pour agir comme une structure. Étant donné que le PDMS est non seulement souple mais également étanche, le robot souple fabriqué à partir de ce pilote peut interagir en toute sécurité avec les personnes et effectuer des tâches dans l'environnement liquide de l'estomac. Comparé aux méthodes de tests gastro-intestinaux telles que la gastroscopie et l'échographie B, le microrobot conçu avec ce lecteur ne nuira pas au patient et le corps humain ne le rejettera pas.

Robot de diagnostic gastro-intestinal Inchworm piloté par une bobine SMA

(2) Conception de simulation de démarche du ver bionique

En étudiant l'affichage transversal du ver pouce, nous avons constaté que son corps est composé de tissus corporels, de tubes de cavité corporelle et de fibres musculaires longitudinales. Parmi eux, le ver pouce possède plusieurs fibres musculaires longitudinales disposées en cercle. Lorsque le ver pouce explore des directions multi-angles complexes, ses plusieurs fibres musculaires longitudinales fournissent différentes forces de traction. Par conséquent, pour la conception globale du robot, nous utilisons des filaments SMA qui agissent comme des fibres musculaires longitudinales pour assurer la traction.

En analysant le mouvement rampant du ver pouce, le mouvement de son tronc lorsqu'il rampe vers l'avant a été établi sur le logiciel d'analyse de simulation pour analyser sa démarche rampante. Il a été constaté que lorsqu'il rampait vers l'avant, le ver pouce contractait souvent son corps en un ". Sous la forme « Ω », les jambes aux deux extrémités de son corps sont fermement attachées au sol, et il avance ou change de posture en contractant et en allongeant sa taille et son abdomen.

Robot de diagnostic gastro-intestinal Inchworm piloté par une bobine SMA

Le principe selon lequel le ver pouce peut avancer est l'anisotropie du frottement entre les pattes et le sol. En tenant compte de l'environnement physique interne des intestins et de l'estomac, les intestins peuvent être simplifiés en un tube cylindrique. Le mouvement rampant à double ancre du ver peut être incarné par les trains d'engrenages d'ancrage aux deux extrémités du robot et les bobines SMA pour l'entraînement. contraction. En termes de contrôle, nous utilisons la carte de contrôle Arduino MEGA 2560 pour contrôler l'onde PWM en connectant le tube MOS à champ d'effet DC pour contrôler la taille du courant. En raison de la haute résistance du fil SMA, l'application d'un courant spécifique peut provoquer un changement de phase et ainsi rétrécir le fil SMA. En contrôlant le cycle de service du PWM pour contrôler la contraction et la relaxation du SMA, et avec la fixation de l'unité d'ancrage, le mouvement d'une vis sans fin peut être simulé pour la conduite. En ajoutant des cabines de collecte de colonies bactériennes, des micro-projecteurs et des caméras aux deux extrémités du robot, le produit devient plus multifonctionnel.

Robot de diagnostic gastro-intestinal Inchworm piloté par une bobine SMA

En termes d'analyse de la démarche, le logiciel de dynamique multi-corps recurdyn est utilisé pour analyser la cinématique et la dynamique du conducteur, simuler la vitesse de mouvement et la démarche du micro-robot, et le combiner avec des expériences physiques.

Robot de diagnostic gastro-intestinal Inchworm piloté par une bobine SMA

(3) Système de diagnostic et d'examen gastro-intestinal basé sur la technologie d'identification et de positionnement des lésions

Segmentez séparément les parties ayant une signification particulière dans l'image médicale. Dans le domaine médical, les médecins s'appuient principalement sur des images de films médicaux et des jugements subjectifs pour diagnostiquer les maladies. La segmentation des images médicales est une étape clé de la reconstruction médicale tridimensionnelle et de l'analyse quantitative. C'est également une condition technique importante pour la quantification des zones lésionnelles et la sélection. des méthodes de traitement et de la radiothérapie. La précision des résultats de segmentation affecte directement les effets ultérieurs du traitement. Notre équipe utilise la technologie de segmentation d'images pour segmenter les images de polypes intestinaux, transmet les données à un serveur qui déploie un programme de prédiction de modèle d'apprentissage profond, prétraite les données sur le serveur, puis effectue la segmentation d'images et compare les données avec le modèle d'apprentissage profond. Interagissez et obtenez des résultats de prédiction pour le diagnostic par des médecins professionnels.

Nous utilisons le cadre de réseau entièrement convolutif proposé par Long et al. pour entraîner le domaine de la segmentation d'images, en remplaçant la couche entièrement connectée du modèle CNN classique par une couche convolutive. L'ensemble du réseau est composé d'une couche convolutive et d'un pooling. couche. La partie codage est le processus d'extraction de caractéristiques de grande dimension. La partie décodage utilise la déconvolution pour le suréchantillonnage, de sorte que la taille de l'image résultante de la segmentation soit la même que la taille de l'image d'entrée, obtenant ainsi une classification au niveau des pixels avec une précision de . jusqu'à 87,25%.

​Pour en savoir plus sur l'open source, veuillez visiter :​

​Communauté logicielle de base Open Source 51CTO​

​https://ost.51cto.com​​ .

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:51cto.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal